{"version":3,"sources":["polyfill.js","moment.min.js","moment-timezone-with-data-2012-2022.min.js","log4javascript.js","angular-animate.js","angular-cookies.js","angular-messages.js","angular-sanitize.js","angular-touch.js","angular-ui-router.min.js","validate.min.js","dist/angular-cache.js","Sortable.min.js","angular-http-batch.min.js","angular-translate.min.js","angular-translate-loader-partial.min.js","angular-translate-storage-cookie.min.js","angular-translate-storage-local.min.js","messageformat.js","angular-translate-interpolation-messageformat.min.js","../PNotify.js","../PNotifyButtons.js","angular-pnotify.js","angular-cookie.min.js","angular-webstorage.min.js","bootstrap.min.js","ui-bootstrap-tpls.min.js","bootstrap-switch.min.js","angular-bootstrap-switch.min.js","sortable.js","/source/adf.js","/source/column.js","/source/dashboard.js","/source/provider.js","/source/row.js","/source/widget-content.js","/source/widget.js","/source/angular-dashboard-framework.tpl.js","/source/angular-dashboard-framework.js","core.min.js","widget.min.js","mouse.min.js","resizable.min.js","sortable.min.js","jquery.ui.touch-punch.min.js","angular-block-ui.js","promise-tracker.js","loading-bar.min.js","../src/core/Util.js","../src/core/Class.js","../src/core/Events.js","../src/geometry/Point.js","../src/geometry/Bounds.js","../src/geo/LatLngBounds.js","../src/geo/LatLng.js","../src/geo/crs/CRS.js","../src/geo/projection/Projection.SphericalMercator.js","../src/geo/crs/CRS.Earth.js","../src/geometry/Transformation.js","../src/geo/crs/CRS.EPSG3857.js","../src/layer/vector/SVG.Util.js","../src/core/Browser.js","../src/dom/DomEvent.Pointer.js","../src/dom/DomEvent.DoubleTap.js","../src/dom/DomUtil.js","../src/dom/DomEvent.js","../src/dom/PosAnimation.js","../src/map/Map.js","../src/control/Control.js","../src/control/Control.Layers.js","../src/control/Control.Zoom.js","../src/control/Control.Scale.js","../src/control/Control.Attribution.js","../src/control/index.js","../src/core/Handler.js","../src/core/index.js","../src/geometry/LineUtil.js","../src/dom/Draggable.js","../src/geometry/PolyUtil.js","../src/geo/crs/CRS.EPSG3395.js","../src/geo/projection/Projection.LonLat.js","../src/geo/projection/Projection.Mercator.js","../src/geo/crs/CRS.EPSG4326.js","../src/geo/crs/CRS.Simple.js","../src/geo/crs/index.js","../src/layer/Layer.js","../src/layer/LayerGroup.js","../src/layer/FeatureGroup.js","../src/layer/marker/Icon.js","../src/layer/marker/Icon.Default.js","../src/layer/marker/Marker.Drag.js","../src/layer/marker/Marker.js","../src/layer/vector/Path.js","../src/layer/vector/CircleMarker.js","../src/layer/vector/Circle.js","../src/layer/vector/Polyline.js","../src/layer/vector/Polygon.js","../src/layer/GeoJSON.js","../src/layer/ImageOverlay.js","../src/layer/VideoOverlay.js","../src/layer/SVGOverlay.js","../src/layer/DivOverlay.js","../src/layer/Popup.js","../src/layer/Tooltip.js","../src/layer/marker/DivIcon.js","../src/layer/marker/index.js","../src/layer/tile/GridLayer.js","../src/layer/tile/TileLayer.js","../src/layer/tile/TileLayer.WMS.js","../src/layer/tile/index.js","../src/layer/vector/Renderer.js","../src/layer/vector/Canvas.js","../src/layer/vector/SVG.VML.js","../src/layer/vector/SVG.js","../src/layer/vector/Renderer.getRenderer.js","../src/layer/vector/Rectangle.js","../src/layer/vector/index.js","../src/layer/index.js","../src/map/handler/Map.BoxZoom.js","../src/map/handler/Map.DoubleClickZoom.js","../src/map/handler/Map.Drag.js","../src/map/handler/Map.Keyboard.js","../src/map/handler/Map.ScrollWheelZoom.js","../src/map/handler/Map.Tap.js","../src/map/handler/Map.TouchZoom.js","../src/map/index.js","Bing.js","KML.js","leaflet.awesome-markers.min.js","simpleheat.js","HeatLayer.js","leaflet.markercluster.js","d3.min.js","metricsgraphics.min.js","jquery.signalR.min.js","signalr-hub.min.js","mousetrap.min.js","angular-file-upload.js","FileSaver.js","vector3d.js","latlon-ellipsoidal.js","utm.js","clipboard.min.js","ngclipboard.min.js","anime.min.js"],"names":["window","angular","assertArg","arg","name","reason","ngMinErr","mergeClasses","a","b","isArray","join","packageStyles","options","styles","to","from","pendClasses","classes","fix","isPrefix","className","isString","length","split","forEach","klass","i","stripCommentsFromElement","element","jqLite","ELEMENT_NODE","nodeType","extractElementNode","elm","$$addClass","$$jqLite","addClass","$$removeClass","removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","options.domOperation","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","existing","splitClassesToLookup","obj","flags","value","key","ADD_CLASS","REMOVE_CLASS","val","prop","allow","REMOVE_CLASS_SUFFIX","ADD_CLASS_SUFFIX","getDomNode","applyGeneratedPreparationClasses","event","EVENT_CLASS_PREFIX","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","style","computeCssStyles","$window","properties","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","c","charAt","parseMaxTime","str","maxValue","values","substring","parseFloat","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","cache","flush","count","entry","total","get","put","registerRestorableStyles","backup","isDefined","getPropertyValue","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","undefined","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","ANIMATION_DELAY_PROP","DELAY_KEY","ANIMATION_DURATION_PROP","TRANSITION_DURATION_PROP","$$minErr","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","PROPERTY_KEY","animationDuration","animationDelay","animationIterationCount","ANIMATION_ITERATION_COUNT_KEY","DETECT_STAGGER_CSS_PROPERTIES","copy","isElement","isFunction","isObject","isUndefined","module","initAngularHelpers","info","angularVersion","directive","ngAnimateSwapDirective","$animate","$rootScope","restrict","transclude","terminal","priority","link","scope","$element","attrs","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","$new","enter","$$AnimateChildrenDirective","$interpolate","setData","data","NG_ANIMATE_CHILDREN_DATA","ngAnimateChildren","$observe","factory","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","queue","concat","nextTick","items","shift","cancelFn","waitUntilQuiet","scheduler.waitUntilQuiet","fn","provider","$$AnimateQueueProvider","$animateProvider","makeTruthyCssClassMap","classString","keys","ONE_SPACE","map","hasMatchingClasses","newClassString","currentClassString","currentClassMap","some","isAllowed","ruleType","currentAnimation","previousAnimation","rules","hasAnimationClasses","animation","and","skip","cancel","push","structural","RUNNING_STATE","state","nA","nR","cA","cR","$get","$rootElement","$document","$$Map","$$animation","$$AnimateRunner","$templateRequest","$$forceReflow","$$isDocumentHidden","postDigestTaskFactory","postDigestCalled","$$postDigest","findCallbacks","targetParentNode","targetNode","matches","entries","callbackRegistry","contains","call","callback","filterFromRegistry","list","matchContainer","matchCallback","containerNode","filter","queueAnimation","originalElement","initialOptions","notifyProgress","runner","phase","runInNextPostDigestOrNow","callbacks","parentNode","off","progress","close","reject","activeClasses","applyAnimationClasses","complete","animationsEnabled","isAnimatableByFilter","isAnimatableClassName","isStructural","indexOf","documentHidden","skipAnimations","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","PRE_DIGEST_STATE","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","end","joinAnimationFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationDetails","animationCancelled","parent","realRunner","setHost","done","status","children","querySelectorAll","child","parseInt","getAttribute","NG_ANIMATE_ATTR_NAME","delete","removeAttribute","bodyNode","body","rootNode","bodyNodeDetected","nodeName","rootNodeDetected","parentAnimationDetected","elementDisabled","animateChildren","parentHost","NG_ANIMATE_PIN_DATA","details","parentNodeDisabled","setAttribute","newValue","oldValue","set","deregisterWatch","$watch","totalPendingRequests","isEmpty","customFilter","classNameFilter","returnTrue","test","Node","prototype","compareDocumentPosition","on","container","arguments","eventType","pin","parentElement","enabled","bool","argCount","hasElement","$$AnimationProvider","drivers","$injector","$$rAFScheduler","sortAnimations","animations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","flatten","result","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","hasAttribute","NG_ANIMATE_REF_ATTR","SELECTOR","anchors","groupAnimations","preparedAnimations","refLookup","index","enterOrMove","anchorNodes","direction","anchor","animationID","usedIndicesLookup","anchorGroups","operations","fromAnimation","toAnimation","lookupKey","toString","group","beforeStart","cssClassesIntersection","indexKey","aa","j","invokeFirstDriver","driver","driverName","updateAnimationRunners","newRunner","update","RUNNER_STORAGE_KEY","handleDestroyedElement","rejected","removeData","tempClasses","NG_ANIMATE_CLASSNAME","prepareClassName","PREPARE_CLASS_SUFFIX","groupedAnimations","toBeSortedAnimations","animationEntry","triggerAnimationStart","startAnimationFn","closeFn","targetElement","operation","start","animationRunner","$AnimateCssProvider","gcsLookup","gcsStaggerLookup","$timeout","$sniffer","$$animateQueue","gcsHashFn","extraClasses","parentCounter","computeCachedCssStaggerStyles","cacheKey","stagger","staggerClassName","rafWaitQueue","pageWidth","computeTimings","timings","aD","tD","maxDelay","maxDuration","init","endFn","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","restoreStyles","setProperty","removeProperty","onDone","events","onAnimationProgress","animationTimerData","ANIMATE_TIMER_KEY","timer","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","$$willAnimate","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delay","delayStyle","ONE_SECOND","maxDurationTime","easing","easeProp","easeVal","TIMING_KEY","timerTime","CLOSING_TIME_BUFFER","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","cleanupStyles","playPause","playAnimation","arr","splice","maxStagger","itemIndex","floor","runnerHost","resume","runnerHost.resume","pause","runnerHost.pause","transitions","method","structuralClassName","addRemoveClassName","applyClassesEarly","trim","ACTIVE_CLASS_SUFFIX","hasToStyles","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","SAFE_FAST_FORWARD_DURATION_VALUE","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","$animateCss","filterCssClasses","replace","getUniqueValues","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","coords","getBoundingClientRect","scrollTop","scrollLeft","prepareInAnimation","endingClasses","startingClasses","animator","clone","remove","NG_ANIMATE_SHIM_CLASS_NAME","cloneNode","NG_ANIMATE_ANCHOR_CLASS_NAME","rootBodyElement","append","animatorIn","animatorOut","prepareOutAnimation","NG_OUT_ANCHOR_CLASS_NAME","startingAnimator","prepareFromToAnchorAnimation","prepareRegularAnimation","anchorAnimations","outElement","inElement","animationRunners","all","initDriverFn","$$AnimateJsProvider","lookupAnimations","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","args","classesToAdd","classesToRemove","apply","groupEventedAnimations","fnName","ani","endProgressCb","resolved","onAnimationComplete","packageAnimations","startAnimation","runners","animateFn","before","after","afterFn","beforeFn","toUpperCase","substr","onComplete","success","closeActiveAnimations","chain","cancelled","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory","$$CookieWriter","$log","$browser","cookiePath","baseHref","rawDocument","path","expires","encodeURIComponent","domain","toUTCString","secure","cookieLength","warn","cookie","$CookiesProvider","defaults","$$cookieReader","$$cookieWriter","getObject","fromJson","getAll","putObject","toJson","$cookies","$inject","$$CookieWriterProvider","ngMessageDirectiveFactory","require","ngMessagesCtrl","commentNode","records","staticExp","ngMessage","when","dynamicExp","ngMessageExp","whenExp","assignRecords","reRender","$eval","currentElement","messageCtrl","register","collection","hasOwnProperty","attach","newScope","$$attachId","getAttachId","deregister","detach","$on","isAttrTruthy","truthy","controller","NgMessagesCtrl","$scope","$attrs","findPreviousMessage","comment","prevNode","parentLookup","prevKey","$$ngMessageNode","messages","childNodes","previousSibling","latestKey","nextAttachId","this.getAttachId","renderLater","cachedCollection","render","this.render","multiple","ngMessagesMultiple","unmatchedMessages","matchedKeys","messageItem","head","messageFound","totalMessages","message","messageUsed","next","setClass","ACTIVE_CLASS","INACTIVE_CLASS","ngMessages","this.reRender","$evalAsync","this.register","nextKey","messageNode","match","this.deregister","$compile","replaceElementWithMarker","src","$$createComment","createComment","marker","ngMessagesInclude","then","html","$$destroyed","contents","sanitizeText","chars","buf","htmlSanitizeWriter","writer","$sanitizeMinErr","bind","lowercase","nodeContains","htmlParser","$SanitizeProvider","stringToMap","lowercaseKeys","arrayToMap","addElementsTo","elementsMap","newElements","attrToMap","ii","encodeEntities","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","stripCustomNsAttrs","attributes","l","attrNode","attrName","toLowerCase","lastIndexOf","removeAttributeNode","nextNode","firstChild","getNonDescendant","propName","outerHTML","outerText","hasBeenInstantiated","svgEnabled","$$sanitizeUri","validElements","svgElements","uri","isImage","enableSvg","this.enableSvg","addValidElements","this.addValidElements","elements","htmlElements","voidElements","htmlVoidElements","addValidAttrs","this.addValidAttrs","validAttrs","htmlParserImpl","handler","inertBodyElement","getInertBodyElement","mXSSAttempts","innerHTML","textContent","removeChild","htmlSanitizeWriterImpl","uriValidator","ignoreCurrentElement","out","tag","blockedElements","lkey","uriAttrs","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","document","getInertBodyElement_DOMParser","parseFromString","DOMParser","e","getInertBodyElement_InertDocument","documentMode","inertDocument","implementation","createHTMLDocument","querySelector","documentElement","getDocumentElement","getInertBodyElement_XHR","encodeURI","xhr","XMLHttpRequest","responseType","open","send","response","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","text","addText","addLink","url","linkAttributes","attributesFn","getAttributesObject","getEmptyAttributesObject","raw","$TouchProvider","$provide","$compileProvider","ngClickOverrideEnabled","ngClickDirectiveAdded","this.ngClickOverrideEnabled","ngTouchClickDirectiveFactory","$$moduleName","decorator","$delegate","this.$get","makeSwipeDirective","directiveName","eventName","ngTouch","$parse","$swipe","validSwipe","startCoords","deltaY","abs","y","deltaX","x","valid","MAX_VERTICAL_DISTANCE","MIN_HORIZONTAL_DISTANCE","MAX_VERTICAL_RATIO","swipeHandler","pointerTypes","$apply","triggerHandler","$event","getCoordinates","touches","changedTouches","clientX","clientY","getEvents","res","pointerType","POINTER_EVENTS","move","eventHandlers","totalX","totalY","lastPos","active","MOVE_BUFFER_RADIUS","preventDefault","checkAllowableRegions","touchCoordinates","CLICKBUSTER_THRESHOLD","x1","y1","y2","onClick","PREVENT_DURATION","lastPreventedTime","lastLabelClickCoordinates","blur","onTouchStart","clickHandler","ngClick","tapping","tapElement","touchStartX","touchStartY","srcElement","ACTIVE_CLASS_NAME","diff","dist","sqrt","pow","TAP_DURATION","MOVE_TOLERANCE","addEventListener","disabled","onclick","element.onclick","touchend","global","exports","define","amd","angularCacheModuleName","this","BinaryHeap","weightFunc","compareFunc","Error","heap","_keys","utils","_isPromiseLike","_stringifyNumber","number","isNumber","_keySet","keySet","createCache","cacheId","caches","$$data","$$promises","$$storage","$$expiresHeap","equals","$$lruHeap","accessed","$$id","destroy","clearInterval","$$cacheFlushIntervalId","$$recycleFreqId","removeAll","removeItem","$$prefix","disable","$$disabled","enable","_this2","Array","_ret","v","babelHelpers","onExpire","item","itemJson","getItem","getTime","$$deleteOnExpire","$$onExpire","setItem","JSON","stringify","created","isExpired","maxAge","$$maxAge","id","capacity","$$capacity","deleteOnExpire","cacheFlushInterval","$$cacheFlushInterval","recycleFreq","$$recycleFreq","storageMode","$$storageMode","storageImpl","size","keysJson","kSet","_this3","storeOnResolve","$$storeOnResolve","storeOnReject","$$storeOnReject","getHandler","store","isError","headers","statusText","Promise","exists","peek","removeExpired","expired","expiredItem","pop","setCacheFlushInterval","_this","setInterval","setCapacity","removed","setDeleteOnExpire","setRecycleFreq","setMaxAge","Number","MAX_VALUE","setOnExpire","setOptions","cacheOptions","strict","$$storagePrefix","storagePrefix","setStorageMode","self","load","prevStorage","prevData","_key","prevDataIsObject","shouldReInsert","$$initializing","localStorage","sessionStorage","touch","_this4","k","CacheFactory","BinaryHeapProvider","CacheFactoryProvider","$q","Symbol","iterator","constructor","bubbleUp","n","weight","parentN","bubbleDown","nodeWeight","child2N","child1N","swap","child1","child1Weight","child2","child2Weight","BHProto","front","_Promise","parse","opt","destroyAll","clearAll","removeExpiredFromAll","enableAll","disableAll","touchAll","_extends","assign","source","_typeof","PNotify","posTimer","onDocumentLoaded","defaultStack","context","clearTimeout","setTimeout","positionAll","removeStackOverlay","stack","overlay","getDefaultArgs","type","methods","runModules","modules","initModule","_modules","_module","moduleOptions","_notice","_options","oldHide","hide","oldIcon","icon","queueClose","cancelClose","queuePosition","icons","_get5","_state","_animatingClass","refs","elem","appendChild","animateIn","timerHide","_timerHide","_timer","animateOut","notices","idx","_animating","finished","removeEventListener","_get9","_animTimer","_moduleIsNoticeOpen","visible","domRect","opacity","_get10","stillOpen","notice","position","nextpos1","firstpos1","nextpos2","firstpos2","addpos2","classList","modal","createElement","add","height","scrollHeight","width","scrollWidth","overlayClose","closeStack","insertBefore","_moveClass","spaceY","innerHeight","spaceX","innerWidth","csspos1","dir1","down","up","left","right","curpos1","offsetTop","offsetLeft","dir2","csspos2","curpos2","endY","offsetHeight","spacing1","endX","offsetWidth","spacing2","marginTop","marginBottom","marginLeft","marginRight","cssMiddle","cssposCross","cssMiddleLeft","cssMiddleTop","top","milliseconds","cancelRemove","_get13","queueRemove","_this5","isNaN","addModuleClass","_moduleClasses","_len","classNames","removeModuleClass","_len2","_key2","hasModuleClass","_len3","_key3","get_each1_context","ctx","child_ctx","get_each0_context","create_each_block_1","component","key_1","first","switch_instance_anchor","switch_value","switch_props","root","switch_instance","switch_instance_init","_fragment","m","insert","_mount","p","changed","d","detachNode","create_if_block_4","div","span","span_class_value","div_class_value","_icons","_styles","iconContainer","create_if_block_2","h4","h4_class_value","select_block_type","titleTrusted","create_if_block_3","create_else_block_1","current_block_type","if_block","title","titleContainer","createText","raw_before","raw_after","insertAdjacentHTML","detachBetween","create_if_block","select_block_type_1","textTrusted","create_if_block_1","create_else_block","textContainer","create_each_block","PNotify_1","_this7","_handlers","blankObject","_slots","_bind","_staged","_beforecreate","_oncreate","_aftercreate","_modulesPrependContainer","modulesPrependContainer","_modulesAppendContainer","modulesAppendContainer","_recompute","styling","minHeight","_intro","getElementById","div1","div0","text0","text1","text2","text3","div0_class_value","div0_style_value","div1_class_value","each0_blocks_1","each0_lookup","each1_blocks_1","each1_lookup","each0_value","get_key","if_block0","if_block1","if_block2","each1_value","get_key_1","_child_ctx","_key4","mouseover_handler","fire","mouseout_handler","mouseenter_handler","mouseleave_handler","mousemove_handler","mousedown_handler","mouseup_handler","click_handler","dblclick_handler","focus_handler","blur_handler","touchstart_handler","touchmove_handler","touchend_handler","touchcancel_handler","cornerClass","shadow","cssText","_widthStyle","_minHeightStyle","addListener","animateSpeed","updateKeyedEach","destroyBlock","removeListener","create_main_fragment","_this6","mouseReset","autoDisplay","tar","assignTrue","current","createTextNode","attribute","old_blocks","dynamic","intro_method","get_context","o","old_indexes","new_blocks","new_lookup","deltas","block","will_move","did_move","new_block","old_block","new_key","old_key","nextSibling","_lock","callAll","fns","handlers","slice","__calling","newState","_set","oldState","dirty","_differs","previous","_stage","VERSION","alert","error","closeAll","removeStack","_i","brighttheme","bootstrap3","bootstrap4","fontawesome4","fontawesome5","PNotifyButtons","__esModule","Component","if_block1_anchor","_showCloser","_showSticker","div_title_value","handleCloserClick","_closerClass","closerHover","_mouseIsIn","tabIndex","labels","div_aria_pressed_value","handleStickerClick","_pinUpClass","_pinDownClass","stickerHover","stick","unstick","Buttons","sticker","closer","_ref6","pinUp","pinDown","_ref","_ref2","_ref5","_ref4","_ref3","adfTemplatePath","rowTemplate","dashboard","moveWidgetInColumn","column","evt","widgets","newIndex","oldIndex","findWidget","widget","w","wid","findColumn","model","rows","r","columns","cid","getId","el","addWidgetToColumn","targetColumn","sourceColumn","removeWidgetFromColumn","applySortable","sortable","Sortable","handle","ghostClass","onAdd","onRemove","onUpdate","editMode","adfModel","templateUrl","col","cloned","$modal","stringToBoolean","string","Boolean","copyWidgets","fillStructure","readColumns","changeStructure","structure","createConfiguration","cfg","config","findFirstWidgetColumn","addNewWidgetToModel","unshift","collapsible","editable","maximizable","adfWidgetFilter","widgetFilter","structureName","oldVal","newVal","structures","titleTemplateUrl","editClass","toggleEditMode","modelCopy","$broadcast","collapseAll","collapseExpandStatus","cancelEditMode","editDashboardDialog","editDashboardScope","instance","backdrop","closeDialog","addWidgetDialog","addScope","adfAddTemplatePath","addTemplateUrl","opts","addWidget","$attr","enableConfirmDelete","enableconfirmdelete","widgetsPath","messageTemplate","loadingTemplate","reload","frameless","edit","template","columnTemplate","$sce","$http","$templateCache","$controller","parseUrl","parsedUrl","getTemplate","deferred","defer","resolve","tpl","getTrustedResourceUrl","promise","compileWidget","currentScope","content","templateScope","base","resolvers","$tpl","invoke","locals","templateCtrl","controllerAs","msg","preLink","definition","widgetState","isCollapsed","debug","postLink","deleteWidget","deleteScope","deleteTemplateUrl","deleteDialog","editScope","adfEditTemplatePath","editTemplateUrl","saveDialog","openFullScreen","fullScreenScope","modalSize","windowClass","compile","pre","post","run","moduleLoaded","ex","blockNavigation","mainBlockUI","blockUIConfig","registerLocationChange","$_blockLocationChange","blockCount","blockBrowserNavigation","blkUI","$httpProvider","blockUI","exception","cause","resetOnException","instances","reset","console","log","interceptors","autoInjectBodyBlock","find","decorateLocation","hook","f","s","overrides","blockUiContainerLinkFn","srvInstance","inheritedData","blockUiCompileFn","blockUiPreLinkFn","blockUIUtils","hasClass","cssClass","$_blockUiMessageClass","instanceId","blockUi","$id","parentInstance","_parent","release","addRef","$_blockUiState","toggleClass","pattern","blockUiPattern","regExp","buildRegExp","constant","autoBlock","requestFilter","injectBlockUI","stopBlockUI","$_noBlock","$_blocks","stop","rejection","request","locate","requestError","responseError","BlockUI","startPromise","blocking","doneCallbacks","_id","_refs","messageOrOptions","reservedStateProperties","$ae","activeElement","isElementInBlockScope","_restoreFocus","$body","_cancelStartTimeout","isBlocking","regexp","_pattern","executeCallbacks","focus","e1","elementToFocus","e2","cb","mainBlock","_destroy","idOrInstance","forEachFnHook","$","RegExp","forEachFn","t","blockScope","findElement","predicateFn","traverse","ret","$elements","dest","len","proto","F","lastId","stamp","_leaflet_id","throttle","time","lock","later","wrapperFn","wrapNum","range","includeMax","min","falseFn","formatNum","num","digits","round","splitWords","getParamString","existingUrl","uppercase","params","templateRe","array","emptyImageUrl","getPrefixed","lastTime","timeoutDefer","timeToCall","requestFn","requestAnimationFrame","cancelAnimationFrame","requestAnimFrame","immediate","cancelAnimFrame","Class","props","NewClass","initialize","callInitHooks","parentProto","__super__","Util.create","statics","Util.extend","includes","L","Mixin","Util.isArray","Events","checkDeprecatedMixinEvents","_initHooks","_initHooksCalled","include","mergeOptions","addInitHook","types","_on","Util.splitWords","_off","_events","typeListeners","newListener","listeners","Util.falseFn","_firingCount","propagate","listens","sourceTarget","_propagateEvent","_eventParents","once","Util.bind","addEventParent","Util.stamp","removeEventParent","layer","propagatedFrom","clearAllEventListeners","addOneTimeEventListener","fireEvent","hasEventListeners","Evented","Point","trunc","ceil","toPoint","Bounds","points","toBounds","LatLngBounds","corner1","corner2","latlngs","toLatLngBounds","LatLng","lat","lng","alt","toLatLng","lon","point","_add","subtract","_subtract","divideBy","_divideBy","multiplyBy","_multiplyBy","scaleBy","unscaleBy","_round","_floor","_ceil","_trunc","distanceTo","getCenter","getBottomLeft","getTopRight","getTopLeft","getBottomRight","getSize","intersects","bounds","min2","max2","xIntersects","yIntersects","overlaps","xOverlaps","yOverlaps","isValid","sw2","ne2","sw","_southWest","ne","_northEast","pad","bufferRatio","heightBuffer","widthBuffer","getSouthWest","getNorthEast","getNorthWest","getNorth","getWest","getSouthEast","getSouth","getEast","latIntersects","lngIntersects","latOverlaps","lngOverlaps","toBBoxString","maxMargin","CRS","latLngToPoint","latlng","zoom","projectedPoint","projection","project","scale","transformation","_transform","pointToLatLng","untransformedPoint","untransform","unproject","LN2","getProjectedBounds","infinite","transform","precision","Util.formatNum","other","Earth","distance","wrap","wrapLatLng","sizeInMeters","latAccuracy","lngAccuracy","cos","PI","wrapLng","Util.wrapNum","wrapLat","wrapLatLngBounds","center","newCenter","latShift","lngShift","R","latlng1","latlng2","rad","lat1","lat2","sinDLat","sin","sinDLon","atan2","earthRadius","SphericalMercator","MAX_LATITUDE","atan","exp","Transformation","_a","_b","_c","_d","toTransformation","EPSG3857","code","EPSG900913","svgCreate","createElementNS","pointsToPath","rings","closed","len2","Browser.svg","ie","ielt9","edge","navigator","webkit","userAgentContains","android","android23","webkitVer","exec","userAgent","androidStock","opera","chrome","gecko","safari","phantom","opera12","win","platform","ie3d","webkit3d","WebKitCSSMatrix","gecko3d","any3d","L_DISABLE_3D","mobile","orientation","mobileWebkit","mobileWebkit3d","msPointer","PointerEvent","MSPointerEvent","pointer","L_NO_TOUCH","DocumentTouch","mobileOpera","mobileGecko","retina","devicePixelRatio","screen","deviceXDPI","logicalXDPI","passiveEvents","supportsPassiveOption","defineProperty","canvas","getContext","svg","createSVGRect","vml","shape","behavior","adj","POINTER_DOWN","Browser.msPointer","POINTER_MOVE","POINTER_UP","POINTER_CANCEL","_pointers","_pointerDocListener","addPointerListener","onUp","_handlePointer","onDown","onMove","MSPOINTER_TYPE_MOUSE","buttons","MSPOINTER_TYPE_TOUCH","DomEvent.preventDefault","_globalPointerDown","_globalPointerMove","_globalPointerUp","pointerId","_touchstart","Browser.pointer","_touchend","_pre","_userSelect","userSelectProperty","disableTextSelection","enableTextSelection","_outlineElement","_outlineStyle","TRANSFORM","testProp","TRANSITION","TRANSITION_END","getStyle","currentStyle","defaultView","tagName","empty","toFront","lastChild","toBack","getClass","Util.trim","baseVal","correspondingElement","setOpacity","filterName","filters","Enabled","Opacity","_setOpacityIE","setTransform","offset","pos","Browser.ie3d","setPosition","_leaflet_pos","Browser.any3d","getPosition","disableImageDrag","DomEvent.on","enableImageDrag","DomEvent.off","preventOutline","restoreOutline","outline","getSizedParentNode","getScale","rect","boundingClientRect","addOne","eventsKey","removeOne","browserFiresNativeDblClick","Browser.edge","Browser.safari","mouseSubst","mouseenter","mouseleave","wheel","last","doubleTap","originalHandler","isPrimary","delta","onTouchEnd","cancelBubble","newTouch","button","Browser.touch","Browser.passiveEvents","passive","isExternalTarget","attachEvent","touchstart","dblclick","detachEvent","_stopped","skipped","disableScrollPropagation","disableClickPropagation","fakeStop","returnValue","getMousePosition","clientLeft","clientTop","wheelPxFactor","Browser.win","Browser.chrome","Browser.gecko","getWheelDelta","wheelDeltaY","deltaMode","deltaZ","wheelDelta","detail","skipEvents","related","relatedTarget","err","PosAnimation","newPos","easeLinearity","_el","_inProgress","_duration","_easeOutPower","_startPos","DomUtil.getPosition","_offset","_startTime","_animate","_step","_complete","_animId","Util.requestAnimFrame","elapsed","_runFrame","_easeOut","DomUtil.setPosition","Util.cancelAnimFrame","Map","crs","minZoom","maxZoom","layers","maxBounds","renderer","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","transform3DLimit","zoomSnap","zoomDelta","trackResize","Util.setOptions","_layers","_zoomBoundLayers","_sizeChanged","_initContainer","_initLayout","_onResize","_initEvents","setMaxBounds","_zoom","_limitZoom","setView","_zoomAnimated","DomUtil.TRANSITION","Browser.mobileOpera","_createAnimProxy","_proxy","DomUtil.TRANSITION_END","_catchTransitionEnd","_addLayers","_limitCenter","_stop","_loaded","animate","pan","_tryAnimatedZoom","_tryAnimatedPan","_sizeTimer","_resetView","setZoom","zoomIn","zoomOut","setZoomAround","getZoomScale","viewHalf","centerOffset","latLngToContainerPoint","containerPointToLatLng","_getBoundsCenterZoom","getBounds","paddingTL","paddingTopLeft","padding","paddingBR","paddingBottomRight","getBoundsZoom","Infinity","paddingOffset","swPoint","nePoint","fitBounds","fitWorld","panTo","panBy","_panAnim","step","_onPanTransitionStep","_onPanTransitionEnd","noMoveStart","DomUtil.addClass","_mapPane","_getMapPanePos","_rawPanBy","getZoom","flyTo","targetCenter","targetZoom","startZoom","w0","w1","u1","rho","rho2","sq","sinh","cosh","r0","u","S","_moveStart","frame","_flyToFrame","_move","getScaleZoom","_moveEnd","flyToBounds","_panInsideMaxBounds","setMinZoom","oldZoom","setMaxZoom","panInsideBounds","_enforcingBounds","panInside","pixelCenter","pixelPoint","pixelBounds","getPixelBounds","halfPixelBounds","paddedBounds","invalidateSize","oldSize","_lastCenter","newSize","oldCenter","debounceMoveend","_locateOptions","timeout","watch","_handleGeolocationError","onResponse","_handleGeolocationResponse","onError","_locationWatchId","geolocation","watchPosition","getCurrentPosition","stopLocate","clearWatch","latitude","longitude","accuracy","timestamp","addHandler","HandlerClass","_containerId","_container","DomUtil.remove","_clearControlPos","_resizeRequest","_clearHandlers","_panes","_renderer","createPane","pane","DomUtil.create","_checkIfLoaded","_moved","layerPointToLatLng","_getCenterLayerPoint","getMinZoom","_layersMinZoom","getMaxZoom","_layersMaxZoom","inside","nw","se","boundsSize","snap","scalex","scaley","_size","clientWidth","clientHeight","topLeftPoint","_getTopLeftPoint","getPixelOrigin","_pixelOrigin","getPixelWorldBounds","getPane","getPanes","getContainer","toZoom","fromZoom","latLngToLayerPoint","containerPointToLayerPoint","layerPointToContainerPoint","layerPoint","mouseEventToContainerPoint","DomEvent.getMousePosition","mouseEventToLayerPoint","mouseEventToLatLng","DomUtil.get","_onScroll","_fadeAnimated","Browser.retina","Browser.ielt9","DomUtil.getStyle","_initPanes","_initControlPos","panes","_paneRenderers","markerPane","shadowPane","loading","zoomChanged","_getNewPixelOrigin","pinch","_getZoomSpan","_targets","onOff","_handleDOMEvent","_onMoveEnd","_findEventTargets","targets","isHover","dragging","_simulated","_draggableMoved","DomEvent.isExternalTarget","DomEvent.skipped","DomUtil.preventOutline","_fireDOMEvent","_mouseEvents","synth","isMarker","getLatLng","_radius","containerPoint","bubblingMouseEvents","Util.indexOf","moved","boxZoom","whenReady","_latLngToNewLayerPoint","topLeft","_latLngBoundsToNewLayerBounds","latLngBounds","_getCenterOffset","centerPoint","viewBounds","_getBoundsOffset","_limitOffset","newBounds","pxBounds","projectedMaxBounds","minOffset","maxOffset","_rebound","DomUtil.removeClass","proxy","mapPane","DomUtil.TRANSFORM","DomUtil.setTransform","_animatingZoom","_onZoomTransitionEnd","_animMoveEnd","_destroyAnimProxy","z","propertyName","_nothingToAnimate","getElementsByClassName","_animateZoom","startAnim","noUpdate","_animateToCenter","_animateToZoom","control","Control","_map","removeControl","addControl","addTo","corner","_controlCorners","_refocusOnMap","screenX","screenY","corners","_controlContainer","createCorner","vSide","hSide","Layers","collapsed","autoZIndex","hideSingleBase","sortLayers","sortFunction","layerA","layerB","nameA","nameB","baseLayers","overlays","_layerControlInputs","_lastZIndex","_handlingClick","_addLayer","_update","_checkDisabledLayers","_onLayerChange","_expandIfNotCollapsed","addBaseLayer","addOverlay","removeLayer","_getLayer","expand","_section","acceptableHeight","collapse","DomEvent.disableClickPropagation","DomEvent.disableScrollPropagation","section","Browser.android","_layersLink","href","DomEvent.stop","_baseLayersList","_separator","_overlaysList","sort","setZIndex","DomUtil.empty","baseLayersPresent","overlaysPresent","baseLayersCount","_addItem","display","_createRadioElement","checked","radioHtml","radioFragment","input","label","hasLayer","defaultChecked","layerId","_onInputClick","holder","inputs","addedLayers","removedLayers","addLayer","_expand","_collapse","Zoom","zoomInText","zoomInTitle","zoomOutText","zoomOutTitle","zoomName","_zoomInButton","_createButton","_zoomIn","_zoomOutButton","_zoomOut","_updateDisabled","_disabled","shiftKey","zoomControl","Scale","maxWidth","metric","imperial","_addScales","updateWhenIdle","_mScale","_iScale","maxMeters","_updateScales","_updateMetric","_updateImperial","meters","_getRoundNum","_updateScale","maxMiles","miles","feet","maxFeet","ratio","pow10","Attribution","prefix","_attributions","attributionControl","getAttribution","addAttribution","setPrefix","removeAttribution","attribs","prefixAndAttribs","attribution","Handler","_enabled","addHooks","removeHooks","_lastCode","START","END","mousedown","pointerdown","MSPointerDown","MOVE","Draggable","clickTolerance","dragStartTarget","_element","_dragStartTarget","_preventOutline","_onDown","_dragging","finishDrag","sizedParent","DomUtil.hasClass","which","DomUtil.disableImageDrag","DomUtil.disableTextSelection","_moving","DomUtil.getSizedParentNode","_startPoint","_parentScale","DomUtil.getScale","_onMove","_onUp","_lastTarget","SVGElementInstance","correspondingUseElement","_newPos","_animRequest","_lastEvent","_updatePosition","DomUtil.enableImageDrag","DomUtil.enableTextSelection","simplify","tolerance","sqTolerance","markers","Uint8Array","_simplifyDPStep","sqDist","maxSqDist","_sqClosestPointOnSegment","newPoints","_simplifyDP","reducedPoints","prev","p1","p2","dx","dy","_sqDist","_reducePoints","pointToSegmentDistance","clipSegment","useLastCode","codeOut","newCode","codeA","_getBitCode","codeB","_getEdgeIntersection","dot","isFlat","_flat","clipPolygon","clippedPoints","edges","_code","LineUtil._getBitCode","LineUtil._getEdgeIntersection","LonLat","Mercator","R_MINOR","tmp","con","ts","tan","phi","dphi","EPSG3395","EPSG4326","Simple","Layer","removeFrom","_mapToAdd","addInteractiveTarget","targetEl","removeInteractiveTarget","_layerAdd","beforeAdd","eachLayer","_addZoomLimit","_updateZoomLevels","_removeZoomLimit","oldZoomSpan","LayerGroup","getLayerId","clearLayers","methodName","getLayer","getLayers","zIndex","FeatureGroup","setStyle","bringToFront","bringToBack","Icon","popupAnchor","tooltipAnchor","createIcon","_createIcon","createShadow","_getIconUrl","img","_createImg","_setIconStyles","sizeOption","shadowAnchor","iconAnchor","IconDefault","iconUrl","iconRetinaUrl","shadowUrl","iconSize","shadowSize","imagePath","_detectIconPath","MarkerDrag","_marker","_icon","_draggable","dragstart","_onDragStart","predrag","_onPreDrag","drag","_onDrag","dragend","_onDragEnd","_adjustPan","movement","speed","autoPanSpeed","autoPanPadding","iconPos","origin","panBounds","_panRequest","_oldLatLng","closePopup","autoPan","_shadow","_latlng","oldLatLng","Marker","interactive","keyboard","zIndexOffset","riseOnHover","riseOffset","draggable","latLng","_initIcon","_removeIcon","_removeShadow","viewreset","setLatLng","setZIndexOffset","getIcon","setIcon","_popup","bindPopup","getElement","_setPos","classToAdd","addIcon","mouseover","_bringToFront","mouseout","_resetZIndex","newShadow","addShadow","_updateOpacity","_initInteraction","_zIndex","_updateZIndex","DomUtil.setOpacity","_getPopupAnchor","_getTooltipAnchor","Path","stroke","color","lineCap","lineJoin","dashArray","dashOffset","fill","fillColor","fillOpacity","fillRule","getRenderer","_initPath","_reset","_addPath","_removePath","redraw","_updatePath","_updateStyle","_updateBounds","_bringToBack","_path","_project","_clickTolerance","CircleMarker","radius","setRadius","getRadius","_point","r2","_radiusY","_pxBounds","_updateCircle","_empty","_bounds","_containsPoint","Circle","legacyOptions","_mRadius","half","latR","bottom","lngR","acos","Polyline","smoothFactor","noClip","_setLatLngs","getLatLngs","_latlngs","setLatLngs","closestLayerPoint","minDistance","minPoint","closest","LineUtil._sqClosestPointOnSegment","jLen","_parts","halfDist","segDist","_rings","addLatLng","_defaultShape","_convertLatLngs","LineUtil.isFlat","flat","_projectLatlngs","_rawPxBounds","projectedBounds","ring","_clipPoints","segment","parts","LineUtil.clipSegment","_simplifyPoints","LineUtil.simplify","_updatePoly","part","LineUtil.pointToSegmentDistance","LineUtil._flat","Polygon","area","clipped","PolyUtil.clipPolygon","GeoJSON","geojson","addData","feature","features","geometries","geometry","coordinates","geometryToLayer","asFeature","defaultOptions","resetStyle","onEachFeature","_setLayerStyle","pointToLayer","_coordsToLatLng","coordsToLatLng","_pointToLayer","coordsToLatLngs","pointToLayerFn","markersInheritOptions","levelsDeep","latLngToCoords","latLngsToCoords","getFeature","newGeometry","PointToGeoJSON","toGeoJSON","geoJSON","multi","holes","toMultiPoint","isGeometryCollection","jsons","json","geoJson","ImageOverlay","crossOrigin","errorOverlayUrl","_url","_image","_initImage","styleOpts","DomUtil.toFront","DomUtil.toBack","setUrl","setBounds","zoomanim","wasElementSupplied","onselectstart","onmousemove","onload","onerror","_overlayOnError","image","errorUrl","VideoOverlay","autoplay","loop","keepAspectRatio","muted","vid","onloadeddata","sourceElements","getElementsByTagName","sources","SVGOverlay","DivOverlay","_source","_removeTimeout","getContent","_content","setContent","visibility","_updateContent","_updateLayout","isOpen","_prepareOpen","_contentNode","hasChildNodes","_getAnchor","_containerBottom","_containerLeft","_containerWidth","Popup","minWidth","maxHeight","autoPanPaddingTopLeft","autoPanPaddingBottomRight","keepInView","closeButton","autoClose","closeOnEscapeKey","openOn","openPopup","popup","DomEvent.stopPropagation","closeOnClick","closePopupOnClick","preclick","_close","moveend","wrapper","_wrapper","_tipContainer","_tip","_closeButton","_onCloseButtonClick","whiteSpace","scrolledClass","containerHeight","containerWidth","layerPos","containerPos","_popupHandlersAdded","click","_openPopup","keypress","_onKeyPress","_movePopup","unbindPopup","togglePopup","isPopupOpen","setPopupContent","getPopup","keyCode","Tooltip","permanent","sticky","tooltip","closeTooltip","_setPosition","subX","tooltipPoint","tooltipWidth","tooltipHeight","subY","openTooltip","bindTooltip","_tooltip","_initTooltipInteractions","unbindTooltip","_tooltipHandlersAdded","_moveTooltip","_openTooltip","mousemove","toggleTooltip","isTooltipOpen","setTooltipContent","getTooltip","DivIcon","bgPos","Element","backgroundPosition","Default","GridLayer","tileSize","Browser.mobile","updateWhenZooming","updateInterval","maxNativeZoom","minNativeZoom","noWrap","keepBuffer","_levels","_tiles","_removeAllTiles","_tileZoom","_setAutoZIndex","isLoading","_loading","viewprereset","_invalidateAll","Util.throttle","createTile","getTileSize","compare","edgeZIndex","isFinite","nextFrame","willPrune","fade","tile","loaded","_onOpaqueTile","_noPrune","_pruneTiles","_fadeFrame","_updateLevels","_onUpdateLevel","_removeTilesAtZoom","_onRemoveLevel","level","_setZoomTransform","_onCreateLevel","_level","retain","_retainParent","_retainChildren","_removeTile","x2","z2","coords2","_tileCoordsToKey","animating","_setView","_clampZoom","noPrune","tileZoom","tileZoomChanged","_abortLoading","_resetGrid","_setZoomTransforms","translate","_tileSize","_globalTileRange","_pxBoundsToTileRange","_wrapX","_wrapY","_getTiledPixelBounds","mapZoom","halfSize","tileRange","tileCenter","margin","noPruneRange","_isValidTile","fragment","createDocumentFragment","_addTile","tileBounds","_tileCoordsToBounds","_keyToBounds","_keyToTileCoords","_tileCoordsToNwSe","nwPoint","sePoint","bp","_initTile","Browser.android23","WebkitBackfaceVisibility","tilePos","_getTilePos","_wrapCoords","_tileReady","_noTilesToLoad","newCoords","TileLayer","subdomains","errorTileUrl","zoomOffset","tms","zoomReverse","detectRetina","_onTileRemove","noRedraw","_tileOnLoad","_tileOnError","getTileUrl","invertedY","_getSubdomain","_getZoomForUrl","Util.template","tilePoint","Util.emptyImageUrl","Browser.androidStock","tileLayer","TileLayerWMS","defaultWmsParams","service","format","transparent","version","wmsParams","realRetina","_crs","_wmsVersion","projectionKey","bbox","setParams","WMS","wms","Renderer","_updatePaths","_destroyContainer","_onZoom","zoomend","_onZoomEnd","_onAnimZoom","_updateTransform","currentCenterPoint","_center","topLeftOffset","Canvas","_onViewPreReset","_postponeUpdatePaths","_draw","_onMouseMove","_onClick","_handleMouseOut","_ctx","_redrawRequest","_redrawBounds","_redraw","_updateDashArray","order","_order","_drawLast","_drawFirst","_requestRedraw","_extendRedrawBounds","dashValue","_dashArray","_clear","clearRect","save","restore","beginPath","clip","_drawing","closePath","_fillStroke","arc","globalAlpha","fillStyle","setLineDash","lineWidth","strokeStyle","clickedLayer","DomEvent.fakeStop","_fireEvent","moving","_handleMouseHover","_hoveredLayer","_mouseHoverThrottled","candidateHoveredLayer","Browser.canvas","vmlCreate","namespaces","vmlMixin","coordsize","_stroke","_fill","stroked","filled","dashStyle","endcap","joinstyle","_setPath","Browser.vml","SVG","zoomstart","_onZoomStart","_rootGroup","_svgSize","_getPaneRenderer","_createRenderer","preferCanvas","Rectangle","_boundsToLatLngs","BoxZoom","_pane","overlayPane","_resetStateTimeout","_onMouseDown","_resetState","_clearDeferredResetState","contextmenu","mouseup","_onMouseUp","keydown","_onKeyDown","_box","_finish","boxZoomBounds","doubleClickZoom","DoubleClickZoom","_onDoubleClick","inertia","inertiaDeceleration","inertiaMaxSpeed","worldCopyJump","maxBoundsViscosity","Drag","_onPreDragLimit","_onPreDragWrap","_positions","_times","_offsetLimit","_viscosity","_lastTime","_lastPos","_absPos","_prunePositions","pxCenter","pxWorldCenter","_initialWorldOffset","_worldWidth","_viscousLimit","threshold","limit","worldWidth","halfWidth","newX1","newX2","newX","ease","speedVector","limitedSpeed","limitedSpeedVector","decelerationDuration","noInertia","keyboardPanDelta","Keyboard","keyCodes","_setPanDelta","_setZoomDelta","_onFocus","_onBlur","_addHooks","_removeHooks","docEl","_focused","scrollTo","panDelta","_panKeys","codes","_zoomKeys","altKey","ctrlKey","metaKey","scrollWheelZoom","wheelDebounceTime","wheelPxPerZoomLevel","ScrollWheelZoom","_onWheelScroll","_delta","DomEvent.getWheelDelta","debounce","_lastMousePos","_performZoom","d2","d3","d4","tap","tapTolerance","Tap","_fireClick","_holdTimeout","_isTapValid","_simulateEvent","touchmove","simulatedEvent","createEvent","_simulatedClick","initMouseEvent","dispatchEvent","touchZoom","bounceAtZoomLimits","TouchZoom","_onTouchStart","_zooming","_centerPoint","_startLatLng","_pinchStartLatLng","_startDist","_startZoom","_onTouchMove","_onTouchEnd","moveFn","video","alias","autoUpload","removeAfterUpload","formData","queueLimit","withCredentials","fileUploaderOptions","FileUploader","settings","isUploading","_nextIndex","_failFilterIndex","_directives","select","drop","over","_queueLimitFilter","_folderFilter","FileLikeObject","fileOrInput","isInput","fakePathOrObject","postfix","FileItem","uploader","file","isReady","isUploaded","isSuccess","isCancel","_file","_input","_replaceNode","FileDirective","_saveLinks","FileSelect","super_","isHTML5","removeAttr","FileDrop","FileOver","File","FormData","addToQueue","files","isArrayLikeObject","arrayOfFilters","_getFilters","addedFileItems","temp","_isValidFile","fileItem","_onAfterAddingFile","_onWhenAddingFileFailed","_onAfterAddingAll","_getTotalProgress","_render","uploadAll","removeFromQueue","getIndexOfItem","clearQueue","uploadItem","transport","_prepareToUploading","cancelItem","abort","getNotUploadedItems","upload","cancelAll","isFile","isFileLikeObject","getReadyItems","item1","item2","object","onAfterAddingAll","fileItems","onAfterAddingFile","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onSuccessItem","onErrorItem","onCancelItem","onCompleteItem","onCompleteAll","notUploaded","uploaded","names","$$phase","every","_isSuccessCode","_transformResponse","headersGetter","_headersGetter","transformResponse","transformFn","_parseHeaders","parsed","line","parsedHeaders","_xhrTransport","_xhr","form","that","_onBeforeUploadItem","TypeError","onprogress","lengthComputable","_onProgressItem","getAllResponseHeaders","gist","_onCompleteItem","_onErrorItem","onabort","_onCancelItem","setRequestHeader","_iframeTransport","iframe","_form","replaceWith","action","enctype","encoding","contentDocument","dummy","_onSuccessItem","unbind","submit","_onBeforeUpload","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","nextItem","inherit","_createFromFakePath","lastModifiedDate","_createFromObject","onBeforeUpload","onProgress","onSuccess","onCancel","change","getOptions","getFilters","isEmptyAfterSelection","onChange","dragover","dragleave","onDrop","transfer","_getTransfer","_preventAndStop","_removeOverClass","onDragOver","_haveFiles","dropEffect","_addOverClass","onDragLeave","currentTarget","dataTransfer","addOverClass","removeOverClass","overClass","getOverClass"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACx6MA;ACAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;;;;;aCrQC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkB,CA0D3BC,QAASA,GAAS,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAoB,CACpC,GAAKF,CAAAA,CAAL,CACE,KAAMG,GAAA,CAAS,MAAT,CAA6CF,CAA7C,EAAqD,GAArD,CAA4DC,CAA5D,EAAsE,UAAtE,CAAN,CAEF,MAAOF,EAJ6B,CAOtCI,QAASA,GAAY,CAACC,CAAD,CAAGC,CAAH,CAAM,CACzB,GAAKD,CAAAA,CAAL,EAAWC,CAAAA,CAAX,CAAc,MAAO,EACrB,IAAKD,CAAAA,CAAL,CAAQ,MAAOC,EACf,IAAKA,CAAAA,CAAL,CAAQ,MAAOD,EACXE,EAAA,CAAQF,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAAG,KAAA,CAAO,GAAP,CAApB,CACID,EAAA,CAAQD,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAAE,KAAA,CAAO,GAAP,CAApB,CACA,OAAOH,EAAP,CAAW,GAAX,CAAiBC,CANQ,CAS3BG,QAASA,GAAa,CAACC,CAAD,CAAU,CA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ChnB,EAAQ0J,OAAO,oBAAqB+C,SAAS,aAAc2zB,GAAoB3zB,SAAS,eAAgB4zB,EAExG,IAAI3oB,GAAQ,eAEZ,OAAOA;;ACnlCT;AACA;ACDA;AACA;AACA;AACA;AACA;ACJA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AAe,MA9Q3FN,EAkRTF,GAjRKpwC,IAAM,UAEhBswC,EAAU9tB,SAAW,CAEpBkvB,QAAQ,EAERb,aAAa,EAEbY,SAAS,EAETJ,cAAc,EAEdL,OAAQ,CACPtkC,MAAO,QACP4kC,MAAO,QACPC,QAAS,WAGV10C,QAAS,CACR60C,OAAQ,KACRE,MAAO,KACPC,QAAS,OAKX3T,EAAQe,QAAQuS,QAAUlB,EAE1BpS,EAAQwL,wBAAwB9/B,KAAK0mC,GAGrCxS,SAASI,EAAQ6B,MAAMgQ,YAAa,CACnC2B,OAAQ,0BACRE,MAAO,2BACPC,QAAS,oDAEV/T,SAASI,EAAQ6B,MAAMiQ,WAAY,CAClC0B,OAAQ,6BACRE,MAAO,4BACPC,QAAS,6BAEV/T,SAASI,EAAQ6B,MAAMmQ,aAAc,CACpCwB,OAAQ,cACRE,MAAO,cACPC,QAAS,eAEV/T,SAASI,EAAQ6B,MAAMoQ,aAAc,CACpCuB,OAAQ,eACRE,MAAO,eACPC,QAAS,gBA4YJzB,EAtiBa,CAuiBnBlS;;AC5iBF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClJA;ACAA;ACAA;AACA;AACA;AACA;AACA;AACA;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CC5qBA,SAAAviC,EAAAkI,GAAA,YA2BAjI,SAAA0J,OAAA,OAAA,eAAA,iBACAvF,MAAA,kBAAA,qBACAA,MAAA,cAAA,8HACAA,MAAA,iBAAA,0IACAA,MAAA,aAAA,mBCJAnE,QAAA0J,OAAA,OACAI,UAAA,sBAAA,OAAA,WAAA,kBAAA,cAAA,YAAA,SAAA+b,EAAAgG,EAAA0qB,EAAAC,EAAAC,GAMA,QAAAC,GAAArtB,EAAAstB,EAAAC,GACA,GAAAC,GAAAF,EAAAE,OAEAxtB,GAAAmM,OAAA,WACAqhB,EAAAx3B,OAAAu3B,EAAAE,SAAA,EAAAD,EAAAx3B,OAAAu3B,EAAAG,SAAA,GAAA,MAOA,QAAAC,GAAAL,EAAAj/B,GAEA,IAAA,GADAu/B,GAAA,KACAv1C,EAAA,EAAAA,EAAAi1C,EAAAE,QAAAv1C,OAAAI,IAAA,CACA,GAAAw1C,GAAAP,EAAAE,QAAAn1C,EACA,IAAAw1C,EAAAC,MAAAz/B,EAAA,CACAu/B,EAAAC,CACA,QAGA,MAAAD,GAMA,QAAAG,GAAAC,EAAA3/B,GAEA,IAAA,GADAi/B,GAAA,KACAj1C,EAAA,EAAAA,EAAA21C,EAAAC,KAAAh2C,OAAAI,IAAA,CAEA,IAAA,GADA61C,GAAAF,EAAAC,KAAA51C,GACAkX,EAAA,EAAAA,EAAA2+B,EAAAC,QAAAl2C,OAAAsX,IAAA,CACA,GAAAxS,GAAAmxC,EAAAC,QAAA5+B,EACA,IAAAxS,EAAAqxC,MAAA//B,EAAA,CACAi/B,EAAAvwC,CACA,OACAA,EAAAkxC,OACAX,EAAAS,EAAAhxC,EAAAsR,IAGA,GAAAi/B,EACA,MAGA,MAAAA,GAMA,QAAAe,GAAAC,GACA,GAAArb,GAAAqb,EAAAvkC,aAAA,SACA,OAAAkpB,GAAAnpB,SAAAmpB,GAAA,GAMA,QAAAsb,GAAAvuB,EAAAguB,EAAAQ,EAAAjB,GAEA,GAAAa,GAAAC,EAAAd,EAAA71C,MACA+2C,EAAAV,EAAAC,EAAAI,EAEA,IAAAK,EAAA,CAEA,GAAAX,GAAAO,EAAAd,EAAAnb,MACAwb,EAAAD,EAAAc,EAAAX,EAEAF,GAEA5tB,EAAAmM,OAAA,WACAqiB,EAAAhB,UACAgB,EAAAhB,YAEAgB,EAAAhB,QAAAx3B,OAAAu3B,EAAAE,SAAA,EAAAG,KAGApxB,EAAAY,KAAA,iCAAA0wB,OAGAtxB,GAAAY,KAAA,iCAAAgxB,GAOA,QAAAM,GAAA1uB,EAAAstB,EAAAC,GAEAvtB,EAAAmM,OAAA,WACAmhB,EAAAE,QAAAx3B,OAAAu3B,EAAAG,SAAA,KAOA,QAAAiB,GAAA3uB,EAAA7e,EAAA6sC,EAAAV,GAEA,GAAAgB,GAAAntC,EAAA,GACAytC,EAAAC,SAAAnyC,OAAA4xC,GACAp/B,MAAA,UACA4/B,OAAA,YACAC,WAAA,cACAxqC,UAAA,IACAyqC,MAAA,SAAAzB,GACAgB,EAAAvuB,EAAAguB,EAAAV,EAAAC,IAEA0B,SAAA,SAAA1B,GACAmB,EAAA1uB,EAAAstB,EAAAC,IAEA2B,SAAA,SAAA3B,GACAF,EAAArtB,EAAAstB,EAAAC,KAKApsC,GAAA4K,GAAA,WAAA,WACA6iC,EAAAxd,YAIA,OACAvwB,SAAA,IACAoX,SAAA,EACA/W,OACAosC,OAAA,IACA6B,SAAA,IACAC,SAAA,IACA73C,QAAA,KAEA83C,YAAAnC,EAAA,wBACAjsC,KAAA,SAAA+e,EAAA7e,GAEA,GAAAmuC,GAAAtvB,EAAAstB,MACAgC,GAAAlB,MACAkB,EAAAlB,IAAAhB,EAAAna,MAGAt8B,QAAA6H,UAAA8wC,EAAArB,OAAAt3C,QAAAS,QAAAk4C,EAAArB,MAEAzrB,EAAA2qB,GAAAntB,EAAA,SAAAuvB,GACApuC,EAAAkY,OAAAk2B,KAIAZ,EAAA3uB,EAAA7e,EAAA6e,EAAAovB,SAAAE,QCpIA34C,QAAA0J,OAAA,OACAI,UAAA,gBAAA,aAAA,OAAA,SAAA,YAAA,kBAAA,SAAAG,EAAA4b,EAAAgzB,EAAApC,EAAAF,GAGA,QAAAuC,GAAAC,GACA,OAAA/4C,QAAA6H,UAAAkxC,GAAAA,EAAAzqB,cAAA,MACA,IAAA,OAAA,IAAA,MAAA,IAAA,IAAA,OAAA,CACA,KAAA,QAAA,IAAA,KAAA,IAAA,IAAA,IAAA,MAAA,OAAA,CACA,SAAA,MAAA0qB,SAAAD,IAIA,QAAAE,GAAA7W,EAAA/+B,GACA,GAAA++B,EAAAyU,SAAAzU,EAAAyU,QAAAv1C,OAAA,EAEA,IADA,GAAA41C,GAAA9U,EAAAyU,QAAAzqC,QACA8qC,GACA7zC,EAAAwzC,QAAA7oC,KAAAkpC,GACAA,EAAA9U,EAAAyU,QAAAzqC,QAWA,QAAA8sC,GAAAzO,EAAA+M,EAAAjlC,GA0BA,MAzBAA,GAAAA,GAAA,EAEAvS,QAAA6H,UAAA4iC,EAAA6M,OACAt3C,QAAAwB,QAAAipC,EAAA6M,KAAA,SAAAvgC,GACA/W,QAAAwB,QAAAuV,EAAAygC,QAAA,SAAAb,GAGAA,EAAAE,UACAF,EAAAE,YAIA72C,QAAA6H,UAAA2vC,EAAAjlC,MAEAvS,QAAA6H,UAAA8uC,EAAAW,QACA2B,EAAAzB,EAAAjlC,GAAAokC,GACApkC,MAKAA,EAAA2mC,EAAAvC,EAAAa,EAAAjlC,OAIAA,EAQA,QAAA4mC,GAAA1O,EAAA+M,GAaA,MAZAA,GAAAA,MAEAx3C,QAAA6H,UAAA4iC,EAAA6M,OACAt3C,QAAAwB,QAAAipC,EAAA6M,KAAA,SAAAvgC,GACA/W,QAAAwB,QAAAuV,EAAAygC,QAAA,SAAAmB,GACAnB,EAAAxpC,KAAA2qC,GAEAQ,EAAAR,EAAAnB,OAKAA,EAGA,QAAA4B,GAAA/B,EAAAgC,GACA,GAAA7B,GAAA2B,EAAA9B,GACA9kC,EAAA,CAIA,KAFA8kC,EAAAC,KAAAt3C,QAAAqJ,KAAAgwC,EAAA/B,MAEA/kC,EAAAilC,EAAAl2C,QACAiR,EAAA2mC,EAAA7B,EAAAG,EAAAjlC,GAIA,QAAA+mC,GAAApW,GACA,GAAAqW,MACAC,EAAA/C,EAAAI,QAAA3T,GAAAsW,MAIA,OAHAA,KACAD,EAAAv5C,QAAAqJ,KAAAmwC,IAEAD,EAQA,QAAAE,GAAApC,GACA,GAAAV,GAAA,IACA,KAAA32C,QAAAS,QAAA42C,EAAAC,MAEA,MADAzxB,GAAAkuB,MAAA,gCACA,IAEA,KAAA,GAAAryC,GAAA,EAAAA,EAAA21C,EAAAC,KAAAh2C,OAAAI,IAAA,CACA,GAAAqV,GAAAsgC,EAAAC,KAAA51C,EACA,IAAA1B,QAAAS,QAAAsW,EAAAygC,SACA,IAAA,GAAA5+B,GAAA,EAAAA,EAAA7B,EAAAygC,QAAAl2C,OAAAsX,IAAA,CACA,GAAA+/B,GAAA5hC,EAAAygC,QAAA5+B,EACA,KAAA+/B,EAAArB,KAAA,CACAX,EAAAgC,CACA,QAIA,GAAAhC,EACA,MAGA,MAAAA,GASA,QAAA+C,GAAArC,EAAAJ,GACA,GAAAI,EAAA,CACA,GAAAV,GAAA8C,EAAApC,EACAV,IACAA,EAAAE,UACAF,EAAAE,YAEAF,EAAAE,QAAA8C,QAAA1C,IAEApxB,EAAAkuB,MAAA,0CAGAluB,GAAAkuB,MAAA,sBAIA,OACAzyB,SAAA,EACApX,SAAA,KACAC,YAAA,EACAI,OACA8uC,UAAA,IACAl5C,KAAA,IACAy5C,YAAA,IACAC,SAAA,IACAC,YAAA,IACArB,SAAA,IACAsB,gBAAA,KAEA5wB,YAAA,SAAA,SAAAE,GACA,GAAAguB,MACAgC,KACAW,EAAA,KACAC,KACA95C,EAAAkpB,EAAAlpB,IAGAkpB,GAAA3U,OAAA,WAAA,SAAAwlC,EAAAC,IAEA,OAAAA,GAAA,OAAAD,GAAA,OAAAC,KACA9C,EAAAhuB,EAAAovB,SACAuB,EAAA3wB,EAAA0wB,gBACA1C,GAAAA,EAAAC,OACA2C,EAAA5wB,EAAAgwB,UACAA,EAAA5C,EAAA2D,WAAAH,GACAZ,GACAhC,EACAA,EAAAC,KAAAt3C,QAAAqJ,KAAAgwC,GAAA/B,KAEAD,EAAAr3C,QAAAqJ,KAAAgwC,GAEAhC,EAAAgC,UAAAY,GAEAp0B,EAAAkuB,MAAA,4BAAAkG,IAIA5C,GACAA,EAAAhL,QACAgL,EAAAhL,MAAA,aAEAgL,EAAAgD,mBACAhD,EAAAgD,iBAAA9D,EAAA,wBAEAltB,EAAAguB,MAAAA,GAEAxxB,EAAAkuB,MAAA,qCAGA,GAGA1qB,EAAAmvB,UAAA,EACAnvB,EAAAixB,UAAA,GAEAjxB,EAAAkxB,eAAA,WACAlxB,EAAAmvB,UAAAnvB,EAAAmvB,SACAnvB,EAAAmvB,WACAnvB,EAAAmxB,UAAAx6C,QAAAqJ,KAAAggB,EAAAovB,cAGApvB,EAAAmvB,UACAvuC,EAAAwwC,WAAA,sBAAAt6C,EAAAk3C,IAIAhuB,EAAAqxB,YAAA,SAAAC,GACA1wC,EAAAwwC,WAAA,+BAAAE,qBAAAA,KAGAtxB,EAAAuxB,eAAA,WACAvxB,EAAAmvB,UAAA,EACAnvB,EAAAmxB,UAAAx6C,QAAAqJ,KAAAggB,EAAAmxB,UAAAnxB,EAAAovB,UACAxuC,EAAAwwC,WAAA,+BAIApxB,EAAAwxB,oBAAA,WACA,GAAAC,GAAAzxB,EAAAne,MAGA4vC,GAAAzxC,MACAgjC,MAAAgL,EAAAhL,OAEAyO,EAAAV,WAAA3D,EAAA2D,UAEA,IAAAW,GAAAlC,EAAAnmB,MACAnoB,MAAAuwC,EACApC,YAAAnC,EAAA,sBACAyE,SAAA,UAEA3xB,GAAA+vB,gBAAA,SAAAj5C,EAAAk5C,GACAxzB,EAAAjc,KAAA,uBAAAzJ,GACAi5C,EAAA/B,EAAAgC,IAEAyB,EAAAG,YAAA,WAEA5D,EAAAhL,MAAAyO,EAAAzxC,KAAAgjC,MAEA0O,EAAAjqC,QACAgqC,EAAA7vC,aAKAoe,EAAA6xB,gBAAA,WACA,GAEArE,GAFAsE,EAAA9xB,EAAAne,OACAmsC,EAAAhuB,EAAAguB,KAEAr3C,SAAAuJ,WAAAywC,IACAnD,KACA72C,QAAAwB,QAAAi1C,EAAAI,QAAA,SAAAI,EAAA/T,GACA8W,EAAA/C,EAAA/T,EAAAmU,KACAR,EAAA3T,GAAA+T,MAIAJ,EAAAJ,EAAAI,QAEAsE,EAAAtE,QAAAA,CAEA,IAAAuE,GAAA7E,EAAA,iBACAc,GAAAgE,iBAEAD,EAAA/D,EAAAgE,eAGA,IAAAC,IACA/wC,MAAA4wC,EACAzC,YAAA0C,EACAJ,SAAA,UAGAD,EAAAlC,EAAAnmB,KAAA4oB,EACAH,GAAAI,UAAA,SAAAtE,GACA,GAAAC,IACAhU,KAAA+T,EACAuC,OAAAF,EAAArC,GAEAyC,GAAArC,EAAAH,GACAjtC,EAAAwwC,WAAA,iBAAAt6C,EAAAk3C,EAAAH,GAEA6D,EAAAjqC,QACAqqC,EAAAlwC,YAEAkwC,EAAAF,YAAA,WAEAF,EAAAjqC,QACAqqC,EAAAlwC,eAIAX,KAAA,SAAA+e,EAAA7e,EAAAgxC,GAEA,GAAA56C,IACAT,KAAAq7C,EAAAr7C,KACA05C,UAAA,EACA4B,oBAAA3C,EAAA0C,EAAAE,qBACA5B,YAAAhB,EAAA0C,EAAA1B,aACAF,YAAAd,EAAA0C,EAAA5B,aAEA55C,SAAA6H,UAAA2zC,EAAA3B,YACAj5C,EAAAi5C,SAAAf,EAAA0C,EAAA3B,WAEAxwB,EAAAzoB,QAAAA,GAEA83C,YAAAnC,EAAA,qBC5UAv2C,QAAA0J,OAAA,mBACA+C,SAAA,YAAA,WAEA,GAAAoqC,MACA8E,EAAA,GACAvB,KACAwB,EAAA,2CACAC,EAAA,mNAyDA7iB,MAAAie,OAAA,SAAA92C,EAAA82C,GACA,GAAAC,GAAAl3C,QAAA8D,QAAAg4C,QAAA,EAAAC,WAAA,GAAA9E,EACA,IAAAC,EAAA8E,KAAA,CACA,GAAAA,IAAAF,QAAA,EACA97C,SAAA8D,OAAAk4C,EAAA9E,EAAA8E,MACA9E,EAAA8E,KAAAA,EAGA,MADAnF,GAAA12C,GAAA+2C,EACAle,MAqBAA,KAAA2iB,YAAA,SAAAz1B,GAEA,MADAy1B,GAAAz1B,EACA8S,MAuBAA,KAAAqgB,UAAA,SAAAl5C,EAAAk5C,GAEA,MADAe,GAAAj6C,GAAAk5C,EACArgB,MAeAA,KAAA4iB,gBAAA,SAAAK,GAEA,MADAL,GAAAK,EACAjjB,MAgBAA,KAAA6iB,gBAAA,SAAAI,GAEA,MADAJ,GAAAI,EACAjjB,MAkBAA,KAAAxqB,KAAA,WACA,GAAAipC,GAAA,CAEA,QACAZ,QAAAA,EACA8E,YAAAA,EACAvB,WAAAA,EACAwB,gBAAAA,EACAC,gBAAAA,EAWAvf,GAAA,WACA,QAAAmb,OCxMAz3C,QAAA0J,OAAA,OACAI,UAAA,mBAAA,WAAA,kBAAA,iBAAA,SAAA+hB,EAAA0qB,EAAA2F,GAGA,OACAhyC,SAAA,IACAoX,SAAA,EACA/W,OACAwM,IAAA,IACA0hC,SAAA,IACAD,SAAA,IACA53C,QAAA,KAEA83C,YAAAnC,EAAA,qBACAjsC,KAAA,SAAA+e,EAAA7e,GACAxK,QAAA6H,UAAAwhB,EAAAtS,IAAAygC,UAAAx3C,QAAAS,QAAA4oB,EAAAtS,IAAAygC,UACA3rB,EAAAqwB,GAAA7yB,EAAA,SAAAuvB,GACApuC,EAAAkY,OAAAk2B,UCjBA54C,QAAA0J,OAAA,OACAI,UAAA,oBAAA,OAAA,KAAA,OAAA,QAAA,iBAAA,WAAA,cAAA,YAAA,YAAA,SAAA+b,EAAAya,EAAA6b,EAAAC,EAAAC,EACAxwB,EAAAywB,EAAAtmC,EAAAygC,GAEA,QAAA8F,GAAAnpB,GACA,GAAAopB,GAAAppB,CAQA,OAPAA,GAAA7hB,QAAA,kBAAA,IACAirC,EAAAppB,EAAA9R,QAAA,gBAAAm1B,EAAAkF,aACAr6B,QAAA,KAAA,KACA,IAAAk7B,EAAAjrC,QAAA,OACAirC,EAAAA,EAAA91C,UAAA,KAGA81C,EAGA,QAAAC,GAAAxF,GACA,GAAAyF,GAAApc,EAAAqc,OAEA,IAAA1F,EAAAgF,SACAS,EAAAE,QAAA3F,EAAAgF,cACA,IAAAhF,EAAAyB,YAAA,CAEA,GAAAmE,GAAAR,EAAA50C,IAAAwvC,EAAAyB,YACA,IAAAmE,EACAH,EAAAE,QAAAC,OACA,CACA,GAAAzpB,GAAA+oB,EAAAW,sBAAAP,EAAAtF,EAAAyB,aACA0D,GAAA30C,IAAA2rB,GACAhO,QAAA,SAAAwN,GAEAypB,EAAA30C,IAAAuvC,EAAAyB,YAAA9lB,GACA8pB,EAAAE,QAAAhqB,KAEAmhB,MAAA,WACA2I,EAAA3rC,OAAA,8BAKA,MAAA2rC,GAAAK,QAGA,QAAAC,GAAA3zB,EAAA7e,EAAAyyC,GACA,GAAA5F,GAAAhuB,EAAAguB,MACA6F,EAAA7zB,EAAA6zB,OAGA1yC,GAAA6hB,KAAAoqB,EAAAoF,gBAGA,IAAAsB,GAAA9zB,EAAAne,MAGAmsC,GAAAmC,SACAnC,EAAAmC,WAGA2D,EAAA3D,OAAAnC,EAAAmC,MAGA,IAAA4D,IACA/zB,OAAA8zB,EACAlG,OAAAI,EACAmC,OAAAnC,EAAAmC,QAIA6D,IA0CA,OAzCAA,GAAAC,KAAAb,EAAAS,GACAA,EAAAN,SACA58C,QAAAwB,QAAA07C,EAAAN,QAAA,SAAAG,EAAA34C,GACApE,QAAAqB,SAAA07C,GACAM,EAAAj5C,GAAA4R,EAAAvO,IAAAs1C,GAEAM,EAAAj5C,GAAA4R,EAAAunC,OAAAR,EAAAA,EAAAK,KAMA9c,EAAAhd,IAAA+5B,GAAAjxB,KAAA,SAAAoxB,GACAx9C,QAAA8D,OAAA05C,EAAAJ,EAGA,IAAAnB,GAAAuB,EAAAF,IAEA,IADA9yC,EAAA6hB,KAAA4vB,GACAiB,EAAA/zB,WAAA,CACA,GAAAs0B,GAAAnB,EAAAY,EAAA/zB,WAAAq0B,EACAN,GAAAQ,eACAP,EAAAD,EAAAQ,cAAAD,GAEAjzC,EAAAwI,WAAAzH,KAAA,0BAAAkyC,GAEA5xB,EAAArhB,EAAA+hB,YAAA4wB,IACA,SAAA/8C,GAEA,GAAAu9C,GAAA,gCACAv9C,KACAu9C,GAAA,KAAAv9C,GAEAylB,EAAAY,KAAAk3B,GACAnzC,EAAA6hB,KAAAoqB,EAAAmF,gBAAAt6B,QAAA,MAAAq8B,MAIAV,GACAA,EAAAhyC,WAGAkyC,EAGA,OACA77B,SAAA,EACApX,SAAA,KACAC,YAAA,EACAI,OACA8sC,MAAA,IACA6F,QAAA,KAEA5yC,KAAA,SAAA+e,EAAA7e,GACA,GAAAyyC,GAAAD,EAAA3zB,EAAA7e,EAAA,KACA6e,GAAAL,IAAA,sBAAA,WACAi0B,EAAAD,EAAA3zB,EAAA7e,EAAAyyC,KAEA5zB,EAAAL,IAAA,eAAA,WACAi0B,EAAAD,EAAA3zB,EAAA7e,EAAAyyC,UC/HAj9C,QAAA0J,OAAA,OACAI,UAAA,aAAA,OAAA,SAAA,YAAA,kBAAA,SAAA+b,EAAAgzB,EAAApC,EAAAF,GAEA,QAAAqH,GAAAv0B,GACA,GAAAw0B,GAAAx0B,EAAAw0B,UACA,IAAAA,EAAA,CACA,GAAA3G,GAAAT,EAAAI,QAAAgH,EAAA3a,KACA,IAAAgU,EAAA,CAEA2G,EAAAxR,QACAwR,EAAAxR,MAAA6K,EAAA7K,OAGAwR,EAAAxD,mBACAwD,EAAAxD,iBAAA9D,EAAA,oBACAW,EAAAmD,mBACAwD,EAAAxD,iBAAAnD,EAAAmD,mBAIAwD,EAAAxD,mBACAwD,EAAA9B,UAAA7E,EAAA6E,WAIA8B,EAAA1G,MACA0G,EAAA1G,IAAAV,EAAAna,MAIAjT,EAAA4tB,OAAAj3C,QAAAqJ,KAAA6tC,EAGA,IAAAsC,GAAAqE,EAAArE,MACAA,GACAx5C,QAAAqB,SAAAm4C,KACAA,EAAAx5C,QAAAgnB,SAAAwyB,IAGAA,KAIAnwB,EAAAmwB,OAAAA,EAGAnwB,EAAAy0B,cACAz0B,EAAAy0B,eACAz0B,EAAAy0B,YAAAC,aAAA,OAIAl4B,GAAAY,KAAA,yBAAAo3B,EAAA3a,UAGArd,GAAAm4B,MAAA,yDAIA,QAAAC,GAAA50B,EAAA7e,GACA,GAAAqzC,GAAAx0B,EAAAw0B,UACA,IAAAA,EAAA,CAGA,GAAAK,GAAA,WACA,GAAAvH,GAAAttB,EAAAsvB,GACA,IAAAhC,EAAA,CACA,GAAAj/B,GAAAi/B,EAAAE,QAAAtlC,QAAAssC,EACAnmC,IAAA,GACAi/B,EAAAE,QAAAx3B,OAAA3H,EAAA,GAGAlN,EAAA6X,SAGAgH,GAAAhH,OAAA,WACA,GAAAgH,EAAAzoB,QAAA66C,oBAAA,CACA,GAAA0C,GAAA90B,EAAAne,OACAkzC,EAAA7H,EAAA,oBACAsH,GAAAO,oBACAA,EAAAP,EAAAO,kBAEA,IAAA9C,IACA/wC,MAAA4zC,EACAzF,YAAA0F,EACApD,SAAA,UAEAD,EAAAlC,EAAAnmB,KAAA4oB,EAEA6C,GAAAlD,YAAA,WACAF,EAAAjqC,QACAqtC,EAAAlzC,YAEAkzC,EAAAE,aAAA,WACAH,IACAC,EAAAlD,mBAGAiD,MAKA70B,EAAAyyB,OAAA,WACAzyB,EAAAoxB,WAAA,iBAIApxB,EAAA2yB,KAAA,WACA,GAAAsC,GAAAj1B,EAAAne,MACAozC,GAAAT,WAAA79C,QAAAqJ,KAAAw0C,EAEA,IAAAU,GAAAhI,EAAA,kBACAsH,GAAAW,kBACAD,EAAAV,EAAAW,gBAGA,IAAAlD,IACA/wC,MAAA+zC,EACA5F,YAAA6F,EACAvD,SAAA,UAGAD,EAAAlC,EAAAnmB,KAAA4oB,EACAgD,GAAArD,YAAA,WACAF,EAAAjqC,QACAwtC,EAAArzC,UAEA,IAAAgsC,GAAA5tB,EAAA4tB,MACAA,GAAA+E,MAAA/E,EAAA+E,KAAAF,QAEAzyB,EAAAoxB,WAAA,wBAGA6D,EAAAG,WAAA,WACAZ,EAAAxR,MAAAiS,EAAAT,WAAAxR,MACArsC,QAAA8D,OAAA+5C,EAAArE,OAAA8E,EAAAT,WAAArE,QACA8E,EAAArD,oBAIAp1B,GAAAm4B,MAAA,oBAIA,OACA18B,SAAA,EACApX,SAAA,KACAC,YAAA,EACAuuC,YAAAnC,EAAA,cACAhsC,OACAszC,WAAA,IACAlF,IAAA,UACAH,SAAA,IACA53C,QAAA,IACAk9C,YAAA,KAEA30B,YAAA,SAAA,SAAAE,GAEAA,EAAAL,IAAA,8BAAA,SAAAlkB,EAAAif,GACAsF,EAAAy0B,YAAAC,YAAAh6B,EAAA42B,uBAGAtxB,EAAAq1B,eAAA,WACA,GAAAb,GAAAx0B,EAAAw0B,WACAc,EAAAt1B,EAAAne,OACAowC,GACA/wC,MAAAo0C,EACAjG,YAAAnC,EAAA,yBACAtZ,KAAA4gB,EAAAe,WAAA,KACA5D,SAAA,SACA6D,YAAAhB,EAAA,WAAA,oCAAA,mBAGA9C,EAAAlC,EAAAnmB,KAAA4oB,EACAqD,GAAA1D,YAAA,WACAF,EAAAjqC,QACA6tC,EAAA1zC,eAIA6zC,QAAA,WAMA,OACAC,IAAAnB,EACAoB,KAAAf,QCvNAj+C,QAAA0J,OAAA,OAAAu1C,KAAA,iBAAA,SAAA5C,GAAAA,EAAA30C,IAAA,yCAAA,2QACA20C,EAAA30C,IAAA,uCAAA,ouBACA20C,EAAA30C,IAAA,sCAAA,oDACA20C,EAAA30C,IAAA,wCAAA,krBACA20C,EAAA30C,IAAA,kCAAA,8RACA20C,EAAA30C,IAAA,mCAAA,ujBACA20C,EAAA30C,IAAA,sCAAA,+bACA20C,EAAA30C,IAAA,oCAAA,ssBACA20C,EAAA30C,IAAA,0CAAA,qjBACA20C,EAAA30C,IAAA,qCAAA,6kCCmuCA20C,EAAe30C,IAAI,+BAA+B,8dAAye3H;;AC7uC3hB;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;CCLA,SAAUC,GA8CV,QAASk/C,GAAa/+C,GACpB,IACEH,EAAQ0J,OAAOvJ,GACf,MAAMg/C,GACN,OAAO,EAET,OAAO,EA8CT,QAASC,GAAgB/1B,EAAQg2B,EAAaC,GAI1C,QAASC,KAEPl2B,EAAOL,IAAI,uBAAwB,SAAUlkB,GAIvCu6C,EAAYG,uBAAyBH,EAAYlxC,QAAQsxC,WAAa,GACxE36C,EAAM6xB,mBAIVtN,EAAOL,IAAI,yBAA0B,WACnCq2B,EAAYG,sBAAwBF,EAAcI,yBAdxD,GAAIJ,EAAcI,uBAoBhB,GAAIR,EAAa,WAKf,GAAI1yC,GAAK6c,EAAOL,IAAI,qBAAsB,WAKxCxc,IACA+yC,UAKFA,KAtIN,GAAII,GAAQ3/C,EAAQ0J,OAAO,aAE3Bi2C,GAAMnG,QAAQ,WAAY,gBAAiB,SAAU7lB,EAAUisB,GAE7DjsB,EAASO,UAAU,qBAAsB,YAAa,YACpD,SAAUC,EAAWne,GACnB,GAAI6pC,GAASP,CAEb,OAAO,UAAUQ,EAAWC,GAI1B,GAFAT,EAAgBA,GAAiBtpC,EAAUvO,IAAI,iBAE3C63C,EAAcU,iBAChB,IACEH,EAAUA,GAAW7pC,EAAUvO,IAAI,WACnCo4C,EAAQI,UAAUC,QAClB,MAAOf,GACPgB,QAAQC,IAAI,oBAAqBN,GAIrC3rB,EAAU2rB,EAAWC,OAK3BH,EAAcS,aAAaryC,KAAK,6BAGlC2xC,EAAMV,KAAK,YAAa,gBAAiB,iBAAkB,SAAUvwC,EAAW4wC,EAAejD,GACzFiD,EAAcgB,qBAChB5xC,EAAU6xC,KAAK,QAAQ78C,KAAK,WAAY,QAGtC47C,EAAcrD,WAKhBqD,EAAc5G,YAAc,wBAC5B2D,EAAe30C,IAAI43C,EAAc5G,YAAa4G,EAAcrD,cAYhE0D,EAAMnG,QAAQ,WAAY,SAAU7lB,GAClCA,EAASO,UAAU,YAAassB,KAGlC,IAAIA,IACF,YAAa,UAAW,gBACxB,SAAUrsB,EAAW0rB,EAASP,GAQ1B,QAASmB,GAAKC,GACZ,GAAIC,GAAIxsB,EAAUusB,EAClBvsB,GAAUusB,GAAK,WAIb,GAAI9pC,GAAS+pC,EAAEz8B,MAAMiQ,EAAW7e,UAWhC,OAPIsB,KAAWud,IAIb0rB,EAAQL,uBAAwB,GAG3B5oC,GAvBb,GAAI0oC,EAAcI,uBAAwB,CAExCG,EAAQL,uBAAwB,CAEhC,IAAIoB,IAAa,MAAO,OAAQ,SAAU,OAAQ,QAuBlD5gD,GAAQwB,QAAQo/C,EAAWH,GAI7B,MAAOtsB,IAgDXwrB,GAAM71C,UAAU,oBAAqB,gBAAiB,yBAA0B,SAAUw1C,EAAeuB,GACvG,OACEt2C,OAAO,EACPL,SAAU,IACVwuC,YAAa4G,EAAc5G,YAC3BoG,QAAS,WACP,MAAO+B,QAGTl1C,QAAQ,0BAA2B,UAAW,eAAgB,WAEhE,MAAO,UAAU0d,EAAQ7e,GAEvB,GAAIs2C,GAAct2C,EAASu2C,cAAc,WAEzC,KAAKD,EACH,KAAM,IAAI1nB,OAAM,+CAKlB/P,GAAOlb,MAAQ2yC,EAAY3yC,YAW/BwxC,EAAM71C,UAAU,WAAY,mBAAoB,SAAUk3C,GAExD,OACEz2C,OAAO,EACPL,SAAU,IACV40C,QAASkC,MAGTr1C,QAAQ,oBAAqB,mBAAoB,SAAUs1C,GAE7D,MAAO,UAAUz2C,GAMf,MAFAA,GAASkY,OAAO,8DAGdq8B,IAAKkC,OAKPt1C,QAAQ,oBAAqB,UAAW,eAAgB,gBAAiB,SAAUk0C,EAASqB,EAAc5B,GAE5G,MAAO,UAAUj2B,EAAQ7e,EAAU8e,GAK5B9e,EAAS22C,SAAS,aACrB32C,EAASpI,SAASk9C,EAAc8B,UAKlC93B,EAAO5d,SAAS,sBAAuB,SAAUvH,GAC/CklB,EAAOg4B,sBAAwBl9C,GAOjC,IAAIm9C,GAAah4B,EAAOi4B,SAAW,IAAMl4B,EAAOm4B,IAC5CV,EAAcjB,EAAQI,UAAUx4C,IAAI65C,EAKxC,IAAmB,SAAfA,EACFlC,EAAgB/1B,EAAQy3B,EAAaxB,OAChC,CAEL,GAAImC,GAAiBj3C,EAASu2C,cAAc,WAExCU,KAEFX,EAAYY,QAAUD,GAM1Bp4B,EAAOL,IAAI,WAAY,WACrB83B,EAAYa,YAKdb,EAAYc,SAIZv4B,EAAOw4B,eAAiBf,EAAY3yC,QAEpCkb,EAAO3U,OAAO,0BAA2B,SAAUvQ,GAEjDqG,EAAS9G,KAAK,cAAeS,GAC7BqG,EAASs3C,YAAY,qBAAsB39C,KAG7CklB,EAAO3U,OAAO,gCAAiC,SAAUvQ,GACvDqG,EAASs3C,YAAY,oBAAqB39C,IAK5C,IAAI49C,GAAUz4B,EAAO04B,cAErB,IAAID,EAAS,CACX,GAAIE,GAASf,EAAagB,YAAYH,EACtCjB,GAAYiB,QAAQE,GAKtBz3C,EAASe,KAAK,WAAYu1C,OAuB9BnB,EAAMwC,SAAS,iBACXzJ,YAAa,4CACbz6B,MAAO,IACP8M,QAAS,cACTq3B,WAAW,EACXpC,kBAAkB,EAClBqC,cAAeriD,EAAQ2C,KACvB29C,qBAAqB,EACrBc,SAAU,8BACV1B,wBAAwB,IAI5BC,EAAMh0C,QAAQ,0BAA2B,KAAM,YAAa,gBAAiB,iBAAkB,SAAS20B,EAAItqB,EAAWspC,EAAejD,GAIpI,QAASiG,KACPzC,EAAUA,GAAW7pC,EAAUvO,IAAI,WAGrC,QAAS86C,GAAY/I,GACf8F,EAAc8C,WAAc5I,IAAWA,EAAOgJ,WAAahJ,EAAOiJ,WACpEH,IACA9I,EAAOiJ,SAASC,QAIpB,QAAS3O,GAAM4O,GAEb,IACEJ,EAAYI,EAAUnJ,QACtB,MAAM2F,GACNgB,QAAQC,IAAI,mBAAoBjB,GAGlC,MAAO7e,GAAGvvB,OAAO4xC,GArBnB,GAAI9C,EAwBJ,QACE+C,QAAS,SAASpJ,GAKhB,GAAI8F,EAAc8C,YACG,OAAjB5I,EAAOz5B,SAAmBs8B,EAAe50C,IAAI+xC,EAAOpmB,MAAO,CAI7D,GAAIxc,GAAS0oC,EAAc+C,cAAc7I,EAErC5iC,MAAW,EAEb4iC,EAAOgJ,WAAY,GAGnBF,IAEA9I,EAAOiJ,SAAW5C,EAAQI,UAAU4C,OAAOrJ,GAC3CA,EAAOiJ,SAAStoC,MAAMvD,IAI1B,MAAO4iC,IAGTsJ,aAAc/O,EAEdnhB,SAAU,SAASA,GASjB,MAJGA,IACD2vB,EAAY3vB,EAAS4mB,QAGhB5mB,GAGTmwB,cAAehP,MAKnB4L,EAAMh0C,QAAQ,WAAY,gBAAiB,WAAY,eAAgB,YAAa,SAAS2zC,EAAe9kC,EAAU0mC,EAAcxyC,GAOlI,QAASs0C,GAAQ1mB,GAEf,GAOG2mB,GAPC3jB,EAAOtG,KAEP7qB,GACFmuB,GAAIA,EACJmjB,WAAY,EACZ10B,QAASu0B,EAAcv0B,QACvBm4B,UAAU,GACKC,IAEjBnqB,MAAKoqB,IAAM9mB,EAEXtD,KAAKqqB,MAAQ,EAEbrqB,KAAK7e,MAAQ,SAASmpC,GAgEpB,QAAS9Q,KACPyQ,EAAe,KACf90C,EAAM+0C,UAAW,EAhEnBI,EAAmBA,MAEhBtjD,EAAQqB,SAASiiD,GAClBA,GACEv4B,QAASu4B,GAGXtjD,EAAQwB,QAAQ+hD,EAAyB,SAAStuB,GAChD,GAAGquB,EAAiBruB,GAClB,KAAM,IAAImE,OAAM,gBAAkBnE,EAAI,uCAK5Cj1B,EAAQ8D,OAAOqK,EAAOm1C,GAGpBn1C,EAAM4c,QADL5c,EAAMsxC,WAAa,EACJ6D,EAAiBv4B,SAAW5c,EAAM4c,SAAWu0B,EAAcv0B,QAE3Du4B,EAAiBv4B,SAAWu0B,EAAcv0B,QAW5D5c,EAAMsxC,YAIN,IAAI+D,GAAMxjD,EAAQ4B,QAAQ8M,EAAU,GAAG+0C,cAEpCD,GAAIliD,QAAU4/C,EAAawC,sBAAsBF,EAAKlkB,KAKvDA,EAAKqkB,cAAgBH,EAAI,GAMzBhpC,EAAS,WAGH8kB,EAAKqkB,eAAiBrkB,EAAKqkB,gBAAkBC,EAAM,IACrDtkB,EAAKqkB,cAAcrsB,UAKpB2rB,GAAwC,IAAxB3D,EAAcrhC,MAEA,IAAxBqhC,EAAcrhC,OACvBu0B,IAFAyQ,EAAezoC,EAASg4B,EAAO8M,EAAcrhC,QAWjD+a,KAAK6qB,oBAAsB,WACrBZ,IACFzoC,EAASzM,OAAOk1C,GAChBA,EAAe,OAInBjqB,KAAK0pB,KAAO,WACVv0C,EAAMsxC,WAAa74C,KAAKC,IAAI,IAAKsH,EAAMsxC,YAEd,IAArBtxC,EAAMsxC,YACRngB,EAAK4gB,OAAM,IAIflnB,KAAK8qB,WAAa,WACd,MAAO31C,GAAM+0C,UAGjBlqB,KAAKjO,QAAU,SAAS5mB,GACtBgK,EAAM4c,QAAU5mB,GAGlB60B,KAAK+oB,QAAU,SAASgC,GAKtB,MAJe97C,UAAX87C,IACFzkB,EAAK0kB,SAAWD,GAGXzkB,EAAK0kB,UAGdhrB,KAAKknB,MAAQ,SAAS+D,GAUpB,GARA3kB,EAAKukB,sBACL11C,EAAMsxC,WAAa,EACnBtxC,EAAM+0C,UAAW,EAMd5jB,EAAKqkB,iBACHj1C,EAAU,GAAG+0C,eAAiB/0C,EAAU,GAAG+0C,gBAAkBG,EAAM,IAAK,CAG3E,IACEtkB,EAAKqkB,cAAcO,QACnB,MAAMC,IACN,WACI,GAAIC,GAAiB9kB,EAAKqkB,aAC1BnpC,GAAS,WACP,GAAG4pC,EACD,IACEA,EAAeF,QACf,MAAMG,MAEZ,QAIN/kB,EAAKqkB,cAAgB,KAGvB,IACMM,GACFjkD,EAAQwB,QAAQ2hD,EAAe,SAASmB,GACtCA,MAGJ,QACAnB,EAAc7hD,OAAS,IAI3B03B,KAAKlmB,KAAO,SAAStG,GACnB22C,EAAcn1C,KAAKxB,IAGrBwsB,KAAK7qB,MAAQ,WACX,MAAOA,IAGT6qB,KAAK4oB,OAAS,WACZtiB,EAAK+jB,OAAS,GAGhBrqB,KAAK2oB,QAAU,aACRriB,EAAK+jB,OAAS,GACjBkB,EAAUtE,UAAUuE,SAASllB,IAlLnC,GAAIskB,GAAQl1C,EAAU6xC,KAAK,QAGvBgD,GAA2B,KAAM,aAAc,YAoL/CtD,IAEJA,GAAUx4C,IAAM,SAAS60B,GAEvB,IAAI6M,MAAM7M,GACR,KAAM,IAAIlD,OAAM,gCAGlB,IAAI2hB,GAAWkF,EAAU3jB,EAQzB,OANIye,KAEFA,EAAWkF,EAAU3jB,GAAM,GAAI0mB,GAAQ1mB,GACvC2jB,EAAUjyC,KAAK+sC,IAGVA,GAGTkF,EAAUuE,SAAW,SAASC,GAK5B,GAJIzkD,EAAQqB,SAASojD,KACnBA,EAAexE,EAAUwE,IAGvBA,EAAc,CAChBA,EAAavE,OAEb,IAAIx+C,GAAIw/C,EAAa3vC,QAAQ0uC,EAAWwE,EACxCxE,GAAU5gC,OAAO3d,EAAG,SAEbu+C,GAAUwE,EAAat2C,QAAQmuB,MAI1C2jB,EAAU4C,OAAS,SAASD,GAE1B,GAAIhsC,KAKJsqC,GAAawD,cAAc9tC,EAAQ,SACnCsqC,EAAawD,cAAc9tC,EAAQ,OAInC,KAFA,GAAIlV,GAAIu+C,EAAU3+C,OAEZI,KAAK,CACT,GAAIq5C,GAAWkF,EAAUv+C,GACrBqgD,EAAUhH,EAASiJ,QAEpBjC,IAAWA,EAAQ/sC,KAAK4tC,EAAQxvB,MACjCxc,EAAO5I,KAAK+sC,GAQhB,MAJqB,KAAlBnkC,EAAOtV,QACRsV,EAAO5I,KAAKu2C,GAGP3tC,GAKTsqC,EAAawD,cAAczE,EAAW,QAEtC,IAAIsE,GAAYtE,EAAUx4C,IAAI,OAK9B,OAHA88C,GAAU3C,SACV2C,EAAUtE,UAAYA,EAEfsE,KAIT5E,EAAMh0C,QAAQ,eAAgB,WAE5B,GAAIg5C,GAAI3kD,EAAQ4B,QAEZ23B,GACF2oB,YAAa,SAASH,GACpB,GAAiDE,GAA7Ct2B,EAAQo2B,EAAQp2B,MAAM,qBAE1B,KAAGA,EAGD,KAAMyN,OAAM,wCAA0C2oB,EAGxD,OALEE,GAAS,GAAI2C,QAAOj5B,EAAM,GAAIA,EAAM,KAOxCk5B,UAAW,SAASzlC,EAAKgF,EAAQL,GAE/B,IADA,GAAIriB,GAAI0d,EAAI9d,OACNI,KAAK,CACT,GAAIojD,GAAI1lC,EAAI1d,EACZojD,GAAE1gC,GAAQF,MAAM4gC,EAAG/gC,KAGvB2gC,cAAe,SAAStlC,EAAKgF,GAC3BhF,EAAIgF,GAAU,WACZmV,EAAMsrB,UAAU7rB,KAAM5U,EAAQ9O,aAGlCouC,sBAAuB,SAASl5C,EAAUu6C,GAGxC,IAFA,GAAI3+C,GAAIoE,EAASu2C,cAAc,YAEzB36C,GAAG,CACP,GAAGA,IAAM2+C,EACP,OAAO,CAGT3+C,GAAIA,EAAEs7C,QAGR,OAAO,GAETsD,YAAa,SAAUx6C,EAAUy6C,EAAaC,GAC5C,GAAIC,GAAM,IAEV,IAAIF,EAAYz6C,GACd26C,EAAM36C,MACD,CAEL,GAAI46C,EAGFA,GADEF,EACU16C,EAASmI,SAETnI,EAASwI,UAIvB,KADA,GAAItR,GAAI0jD,EAAU9jD,QACV6jD,GAAOzjD,KACbyjD,EAAM5rB,EAAMyrB,YAAYL,EAAES,EAAU1jD,IAAKujD,EAAaC,GAI1D,MAAOC,IAET5zC,QAAS,SAAS6N,EAAKnb,EAAKkW,GAK1B,IAAK,GAAIzY,GAAKyY,GAAS,EAAIvB,EAAIwG,EAAI9d,OAAYsX,EAAJlX,EAAOA,IAChD,GAAI0d,EAAI1d,KAAOuC,EACb,MAAOvC,EAIX,OAAO,IAIX,OAAO63B,KAMTv5B,EAAQ0J,OAAO,WAAWu1C,KAAK,iBAAkB,SAAS5C,GACxDA,EAAe30C,IAAI,4CAA6C,2NAE/D1H;;AC3tBH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;oLCEO,SAAS8D,EAAOuhD,GAGtB,IAFA,IAAI3jD,EAAWqqB,EAEVnT,EAAI,EAAG0sC,EAAMhwC,UAAUhU,OAAQsX,EAAI0sC,EAAK1sC,IAE5C,IAAKlX,KADLqqB,EAAMz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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACteA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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AOwE,WAAa17E,EAAOvG,EAAWttB,SAASksB,KAAK6+E,EAAQphG,GAC5DohG,EAAOyE,WAAa,WAAY,MAAOliF,GAAW8rC,cAM7DlwD,UAAU,cAAe,SAAU,eAAgB,SAAS2qB,EAAQ+yE,GACjE,OACIl9F,KAAM,SAASC,EAAO3I,EAASssB,GAC3B,GAAIu6E,GAAWl+F,EAAM6d,MAAM8F,EAAWu6E,SAEtC,MAAMA,YAAoBjB,IACtB,KAAM,IAAIoG,WAAU,iDAGxB,IAAKnF,EAASa,QAAd,CAEA,GAAIqC,GAAS,GAAInE,GAAagC,UAC1Bf,SAAUA,EACV7mG,QAASA,GAGb+pG,GAAOwE,WAAa17E,EAAOvG,EAAWttB,SAASksB,KAAK6+E,EAAQphG,GAC5DohG,EAAOyE,WAAa,WAAY,MAAOliF,GAAW8rC,eAM7DlwD,UAAU,cAAe,eAAgB,SAAS09F,GAC/C,OACIl9F,KAAM,SAASC,EAAO3I,EAASssB,GAC3B,GAAIu6E,GAAWl+F,EAAM6d,MAAM8F,EAAWu6E,SAEtC,MAAMA,YAAoBjB,IACtB,KAAM,IAAIoG,WAAU,iDAGxB,IAAIjC,GAAS,GAAInE,GAAaiC,UAC1BhB,SAAUA,EACV7mG,QAASA,GAGb+pG,GAAO6F,aAAe,WAClB,MAAOtjF,GAAWqjF,WAAav4E,KAAKu4E,gBAM7C7nG;;AC3zCX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvZA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"vendor-1dd4407281.min.js","sourcesContent":["(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n},{\"110\":110,\"114\":114,\"115\":115}],17:[function(_dereq_,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = _dereq_(115);\nvar toAbsoluteIndex = _dereq_(110);\nvar toLength = _dereq_(114);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n},{\"110\":110,\"114\":114,\"115\":115}],18:[function(_dereq_,module,exports){\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = _dereq_(113);\nvar toLength = _dereq_(114);\nvar toAbsoluteIndex = _dereq_(110);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n},{\"110\":110,\"113\":113,\"114\":114}],19:[function(_dereq_,module,exports){\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = _dereq_(31);\nvar IObject = _dereq_(52);\nvar toObject = _dereq_(115);\nvar toLength = _dereq_(114);\nvar asc = _dereq_(22);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n},{\"114\":114,\"115\":115,\"22\":22,\"31\":31,\"52\":52}],20:[function(_dereq_,module,exports){\nvar aFunction = _dereq_(11);\nvar toObject = _dereq_(115);\nvar IObject = _dereq_(52);\nvar toLength = _dereq_(114);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n\n},{\"11\":11,\"114\":114,\"115\":115,\"52\":52}],21:[function(_dereq_,module,exports){\nvar isObject = _dereq_(56);\nvar isArray = _dereq_(54);\nvar SPECIES = _dereq_(125)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n},{\"125\":125,\"54\":54,\"56\":56}],22:[function(_dereq_,module,exports){\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = _dereq_(21);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n},{\"21\":21}],23:[function(_dereq_,module,exports){\n'use strict';\nvar aFunction = _dereq_(11);\nvar isObject = _dereq_(56);\nvar invoke = _dereq_(51);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n\n},{\"11\":11,\"51\":51,\"56\":56}],24:[function(_dereq_,module,exports){\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = _dereq_(25);\nvar TAG = _dereq_(125)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n},{\"125\":125,\"25\":25}],25:[function(_dereq_,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n},{}],26:[function(_dereq_,module,exports){\n'use strict';\nvar dP = _dereq_(74).f;\nvar create = _dereq_(73);\nvar redefineAll = _dereq_(92);\nvar ctx = _dereq_(31);\nvar anInstance = _dereq_(14);\nvar forOf = _dereq_(44);\nvar $iterDefine = _dereq_(60);\nvar step = _dereq_(62);\nvar setSpecies = _dereq_(96);\nvar DESCRIPTORS = _dereq_(35);\nvar fastKey = _dereq_(69).fastKey;\nvar validate = _dereq_(122);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n\n},{\"122\":122,\"14\":14,\"31\":31,\"35\":35,\"44\":44,\"60\":60,\"62\":62,\"69\":69,\"73\":73,\"74\":74,\"92\":92,\"96\":96}],27:[function(_dereq_,module,exports){\n'use strict';\nvar redefineAll = _dereq_(92);\nvar getWeak = _dereq_(69).getWeak;\nvar anObject = _dereq_(15);\nvar isObject = _dereq_(56);\nvar anInstance = _dereq_(14);\nvar forOf = _dereq_(44);\nvar createArrayMethod = _dereq_(19);\nvar $has = _dereq_(46);\nvar validate = _dereq_(122);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n\n},{\"122\":122,\"14\":14,\"15\":15,\"19\":19,\"44\":44,\"46\":46,\"56\":56,\"69\":69,\"92\":92}],28:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_(45);\nvar $export = _dereq_(39);\nvar redefine = _dereq_(93);\nvar redefineAll = _dereq_(92);\nvar meta = _dereq_(69);\nvar forOf = _dereq_(44);\nvar anInstance = _dereq_(14);\nvar isObject = _dereq_(56);\nvar fails = _dereq_(41);\nvar $iterDetect = _dereq_(61);\nvar setToStringTag = _dereq_(97);\nvar inheritIfRequired = _dereq_(50);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n\n},{\"14\":14,\"39\":39,\"41\":41,\"44\":44,\"45\":45,\"50\":50,\"56\":56,\"61\":61,\"69\":69,\"92\":92,\"93\":93,\"97\":97}],29:[function(_dereq_,module,exports){\nvar core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n},{}],30:[function(_dereq_,module,exports){\n'use strict';\nvar $defineProperty = _dereq_(74);\nvar createDesc = _dereq_(91);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n\n},{\"74\":74,\"91\":91}],31:[function(_dereq_,module,exports){\n// optional / simple context binding\nvar aFunction = _dereq_(11);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n},{\"11\":11}],32:[function(_dereq_,module,exports){\n'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = _dereq_(41);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n\n},{\"41\":41}],33:[function(_dereq_,module,exports){\n'use strict';\nvar anObject = _dereq_(15);\nvar toPrimitive = _dereq_(116);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n\n},{\"116\":116,\"15\":15}],34:[function(_dereq_,module,exports){\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n},{}],35:[function(_dereq_,module,exports){\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !_dereq_(41)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n},{\"41\":41}],36:[function(_dereq_,module,exports){\nvar isObject = _dereq_(56);\nvar document = _dereq_(45).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n},{\"45\":45,\"56\":56}],37:[function(_dereq_,module,exports){\n// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n},{}],38:[function(_dereq_,module,exports){\n// all enumerable object keys, includes symbols\nvar getKeys = _dereq_(82);\nvar gOPS = _dereq_(79);\nvar pIE = _dereq_(83);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n},{\"79\":79,\"82\":82,\"83\":83}],39:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar core = _dereq_(29);\nvar hide = _dereq_(47);\nvar redefine = _dereq_(93);\nvar ctx = _dereq_(31);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n},{\"29\":29,\"31\":31,\"45\":45,\"47\":47,\"93\":93}],40:[function(_dereq_,module,exports){\nvar MATCH = _dereq_(125)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n\n},{\"125\":125}],41:[function(_dereq_,module,exports){\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n},{}],42:[function(_dereq_,module,exports){\n'use strict';\nvar hide = _dereq_(47);\nvar redefine = _dereq_(93);\nvar fails = _dereq_(41);\nvar defined = _dereq_(34);\nvar wks = _dereq_(125);\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n\n},{\"125\":125,\"34\":34,\"41\":41,\"47\":47,\"93\":93}],43:[function(_dereq_,module,exports){\n'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = _dereq_(15);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n},{\"15\":15}],44:[function(_dereq_,module,exports){\nvar ctx = _dereq_(31);\nvar call = _dereq_(58);\nvar isArrayIter = _dereq_(53);\nvar anObject = _dereq_(15);\nvar toLength = _dereq_(114);\nvar getIterFn = _dereq_(126);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n},{\"114\":114,\"126\":126,\"15\":15,\"31\":31,\"53\":53,\"58\":58}],45:[function(_dereq_,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n},{}],46:[function(_dereq_,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n},{}],47:[function(_dereq_,module,exports){\nvar dP = _dereq_(74);\nvar createDesc = _dereq_(91);\nmodule.exports = _dereq_(35) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n},{\"35\":35,\"74\":74,\"91\":91}],48:[function(_dereq_,module,exports){\nvar document = _dereq_(45).document;\nmodule.exports = document && document.documentElement;\n\n},{\"45\":45}],49:[function(_dereq_,module,exports){\nmodule.exports = !_dereq_(35) && !_dereq_(41)(function () {\n return Object.defineProperty(_dereq_(36)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n},{\"35\":35,\"36\":36,\"41\":41}],50:[function(_dereq_,module,exports){\nvar isObject = _dereq_(56);\nvar setPrototypeOf = _dereq_(95).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n\n},{\"56\":56,\"95\":95}],51:[function(_dereq_,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n},{}],52:[function(_dereq_,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = _dereq_(25);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n},{\"25\":25}],53:[function(_dereq_,module,exports){\n// check on default Array iterator\nvar Iterators = _dereq_(63);\nvar ITERATOR = _dereq_(125)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n},{\"125\":125,\"63\":63}],54:[function(_dereq_,module,exports){\n// 7.2.2 IsArray(argument)\nvar cof = _dereq_(25);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n},{\"25\":25}],55:[function(_dereq_,module,exports){\n// 20.1.2.3 Number.isInteger(number)\nvar isObject = _dereq_(56);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n},{\"56\":56}],56:[function(_dereq_,module,exports){\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n},{}],57:[function(_dereq_,module,exports){\n// 7.2.8 IsRegExp(argument)\nvar isObject = _dereq_(56);\nvar cof = _dereq_(25);\nvar MATCH = _dereq_(125)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n},{\"125\":125,\"25\":25,\"56\":56}],58:[function(_dereq_,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = _dereq_(15);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n\n},{\"15\":15}],59:[function(_dereq_,module,exports){\n'use strict';\nvar create = _dereq_(73);\nvar descriptor = _dereq_(91);\nvar setToStringTag = _dereq_(97);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_dereq_(47)(IteratorPrototype, _dereq_(125)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n},{\"125\":125,\"47\":47,\"73\":73,\"91\":91,\"97\":97}],60:[function(_dereq_,module,exports){\n'use strict';\nvar LIBRARY = _dereq_(64);\nvar $export = _dereq_(39);\nvar redefine = _dereq_(93);\nvar hide = _dereq_(47);\nvar Iterators = _dereq_(63);\nvar $iterCreate = _dereq_(59);\nvar setToStringTag = _dereq_(97);\nvar getPrototypeOf = _dereq_(80);\nvar ITERATOR = _dereq_(125)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\n},{\"125\":125,\"39\":39,\"47\":47,\"59\":59,\"63\":63,\"64\":64,\"80\":80,\"93\":93,\"97\":97}],61:[function(_dereq_,module,exports){\nvar ITERATOR = _dereq_(125)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n},{\"125\":125}],62:[function(_dereq_,module,exports){\nmodule.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n},{}],63:[function(_dereq_,module,exports){\nmodule.exports = {};\n\n},{}],64:[function(_dereq_,module,exports){\nmodule.exports = false;\n\n},{}],65:[function(_dereq_,module,exports){\n// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n\n},{}],66:[function(_dereq_,module,exports){\n// 20.2.2.16 Math.fround(x)\nvar sign = _dereq_(68);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n\n},{\"68\":68}],67:[function(_dereq_,module,exports){\n// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n\n},{}],68:[function(_dereq_,module,exports){\n// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n\n},{}],69:[function(_dereq_,module,exports){\nvar META = _dereq_(120)('meta');\nvar isObject = _dereq_(56);\nvar has = _dereq_(46);\nvar setDesc = _dereq_(74).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !_dereq_(41)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n\n},{\"120\":120,\"41\":41,\"46\":46,\"56\":56,\"74\":74}],70:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar macrotask = _dereq_(109).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = _dereq_(25)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n},{\"109\":109,\"25\":25,\"45\":45}],71:[function(_dereq_,module,exports){\n'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = _dereq_(11);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n},{\"11\":11}],72:[function(_dereq_,module,exports){\n'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = _dereq_(82);\nvar gOPS = _dereq_(79);\nvar pIE = _dereq_(83);\nvar toObject = _dereq_(115);\nvar IObject = _dereq_(52);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || _dereq_(41)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n},{\"115\":115,\"41\":41,\"52\":52,\"79\":79,\"82\":82,\"83\":83}],73:[function(_dereq_,module,exports){\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = _dereq_(15);\nvar dPs = _dereq_(75);\nvar enumBugKeys = _dereq_(37);\nvar IE_PROTO = _dereq_(98)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _dereq_(36)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _dereq_(48).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n\n},{\"15\":15,\"36\":36,\"37\":37,\"48\":48,\"75\":75,\"98\":98}],74:[function(_dereq_,module,exports){\nvar anObject = _dereq_(15);\nvar IE8_DOM_DEFINE = _dereq_(49);\nvar toPrimitive = _dereq_(116);\nvar dP = Object.defineProperty;\n\nexports.f = _dereq_(35) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n},{\"116\":116,\"15\":15,\"35\":35,\"49\":49}],75:[function(_dereq_,module,exports){\nvar dP = _dereq_(74);\nvar anObject = _dereq_(15);\nvar getKeys = _dereq_(82);\n\nmodule.exports = _dereq_(35) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\n},{\"15\":15,\"35\":35,\"74\":74,\"82\":82}],76:[function(_dereq_,module,exports){\nvar pIE = _dereq_(83);\nvar createDesc = _dereq_(91);\nvar toIObject = _dereq_(113);\nvar toPrimitive = _dereq_(116);\nvar has = _dereq_(46);\nvar IE8_DOM_DEFINE = _dereq_(49);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = _dereq_(35) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n},{\"113\":113,\"116\":116,\"35\":35,\"46\":46,\"49\":49,\"83\":83,\"91\":91}],77:[function(_dereq_,module,exports){\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = _dereq_(113);\nvar gOPN = _dereq_(78).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n},{\"113\":113,\"78\":78}],78:[function(_dereq_,module,exports){\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = _dereq_(81);\nvar hiddenKeys = _dereq_(37).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n\n},{\"37\":37,\"81\":81}],79:[function(_dereq_,module,exports){\nexports.f = Object.getOwnPropertySymbols;\n\n},{}],80:[function(_dereq_,module,exports){\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = _dereq_(46);\nvar toObject = _dereq_(115);\nvar IE_PROTO = _dereq_(98)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\n},{\"115\":115,\"46\":46,\"98\":98}],81:[function(_dereq_,module,exports){\nvar has = _dereq_(46);\nvar toIObject = _dereq_(113);\nvar arrayIndexOf = _dereq_(18)(false);\nvar IE_PROTO = _dereq_(98)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n},{\"113\":113,\"18\":18,\"46\":46,\"98\":98}],82:[function(_dereq_,module,exports){\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = _dereq_(81);\nvar enumBugKeys = _dereq_(37);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n},{\"37\":37,\"81\":81}],83:[function(_dereq_,module,exports){\nexports.f = {}.propertyIsEnumerable;\n\n},{}],84:[function(_dereq_,module,exports){\n// most Object methods by ES6 should accept primitives\nvar $export = _dereq_(39);\nvar core = _dereq_(29);\nvar fails = _dereq_(41);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n},{\"29\":29,\"39\":39,\"41\":41}],85:[function(_dereq_,module,exports){\nvar getKeys = _dereq_(82);\nvar toIObject = _dereq_(113);\nvar isEnum = _dereq_(83).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n},{\"113\":113,\"82\":82,\"83\":83}],86:[function(_dereq_,module,exports){\n// all object keys, includes non-enumerable and symbols\nvar gOPN = _dereq_(78);\nvar gOPS = _dereq_(79);\nvar anObject = _dereq_(15);\nvar Reflect = _dereq_(45).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n},{\"15\":15,\"45\":45,\"78\":78,\"79\":79}],87:[function(_dereq_,module,exports){\nvar $parseFloat = _dereq_(45).parseFloat;\nvar $trim = _dereq_(107).trim;\n\nmodule.exports = 1 / $parseFloat(_dereq_(108) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n},{\"107\":107,\"108\":108,\"45\":45}],88:[function(_dereq_,module,exports){\nvar $parseInt = _dereq_(45).parseInt;\nvar $trim = _dereq_(107).trim;\nvar ws = _dereq_(108);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n\n},{\"107\":107,\"108\":108,\"45\":45}],89:[function(_dereq_,module,exports){\nmodule.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n},{}],90:[function(_dereq_,module,exports){\nvar anObject = _dereq_(15);\nvar isObject = _dereq_(56);\nvar newPromiseCapability = _dereq_(71);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n},{\"15\":15,\"56\":56,\"71\":71}],91:[function(_dereq_,module,exports){\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n},{}],92:[function(_dereq_,module,exports){\nvar redefine = _dereq_(93);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n\n},{\"93\":93}],93:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar hide = _dereq_(47);\nvar has = _dereq_(46);\nvar SRC = _dereq_(120)('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n_dereq_(29).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n},{\"120\":120,\"29\":29,\"45\":45,\"46\":46,\"47\":47}],94:[function(_dereq_,module,exports){\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n\n},{}],95:[function(_dereq_,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = _dereq_(56);\nvar anObject = _dereq_(15);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = _dereq_(31)(Function.call, _dereq_(76).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n},{\"15\":15,\"31\":31,\"56\":56,\"76\":76}],96:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_(45);\nvar dP = _dereq_(74);\nvar DESCRIPTORS = _dereq_(35);\nvar SPECIES = _dereq_(125)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n},{\"125\":125,\"35\":35,\"45\":45,\"74\":74}],97:[function(_dereq_,module,exports){\nvar def = _dereq_(74).f;\nvar has = _dereq_(46);\nvar TAG = _dereq_(125)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n},{\"125\":125,\"46\":46,\"74\":74}],98:[function(_dereq_,module,exports){\nvar shared = _dereq_(99)('keys');\nvar uid = _dereq_(120);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n},{\"120\":120,\"99\":99}],99:[function(_dereq_,module,exports){\nvar core = _dereq_(29);\nvar global = _dereq_(45);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: _dereq_(64) ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n\n},{\"29\":29,\"45\":45,\"64\":64}],100:[function(_dereq_,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = _dereq_(15);\nvar aFunction = _dereq_(11);\nvar SPECIES = _dereq_(125)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n},{\"11\":11,\"125\":125,\"15\":15}],101:[function(_dereq_,module,exports){\n'use strict';\nvar fails = _dereq_(41);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n\n},{\"41\":41}],102:[function(_dereq_,module,exports){\nvar toInteger = _dereq_(112);\nvar defined = _dereq_(34);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\n},{\"112\":112,\"34\":34}],103:[function(_dereq_,module,exports){\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = _dereq_(57);\nvar defined = _dereq_(34);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n\n},{\"34\":34,\"57\":57}],104:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar fails = _dereq_(41);\nvar defined = _dereq_(34);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n\n},{\"34\":34,\"39\":39,\"41\":41}],105:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = _dereq_(114);\nvar repeat = _dereq_(106);\nvar defined = _dereq_(34);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n\n},{\"106\":106,\"114\":114,\"34\":34}],106:[function(_dereq_,module,exports){\n'use strict';\nvar toInteger = _dereq_(112);\nvar defined = _dereq_(34);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n\n},{\"112\":112,\"34\":34}],107:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar defined = _dereq_(34);\nvar fails = _dereq_(41);\nvar spaces = _dereq_(108);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n\n},{\"108\":108,\"34\":34,\"39\":39,\"41\":41}],108:[function(_dereq_,module,exports){\nmodule.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n},{}],109:[function(_dereq_,module,exports){\nvar ctx = _dereq_(31);\nvar invoke = _dereq_(51);\nvar html = _dereq_(48);\nvar cel = _dereq_(36);\nvar global = _dereq_(45);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (_dereq_(25)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n},{\"25\":25,\"31\":31,\"36\":36,\"45\":45,\"48\":48,\"51\":51}],110:[function(_dereq_,module,exports){\nvar toInteger = _dereq_(112);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n},{\"112\":112}],111:[function(_dereq_,module,exports){\n// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = _dereq_(112);\nvar toLength = _dereq_(114);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n\n},{\"112\":112,\"114\":114}],112:[function(_dereq_,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n},{}],113:[function(_dereq_,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = _dereq_(52);\nvar defined = _dereq_(34);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n},{\"34\":34,\"52\":52}],114:[function(_dereq_,module,exports){\n// 7.1.15 ToLength\nvar toInteger = _dereq_(112);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n},{\"112\":112}],115:[function(_dereq_,module,exports){\n// 7.1.13 ToObject(argument)\nvar defined = _dereq_(34);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n},{\"34\":34}],116:[function(_dereq_,module,exports){\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = _dereq_(56);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n},{\"56\":56}],117:[function(_dereq_,module,exports){\n'use strict';\nif (_dereq_(35)) {\n var LIBRARY = _dereq_(64);\n var global = _dereq_(45);\n var fails = _dereq_(41);\n var $export = _dereq_(39);\n var $typed = _dereq_(119);\n var $buffer = _dereq_(118);\n var ctx = _dereq_(31);\n var anInstance = _dereq_(14);\n var propertyDesc = _dereq_(91);\n var hide = _dereq_(47);\n var redefineAll = _dereq_(92);\n var toInteger = _dereq_(112);\n var toLength = _dereq_(114);\n var toIndex = _dereq_(111);\n var toAbsoluteIndex = _dereq_(110);\n var toPrimitive = _dereq_(116);\n var has = _dereq_(46);\n var classof = _dereq_(24);\n var isObject = _dereq_(56);\n var toObject = _dereq_(115);\n var isArrayIter = _dereq_(53);\n var create = _dereq_(73);\n var getPrototypeOf = _dereq_(80);\n var gOPN = _dereq_(78).f;\n var getIterFn = _dereq_(126);\n var uid = _dereq_(120);\n var wks = _dereq_(125);\n var createArrayMethod = _dereq_(19);\n var createArrayIncludes = _dereq_(18);\n var speciesConstructor = _dereq_(100);\n var ArrayIterators = _dereq_(137);\n var Iterators = _dereq_(63);\n var $iterDetect = _dereq_(61);\n var setSpecies = _dereq_(96);\n var arrayFill = _dereq_(17);\n var arrayCopyWithin = _dereq_(16);\n var $DP = _dereq_(74);\n var $GOPD = _dereq_(76);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n\n},{\"100\":100,\"110\":110,\"111\":111,\"112\":112,\"114\":114,\"115\":115,\"116\":116,\"118\":118,\"119\":119,\"120\":120,\"125\":125,\"126\":126,\"137\":137,\"14\":14,\"16\":16,\"17\":17,\"18\":18,\"19\":19,\"24\":24,\"31\":31,\"35\":35,\"39\":39,\"41\":41,\"45\":45,\"46\":46,\"47\":47,\"53\":53,\"56\":56,\"61\":61,\"63\":63,\"64\":64,\"73\":73,\"74\":74,\"76\":76,\"78\":78,\"80\":80,\"91\":91,\"92\":92,\"96\":96}],118:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_(45);\nvar DESCRIPTORS = _dereq_(35);\nvar LIBRARY = _dereq_(64);\nvar $typed = _dereq_(119);\nvar hide = _dereq_(47);\nvar redefineAll = _dereq_(92);\nvar fails = _dereq_(41);\nvar anInstance = _dereq_(14);\nvar toInteger = _dereq_(112);\nvar toLength = _dereq_(114);\nvar toIndex = _dereq_(111);\nvar gOPN = _dereq_(78).f;\nvar dP = _dereq_(74).f;\nvar arrayFill = _dereq_(17);\nvar setToStringTag = _dereq_(97);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n\n},{\"111\":111,\"112\":112,\"114\":114,\"119\":119,\"14\":14,\"17\":17,\"35\":35,\"41\":41,\"45\":45,\"47\":47,\"64\":64,\"74\":74,\"78\":78,\"92\":92,\"97\":97}],119:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar hide = _dereq_(47);\nvar uid = _dereq_(120);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n\n},{\"120\":120,\"45\":45,\"47\":47}],120:[function(_dereq_,module,exports){\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n},{}],121:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n\n},{\"45\":45}],122:[function(_dereq_,module,exports){\nvar isObject = _dereq_(56);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n\n},{\"56\":56}],123:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar core = _dereq_(29);\nvar LIBRARY = _dereq_(64);\nvar wksExt = _dereq_(124);\nvar defineProperty = _dereq_(74).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n},{\"124\":124,\"29\":29,\"45\":45,\"64\":64,\"74\":74}],124:[function(_dereq_,module,exports){\nexports.f = _dereq_(125);\n\n},{\"125\":125}],125:[function(_dereq_,module,exports){\nvar store = _dereq_(99)('wks');\nvar uid = _dereq_(120);\nvar Symbol = _dereq_(45).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n},{\"120\":120,\"45\":45,\"99\":99}],126:[function(_dereq_,module,exports){\nvar classof = _dereq_(24);\nvar ITERATOR = _dereq_(125)('iterator');\nvar Iterators = _dereq_(63);\nmodule.exports = _dereq_(29).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n},{\"125\":125,\"24\":24,\"29\":29,\"63\":63}],127:[function(_dereq_,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = _dereq_(39);\n\n$export($export.P, 'Array', { copyWithin: _dereq_(16) });\n\n_dereq_(13)('copyWithin');\n\n},{\"13\":13,\"16\":16,\"39\":39}],128:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $every = _dereq_(19)(4);\n\n$export($export.P + $export.F * !_dereq_(101)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n\n},{\"101\":101,\"19\":19,\"39\":39}],129:[function(_dereq_,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = _dereq_(39);\n\n$export($export.P, 'Array', { fill: _dereq_(17) });\n\n_dereq_(13)('fill');\n\n},{\"13\":13,\"17\":17,\"39\":39}],130:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $filter = _dereq_(19)(2);\n\n$export($export.P + $export.F * !_dereq_(101)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n\n},{\"101\":101,\"19\":19,\"39\":39}],131:[function(_dereq_,module,exports){\n'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = _dereq_(39);\nvar $find = _dereq_(19)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_dereq_(13)(KEY);\n\n},{\"13\":13,\"19\":19,\"39\":39}],132:[function(_dereq_,module,exports){\n'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = _dereq_(39);\nvar $find = _dereq_(19)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_dereq_(13)(KEY);\n\n},{\"13\":13,\"19\":19,\"39\":39}],133:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $forEach = _dereq_(19)(0);\nvar STRICT = _dereq_(101)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n\n},{\"101\":101,\"19\":19,\"39\":39}],134:[function(_dereq_,module,exports){\n'use strict';\nvar ctx = _dereq_(31);\nvar $export = _dereq_(39);\nvar toObject = _dereq_(115);\nvar call = _dereq_(58);\nvar isArrayIter = _dereq_(53);\nvar toLength = _dereq_(114);\nvar createProperty = _dereq_(30);\nvar getIterFn = _dereq_(126);\n\n$export($export.S + $export.F * !_dereq_(61)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\n},{\"114\":114,\"115\":115,\"126\":126,\"30\":30,\"31\":31,\"39\":39,\"53\":53,\"58\":58,\"61\":61}],135:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $indexOf = _dereq_(18)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !_dereq_(101)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n\n},{\"101\":101,\"18\":18,\"39\":39}],136:[function(_dereq_,module,exports){\n// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Array', { isArray: _dereq_(54) });\n\n},{\"39\":39,\"54\":54}],137:[function(_dereq_,module,exports){\n'use strict';\nvar addToUnscopables = _dereq_(13);\nvar step = _dereq_(62);\nvar Iterators = _dereq_(63);\nvar toIObject = _dereq_(113);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = _dereq_(60)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n},{\"113\":113,\"13\":13,\"60\":60,\"62\":62,\"63\":63}],138:[function(_dereq_,module,exports){\n'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = _dereq_(39);\nvar toIObject = _dereq_(113);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (_dereq_(52) != Object || !_dereq_(101)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n\n},{\"101\":101,\"113\":113,\"39\":39,\"52\":52}],139:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar toIObject = _dereq_(113);\nvar toInteger = _dereq_(112);\nvar toLength = _dereq_(114);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !_dereq_(101)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n\n},{\"101\":101,\"112\":112,\"113\":113,\"114\":114,\"39\":39}],140:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $map = _dereq_(19)(1);\n\n$export($export.P + $export.F * !_dereq_(101)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n\n},{\"101\":101,\"19\":19,\"39\":39}],141:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar createProperty = _dereq_(30);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * _dereq_(41)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n\n},{\"30\":30,\"39\":39,\"41\":41}],142:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $reduce = _dereq_(20);\n\n$export($export.P + $export.F * !_dereq_(101)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n\n},{\"101\":101,\"20\":20,\"39\":39}],143:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $reduce = _dereq_(20);\n\n$export($export.P + $export.F * !_dereq_(101)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n\n},{\"101\":101,\"20\":20,\"39\":39}],144:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar html = _dereq_(48);\nvar cof = _dereq_(25);\nvar toAbsoluteIndex = _dereq_(110);\nvar toLength = _dereq_(114);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * _dereq_(41)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n\n},{\"110\":110,\"114\":114,\"25\":25,\"39\":39,\"41\":41,\"48\":48}],145:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $some = _dereq_(19)(3);\n\n$export($export.P + $export.F * !_dereq_(101)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n\n},{\"101\":101,\"19\":19,\"39\":39}],146:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar aFunction = _dereq_(11);\nvar toObject = _dereq_(115);\nvar fails = _dereq_(41);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !_dereq_(101)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n\n},{\"101\":101,\"11\":11,\"115\":115,\"39\":39,\"41\":41}],147:[function(_dereq_,module,exports){\n_dereq_(96)('Array');\n\n},{\"96\":96}],148:[function(_dereq_,module,exports){\n// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = _dereq_(39);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n\n},{\"39\":39}],149:[function(_dereq_,module,exports){\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = _dereq_(39);\nvar toISOString = _dereq_(32);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n\n},{\"32\":32,\"39\":39}],150:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar toObject = _dereq_(115);\nvar toPrimitive = _dereq_(116);\n\n$export($export.P + $export.F * _dereq_(41)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n\n},{\"115\":115,\"116\":116,\"39\":39,\"41\":41}],151:[function(_dereq_,module,exports){\nvar TO_PRIMITIVE = _dereq_(125)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) _dereq_(47)(proto, TO_PRIMITIVE, _dereq_(33));\n\n},{\"125\":125,\"33\":33,\"47\":47}],152:[function(_dereq_,module,exports){\nvar DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n _dereq_(93)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n\n},{\"93\":93}],153:[function(_dereq_,module,exports){\n// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = _dereq_(39);\n\n$export($export.P, 'Function', { bind: _dereq_(23) });\n\n},{\"23\":23,\"39\":39}],154:[function(_dereq_,module,exports){\n'use strict';\nvar isObject = _dereq_(56);\nvar getPrototypeOf = _dereq_(80);\nvar HAS_INSTANCE = _dereq_(125)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) _dereq_(74).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n\n},{\"125\":125,\"56\":56,\"74\":74,\"80\":80}],155:[function(_dereq_,module,exports){\nvar dP = _dereq_(74).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || _dereq_(35) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n\n},{\"35\":35,\"74\":74}],156:[function(_dereq_,module,exports){\n'use strict';\nvar strong = _dereq_(26);\nvar validate = _dereq_(122);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = _dereq_(28)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n\n},{\"122\":122,\"26\":26,\"28\":28}],157:[function(_dereq_,module,exports){\n// 20.2.2.3 Math.acosh(x)\nvar $export = _dereq_(39);\nvar log1p = _dereq_(67);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n\n},{\"39\":39,\"67\":67}],158:[function(_dereq_,module,exports){\n// 20.2.2.5 Math.asinh(x)\nvar $export = _dereq_(39);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n\n},{\"39\":39}],159:[function(_dereq_,module,exports){\n// 20.2.2.7 Math.atanh(x)\nvar $export = _dereq_(39);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n\n},{\"39\":39}],160:[function(_dereq_,module,exports){\n// 20.2.2.9 Math.cbrt(x)\nvar $export = _dereq_(39);\nvar sign = _dereq_(68);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n\n},{\"39\":39,\"68\":68}],161:[function(_dereq_,module,exports){\n// 20.2.2.11 Math.clz32(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n\n},{\"39\":39}],162:[function(_dereq_,module,exports){\n// 20.2.2.12 Math.cosh(x)\nvar $export = _dereq_(39);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n\n},{\"39\":39}],163:[function(_dereq_,module,exports){\n// 20.2.2.14 Math.expm1(x)\nvar $export = _dereq_(39);\nvar $expm1 = _dereq_(65);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n\n},{\"39\":39,\"65\":65}],164:[function(_dereq_,module,exports){\n// 20.2.2.16 Math.fround(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', { fround: _dereq_(66) });\n\n},{\"39\":39,\"66\":66}],165:[function(_dereq_,module,exports){\n// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = _dereq_(39);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n\n},{\"39\":39}],166:[function(_dereq_,module,exports){\n// 20.2.2.18 Math.imul(x, y)\nvar $export = _dereq_(39);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * _dereq_(41)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n\n},{\"39\":39,\"41\":41}],167:[function(_dereq_,module,exports){\n// 20.2.2.21 Math.log10(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n\n},{\"39\":39}],168:[function(_dereq_,module,exports){\n// 20.2.2.20 Math.log1p(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', { log1p: _dereq_(67) });\n\n},{\"39\":39,\"67\":67}],169:[function(_dereq_,module,exports){\n// 20.2.2.22 Math.log2(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n\n},{\"39\":39}],170:[function(_dereq_,module,exports){\n// 20.2.2.28 Math.sign(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', { sign: _dereq_(68) });\n\n},{\"39\":39,\"68\":68}],171:[function(_dereq_,module,exports){\n// 20.2.2.30 Math.sinh(x)\nvar $export = _dereq_(39);\nvar expm1 = _dereq_(65);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * _dereq_(41)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n\n},{\"39\":39,\"41\":41,\"65\":65}],172:[function(_dereq_,module,exports){\n// 20.2.2.33 Math.tanh(x)\nvar $export = _dereq_(39);\nvar expm1 = _dereq_(65);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n\n},{\"39\":39,\"65\":65}],173:[function(_dereq_,module,exports){\n// 20.2.2.34 Math.trunc(x)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n\n},{\"39\":39}],174:[function(_dereq_,module,exports){\n'use strict';\nvar global = _dereq_(45);\nvar has = _dereq_(46);\nvar cof = _dereq_(25);\nvar inheritIfRequired = _dereq_(50);\nvar toPrimitive = _dereq_(116);\nvar fails = _dereq_(41);\nvar gOPN = _dereq_(78).f;\nvar gOPD = _dereq_(76).f;\nvar dP = _dereq_(74).f;\nvar $trim = _dereq_(107).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(_dereq_(73)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = _dereq_(35) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n _dereq_(93)(global, NUMBER, $Number);\n}\n\n},{\"107\":107,\"116\":116,\"25\":25,\"35\":35,\"41\":41,\"45\":45,\"46\":46,\"50\":50,\"73\":73,\"74\":74,\"76\":76,\"78\":78,\"93\":93}],175:[function(_dereq_,module,exports){\n// 20.1.2.1 Number.EPSILON\nvar $export = _dereq_(39);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n\n},{\"39\":39}],176:[function(_dereq_,module,exports){\n// 20.1.2.2 Number.isFinite(number)\nvar $export = _dereq_(39);\nvar _isFinite = _dereq_(45).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n\n},{\"39\":39,\"45\":45}],177:[function(_dereq_,module,exports){\n// 20.1.2.3 Number.isInteger(number)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Number', { isInteger: _dereq_(55) });\n\n},{\"39\":39,\"55\":55}],178:[function(_dereq_,module,exports){\n// 20.1.2.4 Number.isNaN(number)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n\n},{\"39\":39}],179:[function(_dereq_,module,exports){\n// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = _dereq_(39);\nvar isInteger = _dereq_(55);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n\n},{\"39\":39,\"55\":55}],180:[function(_dereq_,module,exports){\n// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = _dereq_(39);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n\n},{\"39\":39}],181:[function(_dereq_,module,exports){\n// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = _dereq_(39);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n\n},{\"39\":39}],182:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar $parseFloat = _dereq_(87);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n\n},{\"39\":39,\"87\":87}],183:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar $parseInt = _dereq_(88);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n\n},{\"39\":39,\"88\":88}],184:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar toInteger = _dereq_(112);\nvar aNumberValue = _dereq_(12);\nvar repeat = _dereq_(106);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !_dereq_(41)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n\n},{\"106\":106,\"112\":112,\"12\":12,\"39\":39,\"41\":41}],185:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $fails = _dereq_(41);\nvar aNumberValue = _dereq_(12);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n\n},{\"12\":12,\"39\":39,\"41\":41}],186:[function(_dereq_,module,exports){\n// 19.1.3.1 Object.assign(target, source)\nvar $export = _dereq_(39);\n\n$export($export.S + $export.F, 'Object', { assign: _dereq_(72) });\n\n},{\"39\":39,\"72\":72}],187:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: _dereq_(73) });\n\n},{\"39\":39,\"73\":73}],188:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !_dereq_(35), 'Object', { defineProperties: _dereq_(75) });\n\n},{\"35\":35,\"39\":39,\"75\":75}],189:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !_dereq_(35), 'Object', { defineProperty: _dereq_(74).f });\n\n},{\"35\":35,\"39\":39,\"74\":74}],190:[function(_dereq_,module,exports){\n// 19.1.2.5 Object.freeze(O)\nvar isObject = _dereq_(56);\nvar meta = _dereq_(69).onFreeze;\n\n_dereq_(84)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n\n},{\"56\":56,\"69\":69,\"84\":84}],191:[function(_dereq_,module,exports){\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = _dereq_(113);\nvar $getOwnPropertyDescriptor = _dereq_(76).f;\n\n_dereq_(84)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n\n},{\"113\":113,\"76\":76,\"84\":84}],192:[function(_dereq_,module,exports){\n// 19.1.2.7 Object.getOwnPropertyNames(O)\n_dereq_(84)('getOwnPropertyNames', function () {\n return _dereq_(77).f;\n});\n\n},{\"77\":77,\"84\":84}],193:[function(_dereq_,module,exports){\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = _dereq_(115);\nvar $getPrototypeOf = _dereq_(80);\n\n_dereq_(84)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n\n},{\"115\":115,\"80\":80,\"84\":84}],194:[function(_dereq_,module,exports){\n// 19.1.2.11 Object.isExtensible(O)\nvar isObject = _dereq_(56);\n\n_dereq_(84)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n\n},{\"56\":56,\"84\":84}],195:[function(_dereq_,module,exports){\n// 19.1.2.12 Object.isFrozen(O)\nvar isObject = _dereq_(56);\n\n_dereq_(84)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n\n},{\"56\":56,\"84\":84}],196:[function(_dereq_,module,exports){\n// 19.1.2.13 Object.isSealed(O)\nvar isObject = _dereq_(56);\n\n_dereq_(84)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n\n},{\"56\":56,\"84\":84}],197:[function(_dereq_,module,exports){\n// 19.1.3.10 Object.is(value1, value2)\nvar $export = _dereq_(39);\n$export($export.S, 'Object', { is: _dereq_(94) });\n\n},{\"39\":39,\"94\":94}],198:[function(_dereq_,module,exports){\n// 19.1.2.14 Object.keys(O)\nvar toObject = _dereq_(115);\nvar $keys = _dereq_(82);\n\n_dereq_(84)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n\n},{\"115\":115,\"82\":82,\"84\":84}],199:[function(_dereq_,module,exports){\n// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = _dereq_(56);\nvar meta = _dereq_(69).onFreeze;\n\n_dereq_(84)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\n},{\"56\":56,\"69\":69,\"84\":84}],200:[function(_dereq_,module,exports){\n// 19.1.2.17 Object.seal(O)\nvar isObject = _dereq_(56);\nvar meta = _dereq_(69).onFreeze;\n\n_dereq_(84)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n\n},{\"56\":56,\"69\":69,\"84\":84}],201:[function(_dereq_,module,exports){\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = _dereq_(39);\n$export($export.S, 'Object', { setPrototypeOf: _dereq_(95).set });\n\n},{\"39\":39,\"95\":95}],202:[function(_dereq_,module,exports){\n'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = _dereq_(24);\nvar test = {};\ntest[_dereq_(125)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n _dereq_(93)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n\n},{\"125\":125,\"24\":24,\"93\":93}],203:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar $parseFloat = _dereq_(87);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n\n},{\"39\":39,\"87\":87}],204:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar $parseInt = _dereq_(88);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n\n},{\"39\":39,\"88\":88}],205:[function(_dereq_,module,exports){\n'use strict';\nvar LIBRARY = _dereq_(64);\nvar global = _dereq_(45);\nvar ctx = _dereq_(31);\nvar classof = _dereq_(24);\nvar $export = _dereq_(39);\nvar isObject = _dereq_(56);\nvar aFunction = _dereq_(11);\nvar anInstance = _dereq_(14);\nvar forOf = _dereq_(44);\nvar speciesConstructor = _dereq_(100);\nvar task = _dereq_(109).set;\nvar microtask = _dereq_(70)();\nvar newPromiseCapabilityModule = _dereq_(71);\nvar perform = _dereq_(89);\nvar userAgent = _dereq_(121);\nvar promiseResolve = _dereq_(90);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[_dereq_(125)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = _dereq_(92)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n_dereq_(97)($Promise, PROMISE);\n_dereq_(96)(PROMISE);\nWrapper = _dereq_(29)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && _dereq_(61)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n},{\"100\":100,\"109\":109,\"11\":11,\"121\":121,\"125\":125,\"14\":14,\"24\":24,\"29\":29,\"31\":31,\"39\":39,\"44\":44,\"45\":45,\"56\":56,\"61\":61,\"64\":64,\"70\":70,\"71\":71,\"89\":89,\"90\":90,\"92\":92,\"96\":96,\"97\":97}],206:[function(_dereq_,module,exports){\n// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = _dereq_(39);\nvar aFunction = _dereq_(11);\nvar anObject = _dereq_(15);\nvar rApply = (_dereq_(45).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !_dereq_(41)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n\n},{\"11\":11,\"15\":15,\"39\":39,\"41\":41,\"45\":45}],207:[function(_dereq_,module,exports){\n// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = _dereq_(39);\nvar create = _dereq_(73);\nvar aFunction = _dereq_(11);\nvar anObject = _dereq_(15);\nvar isObject = _dereq_(56);\nvar fails = _dereq_(41);\nvar bind = _dereq_(23);\nvar rConstruct = (_dereq_(45).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n\n},{\"11\":11,\"15\":15,\"23\":23,\"39\":39,\"41\":41,\"45\":45,\"56\":56,\"73\":73}],208:[function(_dereq_,module,exports){\n// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = _dereq_(74);\nvar $export = _dereq_(39);\nvar anObject = _dereq_(15);\nvar toPrimitive = _dereq_(116);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * _dereq_(41)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n},{\"116\":116,\"15\":15,\"39\":39,\"41\":41,\"74\":74}],209:[function(_dereq_,module,exports){\n// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = _dereq_(39);\nvar gOPD = _dereq_(76).f;\nvar anObject = _dereq_(15);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n\n},{\"15\":15,\"39\":39,\"76\":76}],210:[function(_dereq_,module,exports){\n'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = _dereq_(39);\nvar anObject = _dereq_(15);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n_dereq_(59)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n\n},{\"15\":15,\"39\":39,\"59\":59}],211:[function(_dereq_,module,exports){\n// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = _dereq_(76);\nvar $export = _dereq_(39);\nvar anObject = _dereq_(15);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n\n},{\"15\":15,\"39\":39,\"76\":76}],212:[function(_dereq_,module,exports){\n// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = _dereq_(39);\nvar getProto = _dereq_(80);\nvar anObject = _dereq_(15);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n\n},{\"15\":15,\"39\":39,\"80\":80}],213:[function(_dereq_,module,exports){\n// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = _dereq_(76);\nvar getPrototypeOf = _dereq_(80);\nvar has = _dereq_(46);\nvar $export = _dereq_(39);\nvar isObject = _dereq_(56);\nvar anObject = _dereq_(15);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n\n},{\"15\":15,\"39\":39,\"46\":46,\"56\":56,\"76\":76,\"80\":80}],214:[function(_dereq_,module,exports){\n// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n\n},{\"39\":39}],215:[function(_dereq_,module,exports){\n// 26.1.10 Reflect.isExtensible(target)\nvar $export = _dereq_(39);\nvar anObject = _dereq_(15);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n\n},{\"15\":15,\"39\":39}],216:[function(_dereq_,module,exports){\n// 26.1.11 Reflect.ownKeys(target)\nvar $export = _dereq_(39);\n\n$export($export.S, 'Reflect', { ownKeys: _dereq_(86) });\n\n},{\"39\":39,\"86\":86}],217:[function(_dereq_,module,exports){\n// 26.1.12 Reflect.preventExtensions(target)\nvar $export = _dereq_(39);\nvar anObject = _dereq_(15);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n},{\"15\":15,\"39\":39}],218:[function(_dereq_,module,exports){\n// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = _dereq_(39);\nvar setProto = _dereq_(95);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n\n},{\"39\":39,\"95\":95}],219:[function(_dereq_,module,exports){\n// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = _dereq_(74);\nvar gOPD = _dereq_(76);\nvar getPrototypeOf = _dereq_(80);\nvar has = _dereq_(46);\nvar $export = _dereq_(39);\nvar createDesc = _dereq_(91);\nvar anObject = _dereq_(15);\nvar isObject = _dereq_(56);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n\n},{\"15\":15,\"39\":39,\"46\":46,\"56\":56,\"74\":74,\"76\":76,\"80\":80,\"91\":91}],220:[function(_dereq_,module,exports){\nvar global = _dereq_(45);\nvar inheritIfRequired = _dereq_(50);\nvar dP = _dereq_(74).f;\nvar gOPN = _dereq_(78).f;\nvar isRegExp = _dereq_(57);\nvar $flags = _dereq_(43);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (_dereq_(35) && (!CORRECT_NEW || _dereq_(41)(function () {\n re2[_dereq_(125)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n _dereq_(93)(global, 'RegExp', $RegExp);\n}\n\n_dereq_(96)('RegExp');\n\n},{\"125\":125,\"35\":35,\"41\":41,\"43\":43,\"45\":45,\"50\":50,\"57\":57,\"74\":74,\"78\":78,\"93\":93,\"96\":96}],221:[function(_dereq_,module,exports){\n// 21.2.5.3 get RegExp.prototype.flags()\nif (_dereq_(35) && /./g.flags != 'g') _dereq_(74).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: _dereq_(43)\n});\n\n},{\"35\":35,\"43\":43,\"74\":74}],222:[function(_dereq_,module,exports){\n// @@match logic\n_dereq_(42)('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n\n},{\"42\":42}],223:[function(_dereq_,module,exports){\n// @@replace logic\n_dereq_(42)('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n\n},{\"42\":42}],224:[function(_dereq_,module,exports){\n// @@search logic\n_dereq_(42)('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n\n},{\"42\":42}],225:[function(_dereq_,module,exports){\n// @@split logic\n_dereq_(42)('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = _dereq_(57);\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n\n},{\"42\":42,\"57\":57}],226:[function(_dereq_,module,exports){\n'use strict';\n_dereq_(221);\nvar anObject = _dereq_(15);\nvar $flags = _dereq_(43);\nvar DESCRIPTORS = _dereq_(35);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n _dereq_(93)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (_dereq_(41)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n\n},{\"15\":15,\"221\":221,\"35\":35,\"41\":41,\"43\":43,\"93\":93}],227:[function(_dereq_,module,exports){\n'use strict';\nvar strong = _dereq_(26);\nvar validate = _dereq_(122);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = _dereq_(28)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n\n},{\"122\":122,\"26\":26,\"28\":28}],228:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.2 String.prototype.anchor(name)\n_dereq_(104)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n\n},{\"104\":104}],229:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.3 String.prototype.big()\n_dereq_(104)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n\n},{\"104\":104}],230:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.4 String.prototype.blink()\n_dereq_(104)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n\n},{\"104\":104}],231:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.5 String.prototype.bold()\n_dereq_(104)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n\n},{\"104\":104}],232:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $at = _dereq_(102)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n\n},{\"102\":102,\"39\":39}],233:[function(_dereq_,module,exports){\n// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = _dereq_(39);\nvar toLength = _dereq_(114);\nvar context = _dereq_(103);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * _dereq_(40)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n\n},{\"103\":103,\"114\":114,\"39\":39,\"40\":40}],234:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.6 String.prototype.fixed()\n_dereq_(104)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n\n},{\"104\":104}],235:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\n_dereq_(104)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n\n},{\"104\":104}],236:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\n_dereq_(104)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n\n},{\"104\":104}],237:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar toAbsoluteIndex = _dereq_(110);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n\n},{\"110\":110,\"39\":39}],238:[function(_dereq_,module,exports){\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = _dereq_(39);\nvar context = _dereq_(103);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * _dereq_(40)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n},{\"103\":103,\"39\":39,\"40\":40}],239:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.9 String.prototype.italics()\n_dereq_(104)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n\n},{\"104\":104}],240:[function(_dereq_,module,exports){\n'use strict';\nvar $at = _dereq_(102)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_dereq_(60)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\n},{\"102\":102,\"60\":60}],241:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.10 String.prototype.link(url)\n_dereq_(104)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n\n},{\"104\":104}],242:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar toIObject = _dereq_(113);\nvar toLength = _dereq_(114);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n\n},{\"113\":113,\"114\":114,\"39\":39}],243:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: _dereq_(106)\n});\n\n},{\"106\":106,\"39\":39}],244:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.11 String.prototype.small()\n_dereq_(104)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n\n},{\"104\":104}],245:[function(_dereq_,module,exports){\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = _dereq_(39);\nvar toLength = _dereq_(114);\nvar context = _dereq_(103);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * _dereq_(40)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\n},{\"103\":103,\"114\":114,\"39\":39,\"40\":40}],246:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.12 String.prototype.strike()\n_dereq_(104)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n\n},{\"104\":104}],247:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.13 String.prototype.sub()\n_dereq_(104)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n\n},{\"104\":104}],248:[function(_dereq_,module,exports){\n'use strict';\n// B.2.3.14 String.prototype.sup()\n_dereq_(104)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n\n},{\"104\":104}],249:[function(_dereq_,module,exports){\n'use strict';\n// 21.1.3.25 String.prototype.trim()\n_dereq_(107)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n\n},{\"107\":107}],250:[function(_dereq_,module,exports){\n'use strict';\n// ECMAScript 6 symbols shim\nvar global = _dereq_(45);\nvar has = _dereq_(46);\nvar DESCRIPTORS = _dereq_(35);\nvar $export = _dereq_(39);\nvar redefine = _dereq_(93);\nvar META = _dereq_(69).KEY;\nvar $fails = _dereq_(41);\nvar shared = _dereq_(99);\nvar setToStringTag = _dereq_(97);\nvar uid = _dereq_(120);\nvar wks = _dereq_(125);\nvar wksExt = _dereq_(124);\nvar wksDefine = _dereq_(123);\nvar enumKeys = _dereq_(38);\nvar isArray = _dereq_(54);\nvar anObject = _dereq_(15);\nvar isObject = _dereq_(56);\nvar toIObject = _dereq_(113);\nvar toPrimitive = _dereq_(116);\nvar createDesc = _dereq_(91);\nvar _create = _dereq_(73);\nvar gOPNExt = _dereq_(77);\nvar $GOPD = _dereq_(76);\nvar $DP = _dereq_(74);\nvar $keys = _dereq_(82);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n _dereq_(78).f = gOPNExt.f = $getOwnPropertyNames;\n _dereq_(83).f = $propertyIsEnumerable;\n _dereq_(79).f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !_dereq_(64)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || _dereq_(47)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n},{\"113\":113,\"116\":116,\"120\":120,\"123\":123,\"124\":124,\"125\":125,\"15\":15,\"35\":35,\"38\":38,\"39\":39,\"41\":41,\"45\":45,\"46\":46,\"47\":47,\"54\":54,\"56\":56,\"64\":64,\"69\":69,\"73\":73,\"74\":74,\"76\":76,\"77\":77,\"78\":78,\"79\":79,\"82\":82,\"83\":83,\"91\":91,\"93\":93,\"97\":97,\"99\":99}],251:[function(_dereq_,module,exports){\n'use strict';\nvar $export = _dereq_(39);\nvar $typed = _dereq_(119);\nvar buffer = _dereq_(118);\nvar anObject = _dereq_(15);\nvar toAbsoluteIndex = _dereq_(110);\nvar toLength = _dereq_(114);\nvar isObject = _dereq_(56);\nvar ArrayBuffer = _dereq_(45).ArrayBuffer;\nvar speciesConstructor = _dereq_(100);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * _dereq_(41)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n_dereq_(96)(ARRAY_BUFFER);\n\n},{\"100\":100,\"110\":110,\"114\":114,\"118\":118,\"119\":119,\"15\":15,\"39\":39,\"41\":41,\"45\":45,\"56\":56,\"96\":96}],252:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\n$export($export.G + $export.W + $export.F * !_dereq_(119).ABV, {\n DataView: _dereq_(118).DataView\n});\n\n},{\"118\":118,\"119\":119,\"39\":39}],253:[function(_dereq_,module,exports){\n_dereq_(117)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],254:[function(_dereq_,module,exports){\n_dereq_(117)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],255:[function(_dereq_,module,exports){\n_dereq_(117)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],256:[function(_dereq_,module,exports){\n_dereq_(117)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],257:[function(_dereq_,module,exports){\n_dereq_(117)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],258:[function(_dereq_,module,exports){\n_dereq_(117)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],259:[function(_dereq_,module,exports){\n_dereq_(117)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],260:[function(_dereq_,module,exports){\n_dereq_(117)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n},{\"117\":117}],261:[function(_dereq_,module,exports){\n_dereq_(117)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n\n},{\"117\":117}],262:[function(_dereq_,module,exports){\n'use strict';\nvar each = _dereq_(19)(0);\nvar redefine = _dereq_(93);\nvar meta = _dereq_(69);\nvar assign = _dereq_(72);\nvar weak = _dereq_(27);\nvar isObject = _dereq_(56);\nvar fails = _dereq_(41);\nvar validate = _dereq_(122);\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = _dereq_(28)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n\n},{\"122\":122,\"19\":19,\"27\":27,\"28\":28,\"41\":41,\"56\":56,\"69\":69,\"72\":72,\"93\":93}],263:[function(_dereq_,module,exports){\n'use strict';\nvar weak = _dereq_(27);\nvar validate = _dereq_(122);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n_dereq_(28)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n\n},{\"122\":122,\"27\":27,\"28\":28}],264:[function(_dereq_,module,exports){\n'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = _dereq_(39);\nvar $includes = _dereq_(18)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n_dereq_(13)('includes');\n\n},{\"13\":13,\"18\":18,\"39\":39}],265:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = _dereq_(39);\nvar $entries = _dereq_(85)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n},{\"39\":39,\"85\":85}],266:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = _dereq_(39);\nvar ownKeys = _dereq_(86);\nvar toIObject = _dereq_(113);\nvar gOPD = _dereq_(76);\nvar createProperty = _dereq_(30);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n\n},{\"113\":113,\"30\":30,\"39\":39,\"76\":76,\"86\":86}],267:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = _dereq_(39);\nvar $values = _dereq_(85)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n},{\"39\":39,\"85\":85}],268:[function(_dereq_,module,exports){\n// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = _dereq_(39);\nvar core = _dereq_(29);\nvar global = _dereq_(45);\nvar speciesConstructor = _dereq_(100);\nvar promiseResolve = _dereq_(90);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n},{\"100\":100,\"29\":29,\"39\":39,\"45\":45,\"90\":90}],269:[function(_dereq_,module,exports){\n'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = _dereq_(39);\nvar $pad = _dereq_(105);\nvar userAgent = _dereq_(121);\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n\n},{\"105\":105,\"121\":121,\"39\":39}],270:[function(_dereq_,module,exports){\n'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = _dereq_(39);\nvar $pad = _dereq_(105);\nvar userAgent = _dereq_(121);\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n\n},{\"105\":105,\"121\":121,\"39\":39}],271:[function(_dereq_,module,exports){\n_dereq_(123)('asyncIterator');\n\n},{\"123\":123}],272:[function(_dereq_,module,exports){\nvar $iterators = _dereq_(137);\nvar getKeys = _dereq_(82);\nvar redefine = _dereq_(93);\nvar global = _dereq_(45);\nvar hide = _dereq_(47);\nvar Iterators = _dereq_(63);\nvar wks = _dereq_(125);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n\n},{\"125\":125,\"137\":137,\"45\":45,\"47\":47,\"63\":63,\"82\":82,\"93\":93}],273:[function(_dereq_,module,exports){\nvar $export = _dereq_(39);\nvar $task = _dereq_(109);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n\n},{\"109\":109,\"39\":39}],274:[function(_dereq_,module,exports){\n// ie9- setTimeout & setInterval additional parameters fix\nvar global = _dereq_(45);\nvar $export = _dereq_(39);\nvar userAgent = _dereq_(121);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n\n},{\"121\":121,\"39\":39,\"45\":45}],275:[function(_dereq_,module,exports){\n_dereq_(274);\n_dereq_(273);\n_dereq_(272);\nmodule.exports = _dereq_(29);\n\n},{\"272\":272,\"273\":273,\"274\":274,\"29\":29}],276:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() { return this })() || Function(\"return this\")()\n);\n\n},{}]},{},[1]);\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){\"use strict\";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function u(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return\"number\"==typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n>>0,s=0;sDe(e)?(r=e+1,o-De(e)):(r=e,o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I(\"w\",[\"ww\",2],\"wo\",\"week\"),I(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),H(\"week\",\"w\"),H(\"isoWeek\",\"W\"),L(\"week\",5),L(\"isoWeek\",5),ue(\"w\",B),ue(\"ww\",B,z),ue(\"W\",B),ue(\"WW\",B,z),fe([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I(\"d\",0,\"do\",\"day\"),I(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),I(\"e\",0,0,\"weekday\"),I(\"E\",0,0,\"isoWeekday\"),H(\"day\",\"d\"),H(\"weekday\",\"e\"),H(\"isoWeekday\",\"E\"),L(\"day\",11),L(\"weekday\",11),L(\"isoWeekday\",11),ue(\"d\",B),ue(\"e\",B),ue(\"E\",B),ue(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),ue(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),ue(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),fe([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=k(e)});var je=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\");var Ze=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\");var ze=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,\"\"),i=this.weekdaysShort(n,\"\"),r=this.weekdays(n,\"\"),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp(\"^(\"+l.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+u.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I(\"H\",[\"HH\",2],0,\"hour\"),I(\"h\",[\"hh\",2],0,Qe),I(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),I(\"hmm\",0,0,function(){return\"\"+Qe.apply(this)+U(this.minutes(),2)}),I(\"hmmss\",0,0,function(){return\"\"+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I(\"Hmm\",0,0,function(){return\"\"+this.hours()+U(this.minutes(),2)}),I(\"Hmmss\",0,0,function(){return\"\"+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe(\"a\",!0),Xe(\"A\",!1),H(\"hour\",\"h\"),L(\"hour\",13),ue(\"a\",Ke),ue(\"A\",Ke),ue(\"H\",B),ue(\"h\",B),ue(\"k\",B),ue(\"HH\",B,z),ue(\"hh\",B,z),ue(\"kk\",B,z),ue(\"hmm\",Q),ue(\"hmmss\",X),ue(\"Hmm\",Q),ue(\"Hmmss\",X),ce([\"H\",\"HH\"],ge),ce([\"k\",\"kk\"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce([\"h\",\"hh\"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce(\"hmm\",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce(\"hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce(\"Hmm\",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce(\"Hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te(\"Hours\",!0),nt={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\\.?m?\\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace(\"_\",\"-\"):e}function at(e){var t=null;if(!st[e]&&\"undefined\"!=typeof module&&module&&module.exports)try{t=et._abbr,require(\"./locale/\"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),et._abbr}function ut(e,t){if(null===t)return delete st[e],null;var n,s=nt;if(t.abbr=e,null!=st[e])T(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11Pe(n[me],n[_e])?ye:n[ge]<0||24Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,mt=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,_t=/Z|[+-]\\d\\d(?::?\\d\\d)?/,yt=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/]],gt=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],pt=/^\\/?Date\\((\\-?\\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},ln.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},ln.dates=n(\"dates accessor is deprecated. Use date instead.\",nn),ln.months=n(\"months accessor is deprecated. Use month instead\",Fe),ln.years=n(\"years accessor is deprecated. Use year instead\",Oe),ln.zone=n(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(e,t){return null!=e?(\"string\"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0= 2.6.0. You are using Moment.js \"+c.version+\". See momentjs.com\"),M.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var i,e=+a,r=this.untils;for(i=0;i= 2.9.0. You are using Moment.js \"+c.version+\".\"),c.defaultZone=a?_(a):null,c};var v=c.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(v)?(v.push(\"_z\"),v.push(\"_a\")):v&&(v._z=null),C({version:\"2021e\",zones:[\"Africa/Abidjan|GMT|0|0||48e5\",\"Africa/Nairobi|EAT|-30|0||47e5\",\"Africa/Algiers|CET|-10|0||26e5\",\"Africa/Lagos|WAT|-10|0||17e6\",\"Africa/Maputo|CAT|-20|0||26e5\",\"Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0|32e5\",\"Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6\",\"Africa/Johannesburg|SAST|-20|0||84e5\",\"Africa/Juba|EAT CAT|-30 -20|01|24nx0|\",\"Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5\",\"Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|\",\"Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5\",\"Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4\",\"America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326\",\"America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4\",\"America/Santo_Domingo|AST|40|0||29e5\",\"America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4\",\"America/Fortaleza|-03|30|0||34e5\",\"America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5\",\"America/Panama|EST|50|0||15e5\",\"America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6\",\"America/Bahia|-02 -03|20 30|01|1GCq0|27e5\",\"America/Managua|CST|60|0||22e5\",\"America/La_Paz|-04|40|0||19e5\",\"America/Lima|-05|50|0||11e6\",\"America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5\",\"America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4\",\"America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5\",\"America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4\",\"America/Phoenix|MST|70|0||42e5\",\"America/Whitehorse|PST PDT MST|80 70 70|0101010101010101012|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3\",\"America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6\",\"America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4\",\"America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6\",\"America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4\",\"America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3\",\"America/Grand_Turk|EST EDT AST|50 40 40|010101021010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2\",\"America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5\",\"America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2\",\"America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2\",\"America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Noronha|-02|20|0||30e2\",\"America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5\",\"Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40\",\"America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|62e5\",\"America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6\",\"Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4\",\"America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4\",\"Antarctica/Casey|+11 +08|-b0 -80|010101010|1GAF0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10\",\"Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70\",\"Pacific/Port_Moresby|+10|-a0|0||25e4\",\"Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Asia/Tashkent|+05|-50|0||23e5\",\"Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5\",\"Asia/Baghdad|+03|-30|0||66e5\",\"Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40\",\"Asia/Dhaka|+06|-60|0||16e6\",\"Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5\",\"Asia/Kamchatka|+12|-c0|0||18e4\",\"Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|+07|-70|0||15e6\",\"Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|\",\"Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5\",\"Asia/Kuala_Lumpur|+08|-80|0||71e5\",\"Asia/Kolkata|IST|-5u|0||15e6\",\"Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4\",\"Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Shanghai|CST|-80|0||23e6\",\"Asia/Colombo|+0530|-5u|0||22e5\",\"Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|+09|-90|0||19e4\",\"Asia/Dubai|+04|-40|0||39e5\",\"Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 Xc0 1qo0|18e5\",\"Asia/Hong_Kong|HKT|-80|0||73e5\",\"Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4\",\"Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|WIB|-70|0||31e6\",\"Asia/Jayapura|WIT|-90|0||26e4\",\"Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4\",\"Asia/Kabul|+0430|-4u|0||46e5\",\"Asia/Karachi|PKT|-50|0||24e6\",\"Asia/Kathmandu|+0545|-5J|0||12e5\",\"Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4\",\"Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5\",\"Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3\",\"Asia/Makassar|WITA|-80|0||15e5\",\"Asia/Manila|PST|-80|0||24e6\",\"Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5\",\"Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5\",\"Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5\",\"Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5\",\"Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4\",\"Asia/Rangoon|+0630|-6u|0||48e5\",\"Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4\",\"Asia/Seoul|KST|-90|0||23e6\",\"Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2\",\"Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6\",\"Asia/Tokyo|JST|-90|0||38e6\",\"Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5\",\"Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4\",\"Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5\",\"Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5\",\"Atlantic/Cape_Verde|-01|10|0||50e4\",\"Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST|-a0|0||20e5\",\"Australia/Darwin|ACST|-9u|0||12e4\",\"Australia/Eucla|+0845|-8J|0||368\",\"Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Perth|AWST|-80|0||18e5\",\"Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|30e2\",\"Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5\",\"Etc/GMT-1|+01|-10|0||\",\"Pacific/Guadalcanal|+11|-b0|0||11e4\",\"Pacific/Fakaofo|+13|-d0|0||483\",\"Pacific/Kiritimati|+14|-e0|0||51e2\",\"Etc/GMT-2|+02|-20|0||\",\"Pacific/Tahiti|-10|a0|0||18e4\",\"Pacific/Niue|-11|b0|0||12e2\",\"Etc/GMT+12|-12|c0|0||\",\"Pacific/Galapagos|-06|60|0||25e3\",\"Etc/GMT+7|-07|70|0||\",\"Pacific/Pitcairn|-08|80|0||56\",\"Pacific/Gambier|-09|90|0||125\",\"Etc/UTC|UTC|0|0||\",\"Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5\",\"Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6\",\"Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4\",\"Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4\",\"Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4\",\"Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6\",\"Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|\",\"Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Volgograd|+04 +03|-40 -30|0101|1N7y0 9Jd0 5gn0|10e5\",\"Pacific/Honolulu|HST|a0|0||37e4\",\"MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|\",\"Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600\",\"Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3\",\"Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4\",\"Pacific/Fiji|+13 +12|-d0 -c0|010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0 4q00|88e4\",\"Pacific/Guam|ChST|-a0|0||17e4\",\"Pacific/Marquesas|-0930|9u|0||86e2\",\"Pacific/Pago_Pago|SST|b0|0||37e2\",\"Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4\",\"Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3\"],links:[\"Africa/Abidjan|Africa/Accra\",\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Bissau\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Monrovia\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|America/Danmarkshavn\",\"Africa/Abidjan|Atlantic/Reykjavik\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Abidjan|Etc/GMT\",\"Africa/Abidjan|Etc/GMT+0\",\"Africa/Abidjan|Etc/GMT-0\",\"Africa/Abidjan|Etc/GMT0\",\"Africa/Abidjan|Etc/Greenwich\",\"Africa/Abidjan|GMT\",\"Africa/Abidjan|GMT+0\",\"Africa/Abidjan|GMT-0\",\"Africa/Abidjan|GMT0\",\"Africa/Abidjan|Greenwich\",\"Africa/Abidjan|Iceland\",\"Africa/Algiers|Africa/Tunis\",\"Africa/Cairo|Egypt\",\"Africa/Casablanca|Africa/El_Aaiun\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Ndjamena\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|America/Juneau\",\"America/Anchorage|America/Nome\",\"America/Anchorage|America/Sitka\",\"America/Anchorage|America/Yakutat\",\"America/Anchorage|US/Alaska\",\"America/Campo_Grande|America/Cuiaba\",\"America/Chicago|America/Indiana/Knox\",\"America/Chicago|America/Indiana/Tell_City\",\"America/Chicago|America/Knox_IN\",\"America/Chicago|America/Matamoros\",\"America/Chicago|America/Menominee\",\"America/Chicago|America/North_Dakota/Beulah\",\"America/Chicago|America/North_Dakota/Center\",\"America/Chicago|America/North_Dakota/New_Salem\",\"America/Chicago|America/Rainy_River\",\"America/Chicago|America/Rankin_Inlet\",\"America/Chicago|America/Resolute\",\"America/Chicago|America/Winnipeg\",\"America/Chicago|CST6CDT\",\"America/Chicago|Canada/Central\",\"America/Chicago|US/Central\",\"America/Chicago|US/Indiana-Starke\",\"America/Chihuahua|America/Mazatlan\",\"America/Chihuahua|Mexico/BajaSur\",\"America/Denver|America/Boise\",\"America/Denver|America/Cambridge_Bay\",\"America/Denver|America/Edmonton\",\"America/Denver|America/Inuvik\",\"America/Denver|America/Ojinaga\",\"America/Denver|America/Shiprock\",\"America/Denver|America/Yellowknife\",\"America/Denver|Canada/Mountain\",\"America/Denver|MST7MDT\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Fortaleza|America/Argentina/Buenos_Aires\",\"America/Fortaleza|America/Argentina/Catamarca\",\"America/Fortaleza|America/Argentina/ComodRivadavia\",\"America/Fortaleza|America/Argentina/Cordoba\",\"America/Fortaleza|America/Argentina/Jujuy\",\"America/Fortaleza|America/Argentina/La_Rioja\",\"America/Fortaleza|America/Argentina/Mendoza\",\"America/Fortaleza|America/Argentina/Rio_Gallegos\",\"America/Fortaleza|America/Argentina/Salta\",\"America/Fortaleza|America/Argentina/San_Juan\",\"America/Fortaleza|America/Argentina/San_Luis\",\"America/Fortaleza|America/Argentina/Tucuman\",\"America/Fortaleza|America/Argentina/Ushuaia\",\"America/Fortaleza|America/Belem\",\"America/Fortaleza|America/Buenos_Aires\",\"America/Fortaleza|America/Catamarca\",\"America/Fortaleza|America/Cayenne\",\"America/Fortaleza|America/Cordoba\",\"America/Fortaleza|America/Jujuy\",\"America/Fortaleza|America/Maceio\",\"America/Fortaleza|America/Mendoza\",\"America/Fortaleza|America/Paramaribo\",\"America/Fortaleza|America/Recife\",\"America/Fortaleza|America/Rosario\",\"America/Fortaleza|America/Santarem\",\"America/Fortaleza|Antarctica/Rothera\",\"America/Fortaleza|Atlantic/Stanley\",\"America/Fortaleza|Etc/GMT+3\",\"America/Godthab|America/Nuuk\",\"America/Halifax|America/Glace_Bay\",\"America/Halifax|America/Goose_Bay\",\"America/Halifax|America/Moncton\",\"America/Halifax|America/Thule\",\"America/Halifax|Atlantic/Bermuda\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/La_Paz|America/Boa_Vista\",\"America/La_Paz|America/Guyana\",\"America/La_Paz|America/Manaus\",\"America/La_Paz|America/Porto_Velho\",\"America/La_Paz|Brazil/West\",\"America/La_Paz|Etc/GMT+4\",\"America/Lima|America/Bogota\",\"America/Lima|America/Guayaquil\",\"America/Lima|Etc/GMT+5\",\"America/Los_Angeles|America/Ensenada\",\"America/Los_Angeles|America/Santa_Isabel\",\"America/Los_Angeles|America/Tijuana\",\"America/Los_Angeles|America/Vancouver\",\"America/Los_Angeles|Canada/Pacific\",\"America/Los_Angeles|Mexico/BajaNorte\",\"America/Los_Angeles|PST8PDT\",\"America/Los_Angeles|US/Pacific\",\"America/Managua|America/Belize\",\"America/Managua|America/Costa_Rica\",\"America/Managua|America/El_Salvador\",\"America/Managua|America/Guatemala\",\"America/Managua|America/Regina\",\"America/Managua|America/Swift_Current\",\"America/Managua|America/Tegucigalpa\",\"America/Managua|Canada/Saskatchewan\",\"America/Mexico_City|America/Bahia_Banderas\",\"America/Mexico_City|America/Merida\",\"America/Mexico_City|America/Monterrey\",\"America/Mexico_City|Mexico/General\",\"America/New_York|America/Detroit\",\"America/New_York|America/Fort_Wayne\",\"America/New_York|America/Indiana/Indianapolis\",\"America/New_York|America/Indiana/Marengo\",\"America/New_York|America/Indiana/Petersburg\",\"America/New_York|America/Indiana/Vevay\",\"America/New_York|America/Indiana/Vincennes\",\"America/New_York|America/Indiana/Winamac\",\"America/New_York|America/Indianapolis\",\"America/New_York|America/Iqaluit\",\"America/New_York|America/Kentucky/Louisville\",\"America/New_York|America/Kentucky/Monticello\",\"America/New_York|America/Louisville\",\"America/New_York|America/Montreal\",\"America/New_York|America/Nassau\",\"America/New_York|America/Nipigon\",\"America/New_York|America/Pangnirtung\",\"America/New_York|America/Thunder_Bay\",\"America/New_York|America/Toronto\",\"America/New_York|Canada/Eastern\",\"America/New_York|EST5EDT\",\"America/New_York|US/East-Indiana\",\"America/New_York|US/Eastern\",\"America/New_York|US/Michigan\",\"America/Noronha|Atlantic/South_Georgia\",\"America/Noronha|Brazil/DeNoronha\",\"America/Noronha|Etc/GMT+2\",\"America/Panama|America/Atikokan\",\"America/Panama|America/Cayman\",\"America/Panama|America/Coral_Harbour\",\"America/Panama|America/Jamaica\",\"America/Panama|EST\",\"America/Panama|Jamaica\",\"America/Phoenix|America/Creston\",\"America/Phoenix|America/Dawson_Creek\",\"America/Phoenix|America/Hermosillo\",\"America/Phoenix|MST\",\"America/Phoenix|US/Arizona\",\"America/Rio_Branco|America/Eirunepe\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Santo_Domingo|America/Anguilla\",\"America/Santo_Domingo|America/Antigua\",\"America/Santo_Domingo|America/Aruba\",\"America/Santo_Domingo|America/Barbados\",\"America/Santo_Domingo|America/Blanc-Sablon\",\"America/Santo_Domingo|America/Curacao\",\"America/Santo_Domingo|America/Dominica\",\"America/Santo_Domingo|America/Grenada\",\"America/Santo_Domingo|America/Guadeloupe\",\"America/Santo_Domingo|America/Kralendijk\",\"America/Santo_Domingo|America/Lower_Princes\",\"America/Santo_Domingo|America/Marigot\",\"America/Santo_Domingo|America/Martinique\",\"America/Santo_Domingo|America/Montserrat\",\"America/Santo_Domingo|America/Port_of_Spain\",\"America/Santo_Domingo|America/Puerto_Rico\",\"America/Santo_Domingo|America/St_Barthelemy\",\"America/Santo_Domingo|America/St_Kitts\",\"America/Santo_Domingo|America/St_Lucia\",\"America/Santo_Domingo|America/St_Thomas\",\"America/Santo_Domingo|America/St_Vincent\",\"America/Santo_Domingo|America/Tortola\",\"America/Santo_Domingo|America/Virgin\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Whitehorse|America/Dawson\",\"America/Whitehorse|Canada/Yukon\",\"Antarctica/Palmer|America/Punta_Arenas\",\"Asia/Baghdad|Antarctica/Syowa\",\"Asia/Baghdad|Asia/Aden\",\"Asia/Baghdad|Asia/Bahrain\",\"Asia/Baghdad|Asia/Kuwait\",\"Asia/Baghdad|Asia/Qatar\",\"Asia/Baghdad|Asia/Riyadh\",\"Asia/Baghdad|Etc/GMT-3\",\"Asia/Baghdad|Europe/Minsk\",\"Asia/Bangkok|Asia/Ho_Chi_Minh\",\"Asia/Bangkok|Asia/Novokuznetsk\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Saigon\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Bangkok|Etc/GMT-7\",\"Asia/Bangkok|Indian/Christmas\",\"Asia/Dhaka|Antarctica/Vostok\",\"Asia/Dhaka|Asia/Almaty\",\"Asia/Dhaka|Asia/Bishkek\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dhaka|Asia/Kashgar\",\"Asia/Dhaka|Asia/Qostanay\",\"Asia/Dhaka|Asia/Thimbu\",\"Asia/Dhaka|Asia/Thimphu\",\"Asia/Dhaka|Asia/Urumqi\",\"Asia/Dhaka|Etc/GMT-6\",\"Asia/Dhaka|Indian/Chagos\",\"Asia/Dili|Etc/GMT-9\",\"Asia/Dili|Pacific/Palau\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Dubai|Asia/Tbilisi\",\"Asia/Dubai|Asia/Yerevan\",\"Asia/Dubai|Etc/GMT-4\",\"Asia/Dubai|Europe/Samara\",\"Asia/Dubai|Indian/Mahe\",\"Asia/Dubai|Indian/Mauritius\",\"Asia/Dubai|Indian/Reunion\",\"Asia/Gaza|Asia/Hebron\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jakarta|Asia/Pontianak\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kamchatka|Asia/Anadyr\",\"Asia/Kamchatka|Etc/GMT-12\",\"Asia/Kamchatka|Kwajalein\",\"Asia/Kamchatka|Pacific/Funafuti\",\"Asia/Kamchatka|Pacific/Kwajalein\",\"Asia/Kamchatka|Pacific/Majuro\",\"Asia/Kamchatka|Pacific/Nauru\",\"Asia/Kamchatka|Pacific/Tarawa\",\"Asia/Kamchatka|Pacific/Wake\",\"Asia/Kamchatka|Pacific/Wallis\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Kuala_Lumpur|Asia/Brunei\",\"Asia/Kuala_Lumpur|Asia/Kuching\",\"Asia/Kuala_Lumpur|Asia/Singapore\",\"Asia/Kuala_Lumpur|Etc/GMT-8\",\"Asia/Kuala_Lumpur|Singapore\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Rangoon|Indian/Cocos\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|Asia/Macao\",\"Asia/Shanghai|Asia/Macau\",\"Asia/Shanghai|Asia/Taipei\",\"Asia/Shanghai|PRC\",\"Asia/Shanghai|ROC\",\"Asia/Tashkent|Antarctica/Mawson\",\"Asia/Tashkent|Asia/Aqtau\",\"Asia/Tashkent|Asia/Aqtobe\",\"Asia/Tashkent|Asia/Ashgabat\",\"Asia/Tashkent|Asia/Ashkhabad\",\"Asia/Tashkent|Asia/Atyrau\",\"Asia/Tashkent|Asia/Dushanbe\",\"Asia/Tashkent|Asia/Oral\",\"Asia/Tashkent|Asia/Samarkand\",\"Asia/Tashkent|Etc/GMT-5\",\"Asia/Tashkent|Indian/Kerguelen\",\"Asia/Tashkent|Indian/Maldives\",\"Asia/Tehran|Iran\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Choibalsan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Vladivostok|Asia/Ust-Nera\",\"Asia/Yakutsk|Asia/Khandyga\",\"Atlantic/Azores|America/Scoresbysund\",\"Atlantic/Cape_Verde|Etc/GMT+1\",\"Australia/Adelaide|Australia/Broken_Hill\",\"Australia/Adelaide|Australia/South\",\"Australia/Adelaide|Australia/Yancowinna\",\"Australia/Brisbane|Australia/Lindeman\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Darwin|Australia/North\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Antarctica/Macquarie\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/Currie\",\"Australia/Sydney|Australia/Hobart\",\"Australia/Sydney|Australia/Melbourne\",\"Australia/Sydney|Australia/NSW\",\"Australia/Sydney|Australia/Tasmania\",\"Australia/Sydney|Australia/Victoria\",\"Etc/UTC|Etc/UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UCT\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Athens|Asia/Nicosia\",\"Europe/Athens|EET\",\"Europe/Athens|Europe/Bucharest\",\"Europe/Athens|Europe/Helsinki\",\"Europe/Athens|Europe/Kiev\",\"Europe/Athens|Europe/Mariehamn\",\"Europe/Athens|Europe/Nicosia\",\"Europe/Athens|Europe/Riga\",\"Europe/Athens|Europe/Sofia\",\"Europe/Athens|Europe/Tallinn\",\"Europe/Athens|Europe/Uzhgorod\",\"Europe/Athens|Europe/Vilnius\",\"Europe/Athens|Europe/Zaporozhye\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Atlantic/Canary\",\"Europe/Lisbon|Atlantic/Faeroe\",\"Europe/Lisbon|Atlantic/Faroe\",\"Europe/Lisbon|Atlantic/Madeira\",\"Europe/Lisbon|Portugal\",\"Europe/Lisbon|WET\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Paris|Africa/Ceuta\",\"Europe/Paris|Arctic/Longyearbyen\",\"Europe/Paris|Atlantic/Jan_Mayen\",\"Europe/Paris|CET\",\"Europe/Paris|Europe/Amsterdam\",\"Europe/Paris|Europe/Andorra\",\"Europe/Paris|Europe/Belgrade\",\"Europe/Paris|Europe/Berlin\",\"Europe/Paris|Europe/Bratislava\",\"Europe/Paris|Europe/Brussels\",\"Europe/Paris|Europe/Budapest\",\"Europe/Paris|Europe/Busingen\",\"Europe/Paris|Europe/Copenhagen\",\"Europe/Paris|Europe/Gibraltar\",\"Europe/Paris|Europe/Ljubljana\",\"Europe/Paris|Europe/Luxembourg\",\"Europe/Paris|Europe/Madrid\",\"Europe/Paris|Europe/Malta\",\"Europe/Paris|Europe/Monaco\",\"Europe/Paris|Europe/Oslo\",\"Europe/Paris|Europe/Podgorica\",\"Europe/Paris|Europe/Prague\",\"Europe/Paris|Europe/Rome\",\"Europe/Paris|Europe/San_Marino\",\"Europe/Paris|Europe/Sarajevo\",\"Europe/Paris|Europe/Skopje\",\"Europe/Paris|Europe/Stockholm\",\"Europe/Paris|Europe/Tirane\",\"Europe/Paris|Europe/Vaduz\",\"Europe/Paris|Europe/Vatican\",\"Europe/Paris|Europe/Vienna\",\"Europe/Paris|Europe/Warsaw\",\"Europe/Paris|Europe/Zagreb\",\"Europe/Paris|Europe/Zurich\",\"Europe/Paris|Poland\",\"Europe/Ulyanovsk|Europe/Astrakhan\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Fakaofo|Etc/GMT-13\",\"Pacific/Fakaofo|Pacific/Enderbury\",\"Pacific/Fakaofo|Pacific/Kanton\",\"Pacific/Galapagos|Etc/GMT+6\",\"Pacific/Gambier|Etc/GMT+9\",\"Pacific/Guadalcanal|Etc/GMT-11\",\"Pacific/Guadalcanal|Pacific/Efate\",\"Pacific/Guadalcanal|Pacific/Kosrae\",\"Pacific/Guadalcanal|Pacific/Noumea\",\"Pacific/Guadalcanal|Pacific/Pohnpei\",\"Pacific/Guadalcanal|Pacific/Ponape\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|HST\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kiritimati|Etc/GMT-14\",\"Pacific/Niue|Etc/GMT+11\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Pitcairn|Etc/GMT+8\",\"Pacific/Port_Moresby|Antarctica/DumontDUrville\",\"Pacific/Port_Moresby|Etc/GMT-10\",\"Pacific/Port_Moresby|Pacific/Chuuk\",\"Pacific/Port_Moresby|Pacific/Truk\",\"Pacific/Port_Moresby|Pacific/Yap\",\"Pacific/Tahiti|Etc/GMT+10\",\"Pacific/Tahiti|Pacific/Rarotonga\"],countries:[\"AD|Europe/Andorra\",\"AE|Asia/Dubai\",\"AF|Asia/Kabul\",\"AG|America/Port_of_Spain America/Antigua\",\"AI|America/Port_of_Spain America/Anguilla\",\"AL|Europe/Tirane\",\"AM|Asia/Yerevan\",\"AO|Africa/Lagos Africa/Luanda\",\"AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo\",\"AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia\",\"AS|Pacific/Pago_Pago\",\"AT|Europe/Vienna\",\"AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla\",\"AW|America/Curacao America/Aruba\",\"AX|Europe/Helsinki Europe/Mariehamn\",\"AZ|Asia/Baku\",\"BA|Europe/Belgrade Europe/Sarajevo\",\"BB|America/Barbados\",\"BD|Asia/Dhaka\",\"BE|Europe/Brussels\",\"BF|Africa/Abidjan Africa/Ouagadougou\",\"BG|Europe/Sofia\",\"BH|Asia/Qatar Asia/Bahrain\",\"BI|Africa/Maputo Africa/Bujumbura\",\"BJ|Africa/Lagos Africa/Porto-Novo\",\"BL|America/Port_of_Spain America/St_Barthelemy\",\"BM|Atlantic/Bermuda\",\"BN|Asia/Brunei\",\"BO|America/La_Paz\",\"BQ|America/Curacao America/Kralendijk\",\"BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco\",\"BS|America/Nassau\",\"BT|Asia/Thimphu\",\"BW|Africa/Maputo Africa/Gaborone\",\"BY|Europe/Minsk\",\"BZ|America/Belize\",\"CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver\",\"CC|Indian/Cocos\",\"CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi\",\"CF|Africa/Lagos Africa/Bangui\",\"CG|Africa/Lagos Africa/Brazzaville\",\"CH|Europe/Zurich\",\"CI|Africa/Abidjan\",\"CK|Pacific/Rarotonga\",\"CL|America/Santiago America/Punta_Arenas Pacific/Easter\",\"CM|Africa/Lagos Africa/Douala\",\"CN|Asia/Shanghai Asia/Urumqi\",\"CO|America/Bogota\",\"CR|America/Costa_Rica\",\"CU|America/Havana\",\"CV|Atlantic/Cape_Verde\",\"CW|America/Curacao\",\"CX|Indian/Christmas\",\"CY|Asia/Nicosia Asia/Famagusta\",\"CZ|Europe/Prague\",\"DE|Europe/Zurich Europe/Berlin Europe/Busingen\",\"DJ|Africa/Nairobi Africa/Djibouti\",\"DK|Europe/Copenhagen\",\"DM|America/Port_of_Spain America/Dominica\",\"DO|America/Santo_Domingo\",\"DZ|Africa/Algiers\",\"EC|America/Guayaquil Pacific/Galapagos\",\"EE|Europe/Tallinn\",\"EG|Africa/Cairo\",\"EH|Africa/El_Aaiun\",\"ER|Africa/Nairobi Africa/Asmara\",\"ES|Europe/Madrid Africa/Ceuta Atlantic/Canary\",\"ET|Africa/Nairobi Africa/Addis_Ababa\",\"FI|Europe/Helsinki\",\"FJ|Pacific/Fiji\",\"FK|Atlantic/Stanley\",\"FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae\",\"FO|Atlantic/Faroe\",\"FR|Europe/Paris\",\"GA|Africa/Lagos Africa/Libreville\",\"GB|Europe/London\",\"GD|America/Port_of_Spain America/Grenada\",\"GE|Asia/Tbilisi\",\"GF|America/Cayenne\",\"GG|Europe/London Europe/Guernsey\",\"GH|Africa/Accra\",\"GI|Europe/Gibraltar\",\"GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule\",\"GM|Africa/Abidjan Africa/Banjul\",\"GN|Africa/Abidjan Africa/Conakry\",\"GP|America/Port_of_Spain America/Guadeloupe\",\"GQ|Africa/Lagos Africa/Malabo\",\"GR|Europe/Athens\",\"GS|Atlantic/South_Georgia\",\"GT|America/Guatemala\",\"GU|Pacific/Guam\",\"GW|Africa/Bissau\",\"GY|America/Guyana\",\"HK|Asia/Hong_Kong\",\"HN|America/Tegucigalpa\",\"HR|Europe/Belgrade Europe/Zagreb\",\"HT|America/Port-au-Prince\",\"HU|Europe/Budapest\",\"ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura\",\"IE|Europe/Dublin\",\"IL|Asia/Jerusalem\",\"IM|Europe/London Europe/Isle_of_Man\",\"IN|Asia/Kolkata\",\"IO|Indian/Chagos\",\"IQ|Asia/Baghdad\",\"IR|Asia/Tehran\",\"IS|Atlantic/Reykjavik\",\"IT|Europe/Rome\",\"JE|Europe/London Europe/Jersey\",\"JM|America/Jamaica\",\"JO|Asia/Amman\",\"JP|Asia/Tokyo\",\"KE|Africa/Nairobi\",\"KG|Asia/Bishkek\",\"KH|Asia/Bangkok Asia/Phnom_Penh\",\"KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati\",\"KM|Africa/Nairobi Indian/Comoro\",\"KN|America/Port_of_Spain America/St_Kitts\",\"KP|Asia/Pyongyang\",\"KR|Asia/Seoul\",\"KW|Asia/Riyadh Asia/Kuwait\",\"KY|America/Panama America/Cayman\",\"KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral\",\"LA|Asia/Bangkok Asia/Vientiane\",\"LB|Asia/Beirut\",\"LC|America/Port_of_Spain America/St_Lucia\",\"LI|Europe/Zurich Europe/Vaduz\",\"LK|Asia/Colombo\",\"LR|Africa/Monrovia\",\"LS|Africa/Johannesburg Africa/Maseru\",\"LT|Europe/Vilnius\",\"LU|Europe/Luxembourg\",\"LV|Europe/Riga\",\"LY|Africa/Tripoli\",\"MA|Africa/Casablanca\",\"MC|Europe/Monaco\",\"MD|Europe/Chisinau\",\"ME|Europe/Belgrade Europe/Podgorica\",\"MF|America/Port_of_Spain America/Marigot\",\"MG|Africa/Nairobi Indian/Antananarivo\",\"MH|Pacific/Majuro Pacific/Kwajalein\",\"MK|Europe/Belgrade Europe/Skopje\",\"ML|Africa/Abidjan Africa/Bamako\",\"MM|Asia/Yangon\",\"MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan\",\"MO|Asia/Macau\",\"MP|Pacific/Guam Pacific/Saipan\",\"MQ|America/Martinique\",\"MR|Africa/Abidjan Africa/Nouakchott\",\"MS|America/Port_of_Spain America/Montserrat\",\"MT|Europe/Malta\",\"MU|Indian/Mauritius\",\"MV|Indian/Maldives\",\"MW|Africa/Maputo Africa/Blantyre\",\"MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas\",\"MY|Asia/Kuala_Lumpur Asia/Kuching\",\"MZ|Africa/Maputo\",\"NA|Africa/Windhoek\",\"NC|Pacific/Noumea\",\"NE|Africa/Lagos Africa/Niamey\",\"NF|Pacific/Norfolk\",\"NG|Africa/Lagos\",\"NI|America/Managua\",\"NL|Europe/Amsterdam\",\"NO|Europe/Oslo\",\"NP|Asia/Kathmandu\",\"NR|Pacific/Nauru\",\"NU|Pacific/Niue\",\"NZ|Pacific/Auckland Pacific/Chatham\",\"OM|Asia/Dubai Asia/Muscat\",\"PA|America/Panama\",\"PE|America/Lima\",\"PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier\",\"PG|Pacific/Port_Moresby Pacific/Bougainville\",\"PH|Asia/Manila\",\"PK|Asia/Karachi\",\"PL|Europe/Warsaw\",\"PM|America/Miquelon\",\"PN|Pacific/Pitcairn\",\"PR|America/Puerto_Rico\",\"PS|Asia/Gaza Asia/Hebron\",\"PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores\",\"PW|Pacific/Palau\",\"PY|America/Asuncion\",\"QA|Asia/Qatar\",\"RE|Indian/Reunion\",\"RO|Europe/Bucharest\",\"RS|Europe/Belgrade\",\"RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr\",\"RW|Africa/Maputo Africa/Kigali\",\"SA|Asia/Riyadh\",\"SB|Pacific/Guadalcanal\",\"SC|Indian/Mahe\",\"SD|Africa/Khartoum\",\"SE|Europe/Stockholm\",\"SG|Asia/Singapore\",\"SH|Africa/Abidjan Atlantic/St_Helena\",\"SI|Europe/Belgrade Europe/Ljubljana\",\"SJ|Europe/Oslo Arctic/Longyearbyen\",\"SK|Europe/Prague Europe/Bratislava\",\"SL|Africa/Abidjan Africa/Freetown\",\"SM|Europe/Rome Europe/San_Marino\",\"SN|Africa/Abidjan Africa/Dakar\",\"SO|Africa/Nairobi Africa/Mogadishu\",\"SR|America/Paramaribo\",\"SS|Africa/Juba\",\"ST|Africa/Sao_Tome\",\"SV|America/El_Salvador\",\"SX|America/Curacao America/Lower_Princes\",\"SY|Asia/Damascus\",\"SZ|Africa/Johannesburg Africa/Mbabane\",\"TC|America/Grand_Turk\",\"TD|Africa/Ndjamena\",\"TF|Indian/Reunion Indian/Kerguelen\",\"TG|Africa/Abidjan Africa/Lome\",\"TH|Asia/Bangkok\",\"TJ|Asia/Dushanbe\",\"TK|Pacific/Fakaofo\",\"TL|Asia/Dili\",\"TM|Asia/Ashgabat\",\"TN|Africa/Tunis\",\"TO|Pacific/Tongatapu\",\"TR|Europe/Istanbul\",\"TT|America/Port_of_Spain\",\"TV|Pacific/Funafuti\",\"TW|Asia/Taipei\",\"TZ|Africa/Nairobi Africa/Dar_es_Salaam\",\"UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye\",\"UG|Africa/Nairobi Africa/Kampala\",\"UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway\",\"US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu\",\"UY|America/Montevideo\",\"UZ|Asia/Samarkand Asia/Tashkent\",\"VA|Europe/Rome Europe/Vatican\",\"VC|America/Port_of_Spain America/St_Vincent\",\"VE|America/Caracas\",\"VG|America/Port_of_Spain America/Tortola\",\"VI|America/Port_of_Spain America/St_Thomas\",\"VN|Asia/Bangkok Asia/Ho_Chi_Minh\",\"VU|Pacific/Efate\",\"WF|Pacific/Wallis\",\"WS|Pacific/Apia\",\"YE|Asia/Riyadh Asia/Aden\",\"YT|Africa/Nairobi Indian/Mayotte\",\"ZA|Africa/Johannesburg\",\"ZM|Africa/Maputo Africa/Lusaka\",\"ZW|Africa/Maputo Africa/Harare\"]}),c});","/**\r\n * Copyright 2015 Tim Down.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n\r\n(function(factory,root){if(typeof define==\"function\"&&define.amd){define(factory);}else if(typeof module!=\"undefined\"&&typeof exports==\"object\"){module.exports=factory();}else{root.log4javascript=factory();}})(function(){if(!Array.prototype.push){Array.prototype.push=function(){for(var i=0,len=arguments.length;i0){var firstItem=this[0];for(var i=0,len=this.length-1;i2)?itemsAfterDeleted=argumentsArray.slice(2).concat(itemsAfterDeleted):itemsAfterDeleted;for(i=0,len=itemsToAppend.length;i=0){arr.splice(index,1);return true;}else{return false;}}\r\nfunction array_contains(arr,val){for(var i=0,len=arr.length;i=level.level;}};Level.ALL=new Level(Number.MIN_VALUE,\"ALL\");Level.TRACE=new Level(10000,\"TRACE\");Level.DEBUG=new Level(20000,\"DEBUG\");Level.INFO=new Level(30000,\"INFO\");Level.WARN=new Level(40000,\"WARN\");Level.ERROR=new Level(50000,\"ERROR\");Level.FATAL=new Level(60000,\"FATAL\");Level.OFF=new Level(Number.MAX_VALUE,\"OFF\");log4javascript.Level=Level;function Timer(name,level){this.name=name;this.level=isUndefined(level)?Level.INFO:level;this.start=new Date();}\r\nTimer.prototype.getElapsedTime=function(){return new Date().getTime()-this.start.getTime();};var anonymousLoggerName=\"[anonymous]\";var defaultLoggerName=\"[default]\";var nullLoggerName=\"[null]\";var rootLoggerName=\"root\";function Logger(name){this.name=name;this.parent=null;this.children=[];var appenders=[];var loggerLevel=null;var isRoot=(this.name===rootLoggerName);var isNull=(this.name===nullLoggerName);var appenderCache=null;var appenderCacheInvalidated=false;this.addChild=function(childLogger){this.children.push(childLogger);childLogger.parent=this;childLogger.invalidateAppenderCache();};var additive=true;this.getAdditivity=function(){return additive;};this.setAdditivity=function(additivity){var valueChanged=(additive!=additivity);additive=additivity;if(valueChanged){this.invalidateAppenderCache();}};this.addAppender=function(appender){if(isNull){handleError(\"Logger.addAppender: you may not add an appender to the null logger\");}else{if(appender instanceof log4javascript.Appender){if(!array_contains(appenders,appender)){appenders.push(appender);appender.setAddedToLogger(this);this.invalidateAppenderCache();}}else{handleError(\"Logger.addAppender: appender supplied ('\"+\r\ntoStr(appender)+\"') is not a subclass of Appender\");}}};this.removeAppender=function(appender){array_remove(appenders,appender);appender.setRemovedFromLogger(this);this.invalidateAppenderCache();};this.removeAllAppenders=function(){var appenderCount=appenders.length;if(appenderCount>0){for(var i=0;i1&&isError(lastParam)){exception=lastParam;finalParamIndex--;}\r\nvar messages=[];for(var i=0;i<=finalParamIndex;i++){messages[i]=params[i];}\r\nvar loggingEvent=new LoggingEvent(this,new Date(),level,messages,exception);this.callAppenders(loggingEvent);}};this.callAppenders=function(loggingEvent){var effectiveAppenders=this.getEffectiveAppenders();for(var i=0,len=effectiveAppenders.length;i0)?args:[\"Assertion Failure\"];args.push(newLine);args.push(expr);this.log(Level.ERROR,args);}};this.toString=function(){return\"Logger[\"+this.name+\"]\";};}\r\nLogger.prototype={trace:function(){this.log(Level.TRACE,arguments);},debug:function(){this.log(Level.DEBUG,arguments);},info:function(){this.log(Level.INFO,arguments);},warn:function(){this.log(Level.WARN,arguments);},error:function(){this.log(Level.ERROR,arguments);},fatal:function(){this.log(Level.FATAL,arguments);},isEnabledFor:function(level){return level.isGreaterOrEqual(this.getEffectiveLevel());},isTraceEnabled:function(){return this.isEnabledFor(Level.TRACE);},isDebugEnabled:function(){return this.isEnabledFor(Level.DEBUG);},isInfoEnabled:function(){return this.isEnabledFor(Level.INFO);},isWarnEnabled:function(){return this.isEnabledFor(Level.WARN);},isErrorEnabled:function(){return this.isEnabledFor(Level.ERROR);},isFatalEnabled:function(){return this.isEnabledFor(Level.FATAL);}};Logger.prototype.trace.isEntryPoint=true;Logger.prototype.debug.isEntryPoint=true;Logger.prototype.info.isEntryPoint=true;Logger.prototype.warn.isEntryPoint=true;Logger.prototype.error.isEntryPoint=true;Logger.prototype.fatal.isEntryPoint=true;var loggers={};var loggerNames=[];var ROOT_LOGGER_DEFAULT_LEVEL=Level.DEBUG;var rootLogger=new Logger(rootLoggerName);rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);log4javascript.getRootLogger=function(){return rootLogger;};log4javascript.getLogger=function(loggerName){if(typeof loggerName!=\"string\"){loggerName=anonymousLoggerName;logLog.warn(\"log4javascript.getLogger: non-string logger name \"+\r\ntoStr(loggerName)+\" supplied, returning anonymous logger\");}\r\nif(loggerName==rootLoggerName){handleError(\"log4javascript.getLogger: root logger may not be obtained by name\");}\r\nif(!loggers[loggerName]){var logger=new Logger(loggerName);loggers[loggerName]=logger;loggerNames.push(loggerName);var lastDotIndex=loggerName.lastIndexOf(\".\");var parentLogger;if(lastDotIndex>-1){var parentLoggerName=loggerName.substring(0,lastDotIndex);parentLogger=log4javascript.getLogger(parentLoggerName);}else{parentLogger=rootLogger;}\r\nparentLogger.addChild(logger);}\r\nreturn loggers[loggerName];};var defaultLogger=null;log4javascript.getDefaultLogger=function(){if(!defaultLogger){defaultLogger=createDefaultLogger();}\r\nreturn defaultLogger;};var nullLogger=null;log4javascript.getNullLogger=function(){if(!nullLogger){nullLogger=new Logger(nullLoggerName);nullLogger.setLevel(Level.OFF);}\r\nreturn nullLogger;};log4javascript.resetConfiguration=function(){rootLogger.setLevel(ROOT_LOGGER_DEFAULT_LEVEL);loggers={};};var LoggingEvent=function(logger,timeStamp,level,messages,exception){this.logger=logger;this.timeStamp=timeStamp;this.timeStampInMilliseconds=timeStamp.getTime();this.timeStampInSeconds=Math.floor(this.timeStampInMilliseconds/1000);this.milliseconds=this.timeStamp.getMilliseconds();this.level=level;this.messages=messages;this.exception=exception;};LoggingEvent.prototype={getThrowableStrRep:function(){return this.exception?getExceptionStringRep(this.exception):\"\";},getCombinedMessages:function(){return(this.messages.length==1)?this.messages[0]:this.messages.join(newLine);},toString:function(){return\"LoggingEvent[\"+this.level+\"]\";}};log4javascript.LoggingEvent=LoggingEvent;var Layout=function(){};Layout.prototype={defaults:{loggerKey:\"logger\",timeStampKey:\"timestamp\",millisecondsKey:\"milliseconds\",levelKey:\"level\",messageKey:\"message\",exceptionKey:\"exception\",urlKey:\"url\"},loggerKey:\"logger\",timeStampKey:\"timestamp\",millisecondsKey:\"milliseconds\",levelKey:\"level\",messageKey:\"message\",exceptionKey:\"exception\",urlKey:\"url\",batchHeader:\"\",batchFooter:\"\",batchSeparator:\"\",returnsPostData:false,overrideTimeStampsSetting:false,useTimeStampsInMilliseconds:null,format:function(){handleError(\"Layout.format: layout supplied has no format() method\");},ignoresThrowable:function(){handleError(\"Layout.ignoresThrowable: layout supplied has no ignoresThrowable() method\");},getContentType:function(){return\"text/plain\";},allowBatching:function(){return true;},setTimeStampsInMilliseconds:function(timeStampsInMilliseconds){this.overrideTimeStampsSetting=true;this.useTimeStampsInMilliseconds=bool(timeStampsInMilliseconds);},isTimeStampsInMilliseconds:function(){return this.overrideTimeStampsSetting?this.useTimeStampsInMilliseconds:useTimeStampsInMilliseconds;},getTimeStampValue:function(loggingEvent){return this.isTimeStampsInMilliseconds()?loggingEvent.timeStampInMilliseconds:loggingEvent.timeStampInSeconds;},getDataValues:function(loggingEvent,combineMessages){var dataValues=[[this.loggerKey,loggingEvent.logger.name],[this.timeStampKey,this.getTimeStampValue(loggingEvent)],[this.levelKey,loggingEvent.level.name],[this.urlKey,window.location.href],[this.messageKey,combineMessages?loggingEvent.getCombinedMessages():loggingEvent.messages]];if(!this.isTimeStampsInMilliseconds()){dataValues.push([this.millisecondsKey,loggingEvent.milliseconds]);}\r\nif(loggingEvent.exception){dataValues.push([this.exceptionKey,getExceptionStringRep(loggingEvent.exception)]);}\r\nif(this.hasCustomFields()){for(var i=0,len=this.customFields.length;i0);},formatWithException:function(loggingEvent){var formatted=this.format(loggingEvent);if(loggingEvent.exception&&this.ignoresThrowable()){formatted+=loggingEvent.getThrowableStrRep();}\r\nreturn formatted;},toString:function(){handleError(\"Layout.toString: all layouts must override this method\");}};log4javascript.Layout=Layout;var Appender=function(){};Appender.prototype=new EventSupport();Appender.prototype.layout=new PatternLayout();Appender.prototype.threshold=Level.ALL;Appender.prototype.loggers=[];Appender.prototype.doAppend=function(loggingEvent){if(enabled&&loggingEvent.level.level>=this.threshold.level){this.append(loggingEvent);}};Appender.prototype.append=function(loggingEvent){};Appender.prototype.setLayout=function(layout){if(layout instanceof Layout){this.layout=layout;}else{handleError(\"Appender.setLayout: layout supplied to \"+\r\nthis.toString()+\" is not a subclass of Layout\");}};Appender.prototype.getLayout=function(){return this.layout;};Appender.prototype.setThreshold=function(threshold){if(threshold instanceof Level){this.threshold=threshold;}else{handleError(\"Appender.setThreshold: threshold supplied to \"+\r\nthis.toString()+\" is not a subclass of Level\");}};Appender.prototype.getThreshold=function(){return this.threshold;};Appender.prototype.setAddedToLogger=function(logger){this.loggers.push(logger);};Appender.prototype.setRemovedFromLogger=function(logger){array_remove(this.loggers,logger);};Appender.prototype.group=emptyFunction;Appender.prototype.groupEnd=emptyFunction;Appender.prototype.toString=function(){handleError(\"Appender.toString: all appenders must override this method\");};log4javascript.Appender=Appender;function SimpleLayout(){this.customFields=[];}\r\nSimpleLayout.prototype=new Layout();SimpleLayout.prototype.format=function(loggingEvent){return loggingEvent.level.name+\" - \"+loggingEvent.getCombinedMessages();};SimpleLayout.prototype.ignoresThrowable=function(){return true;};SimpleLayout.prototype.toString=function(){return\"SimpleLayout\";};log4javascript.SimpleLayout=SimpleLayout;function NullLayout(){this.customFields=[];}\r\nNullLayout.prototype=new Layout();NullLayout.prototype.format=function(loggingEvent){return loggingEvent.messages;};NullLayout.prototype.ignoresThrowable=function(){return true;};NullLayout.prototype.formatWithException=function(loggingEvent){var messages=loggingEvent.messages,ex=loggingEvent.exception;return ex?messages.concat([ex]):messages;};NullLayout.prototype.toString=function(){return\"NullLayout\";};log4javascript.NullLayout=NullLayout;function XmlLayout(combineMessages){this.combineMessages=extractBooleanFromParam(combineMessages,true);this.customFields=[];}\r\nXmlLayout.prototype=new Layout();XmlLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};XmlLayout.prototype.getContentType=function(){return\"text/xml\";};XmlLayout.prototype.escapeCdata=function(str){return str.replace(/\\]\\]>/,\"]]>]]>\";}\r\nvar str=\"\"+newLine;if(this.combineMessages){str+=formatMessage(loggingEvent.getCombinedMessages());}else{str+=\"\"+newLine;for(i=0,len=loggingEvent.messages.length;i\"+newLine;}\r\nif(this.hasCustomFields()){for(i=0,len=this.customFields.length;i\"+newLine;}}\r\nif(loggingEvent.exception){str+=\"\"+newLine;}\r\nstr+=\"\"+newLine+newLine;return str;};XmlLayout.prototype.ignoresThrowable=function(){return false;};XmlLayout.prototype.toString=function(){return\"XmlLayout\";};log4javascript.XmlLayout=XmlLayout;function escapeNewLines(str){return str.replace(/\\r\\n|\\r|\\n/g,\"\\\\r\\\\n\");}\r\nfunction JsonLayout(readable,combineMessages){this.readable=extractBooleanFromParam(readable,false);this.combineMessages=extractBooleanFromParam(combineMessages,true);this.batchHeader=this.readable?\"[\"+newLine:\"[\";this.batchFooter=this.readable?\"]\"+newLine:\"]\";this.batchSeparator=this.readable?\",\"+newLine:\",\";this.setKeys();this.colon=this.readable?\": \":\":\";this.tab=this.readable?\"\\t\":\"\";this.lineBreak=this.readable?newLine:\"\";this.customFields=[];}\r\nJsonLayout.prototype=new Layout();JsonLayout.prototype.isReadable=function(){return this.readable;};JsonLayout.prototype.isCombinedMessages=function(){return this.combineMessages;};JsonLayout.prototype.format=function(loggingEvent){var layout=this;var dataValues=this.getDataValues(loggingEvent,this.combineMessages);var str=\"{\"+this.lineBreak;var i,len;function formatValue(val,prefix,expand){var formattedValue;var valType=typeof val;if(val instanceof Date){formattedValue=String(val.getTime());}else if(expand&&(val instanceof Array)){formattedValue=\"[\"+layout.lineBreak;for(var i=0,len=val.length;i0){objectsExpanded.push(obj);expansion=\"[\"+newLine;childDepth=depth-1;childIndentation=indentation+\" \";childLines=[];for(i=0,len=obj.length;i0){objectsExpanded.push(obj);expansion=\"{\"+newLine;childDepth=depth-1;childIndentation=indentation+\" \";childLines=[];for(i in obj){try{childExpansion=doFormat(obj[i],childDepth,childIndentation);childLines.push(childIndentation+i+\": \"+childExpansion);}catch(ex){childLines.push(childIndentation+i+\": Error formatting property. Details: \"+\r\ngetExceptionStringRep(ex));}}\r\nexpansion+=childLines.join(\",\"+newLine)+newLine+indentation+\"}\";return expansion;}else{return formatString(toStr(obj));}}\r\nreturn doFormat(obj,depth,indentation);}\r\nvar SimpleDateFormat;(function(){var regex=/('[^']*')|(G+|y+|M+|w+|W+|D+|d+|F+|E+|a+|H+|k+|K+|h+|m+|s+|S+|Z+)|([a-zA-Z]+)|([^a-zA-Z']+)/;var monthNames=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];var dayNames=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];var TEXT2=0,TEXT3=1,NUMBER=2,YEAR=3,MONTH=4,TIMEZONE=5;var types={G:TEXT2,y:YEAR,M:MONTH,w:NUMBER,W:NUMBER,D:NUMBER,d:NUMBER,F:NUMBER,E:TEXT3,a:TEXT2,H:NUMBER,k:NUMBER,K:NUMBER,h:NUMBER,m:NUMBER,s:NUMBER,S:NUMBER,Z:TIMEZONE};var ONE_DAY=24*60*60*1000;var ONE_WEEK=7*ONE_DAY;var DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK=1;var newDateAtMidnight=function(year,month,day){var d=new Date(year,month,day,0,0,0);d.setMilliseconds(0);return d;};Date.prototype.getDifference=function(date){return this.getTime()-date.getTime();};Date.prototype.isBefore=function(d){return this.getTime()=minimalDaysInFirstWeek){weekInMonth++;}\r\nreturn weekInMonth;};Date.prototype.getDayInYear=function(){var startOfYear=newDateAtMidnight(this.getFullYear(),0,1);return 1+Math.floor(this.getTimeSince(startOfYear)/ONE_DAY);};SimpleDateFormat=function(formatString){this.formatString=formatString;};SimpleDateFormat.prototype.setMinimalDaysInFirstWeek=function(days){this.minimalDaysInFirstWeek=days;};SimpleDateFormat.prototype.getMinimalDaysInFirstWeek=function(){return isUndefined(this.minimalDaysInFirstWeek)?DEFAULT_MINIMAL_DAYS_IN_FIRST_WEEK:this.minimalDaysInFirstWeek;};var padWithZeroes=function(str,len){while(str.length=4)?data:data.substr(0,Math.max(minLength,numberOfLetters));};var formatNumber=function(data,numberOfLetters){var dataString=\"\"+data;return padWithZeroes(dataString,numberOfLetters);};SimpleDateFormat.prototype.format=function(date){var formattedString=\"\";var result;var searchString=this.formatString;while((result=regex.exec(searchString))){var quotedString=result[1];var patternLetters=result[2];var otherLetters=result[3];var otherCharacters=result[4];if(quotedString){if(quotedString==\"''\"){formattedString+=\"'\";}else{formattedString+=quotedString.substring(1,quotedString.length-1);}}else if(otherLetters){}else if(otherCharacters){formattedString+=otherCharacters;}else if(patternLetters){var patternLetter=patternLetters.charAt(0);var numberOfLetters=patternLetters.length;var rawData=\"\";switch(patternLetter){case\"G\":rawData=\"AD\";break;case\"y\":rawData=date.getFullYear();break;case\"M\":rawData=date.getMonth();break;case\"w\":rawData=date.getWeekInYear(this.getMinimalDaysInFirstWeek());break;case\"W\":rawData=date.getWeekInMonth(this.getMinimalDaysInFirstWeek());break;case\"D\":rawData=date.getDayInYear();break;case\"d\":rawData=date.getDate();break;case\"F\":rawData=1+Math.floor((date.getDate()-1)/7);break;case\"E\":rawData=dayNames[date.getDay()];break;case\"a\":rawData=(date.getHours()>=12)?\"PM\":\"AM\";break;case\"H\":rawData=date.getHours();break;case\"k\":rawData=date.getHours()||24;break;case\"K\":rawData=date.getHours()%12;break;case\"h\":rawData=(date.getHours()%12)||12;break;case\"m\":rawData=date.getMinutes();break;case\"s\":rawData=date.getSeconds();break;case\"S\":rawData=date.getMilliseconds();break;case\"Z\":rawData=date.getTimezoneOffset();break;}\r\nswitch(types[patternLetter]){case TEXT2:formattedString+=formatText(rawData,numberOfLetters,2);break;case TEXT3:formattedString+=formatText(rawData,numberOfLetters,3);break;case NUMBER:formattedString+=formatNumber(rawData,numberOfLetters);break;case YEAR:if(numberOfLetters<=3){var dataString=\"\"+rawData;formattedString+=dataString.substr(2,2);}else{formattedString+=formatNumber(rawData,numberOfLetters);}\r\nbreak;case MONTH:if(numberOfLetters>=3){formattedString+=formatText(monthNames[rawData],numberOfLetters,numberOfLetters);}else{formattedString+=formatNumber(rawData+1,numberOfLetters);}\r\nbreak;case TIMEZONE:var isPositive=(rawData>0);var prefix=isPositive?\"-\":\"+\";var absData=Math.abs(rawData);var hours=\"\"+Math.floor(absData/60);hours=padWithZeroes(hours,2);var minutes=\"\"+(absData%60);minutes=padWithZeroes(minutes,2);formattedString+=prefix+hours+minutes;break;}}\r\nsearchString=searchString.substr(result.index+result[0].length);}\r\nreturn formattedString;};})();log4javascript.SimpleDateFormat=SimpleDateFormat;function PatternLayout(pattern){if(pattern){this.pattern=pattern;}else{this.pattern=PatternLayout.DEFAULT_CONVERSION_PATTERN;}\r\nthis.customFields=[];}\r\nPatternLayout.TTCC_CONVERSION_PATTERN=\"%r %p %c - %m%n\";PatternLayout.DEFAULT_CONVERSION_PATTERN=\"%m%n\";PatternLayout.ISO8601_DATEFORMAT=\"yyyy-MM-dd HH:mm:ss,SSS\";PatternLayout.DATETIME_DATEFORMAT=\"dd MMM yyyy HH:mm:ss,SSS\";PatternLayout.ABSOLUTETIME_DATEFORMAT=\"HH:mm:ss,SSS\";PatternLayout.prototype=new Layout();PatternLayout.prototype.format=function(loggingEvent){var regex=/%(-?[0-9]+)?(\\.?[0-9]+)?([acdfmMnpr%])(\\{([^\\}]+)\\})?|([^%]+)/;var formattedString=\"\";var result;var searchString=this.pattern;while((result=regex.exec(searchString))){var matchedString=result[0];var padding=result[1];var truncation=result[2];var conversionCharacter=result[3];var specifier=result[5];var text=result[6];if(text){formattedString+=\"\"+text;}else{var replacement=\"\";switch(conversionCharacter){case\"a\":case\"m\":var depth=0;if(specifier){depth=parseInt(specifier,10);if(isNaN(depth)){handleError(\"PatternLayout.format: invalid specifier '\"+\r\nspecifier+\"' for conversion character '\"+conversionCharacter+\"' - should be a number\");depth=0;}}\r\nvar messages=(conversionCharacter===\"a\")?loggingEvent.messages[0]:loggingEvent.messages;for(var i=0,len=messages.length;i0&&(replacement.charAt(replacement.length-1)!==\" \")){replacement+=\" \";}\r\nif(depth===0){replacement+=messages[i];}else{replacement+=formatObjectExpansion(messages[i],depth);}}\r\nbreak;case\"c\":var loggerName=loggingEvent.logger.name;if(specifier){var precision=parseInt(specifier,10);var loggerNameBits=loggingEvent.logger.name.split(\".\");if(precision>=loggerNameBits.length){replacement=loggerName;}else{replacement=loggerNameBits.slice(loggerNameBits.length-precision).join(\".\");}}else{replacement=loggerName;}\r\nbreak;case\"d\":var dateFormat=PatternLayout.ISO8601_DATEFORMAT;if(specifier){dateFormat=specifier;if(dateFormat==\"ISO8601\"){dateFormat=PatternLayout.ISO8601_DATEFORMAT;}else if(dateFormat==\"ABSOLUTE\"){dateFormat=PatternLayout.ABSOLUTETIME_DATEFORMAT;}else if(dateFormat==\"DATE\"){dateFormat=PatternLayout.DATETIME_DATEFORMAT;}}\r\nreplacement=(new SimpleDateFormat(dateFormat)).format(loggingEvent.timeStamp);break;case\"f\":if(this.hasCustomFields()){var fieldIndex=0;if(specifier){fieldIndex=parseInt(specifier,10);if(isNaN(fieldIndex)){handleError(\"PatternLayout.format: invalid specifier '\"+\r\nspecifier+\"' for conversion character 'f' - should be a number\");}else if(fieldIndex===0){handleError(\"PatternLayout.format: invalid specifier '\"+\r\nspecifier+\"' for conversion character 'f' - must be greater than zero\");}else if(fieldIndex>this.customFields.length){handleError(\"PatternLayout.format: invalid specifier '\"+\r\nspecifier+\"' for conversion character 'f' - there aren't that many custom fields\");}else{fieldIndex=fieldIndex-1;}}\r\nvar val=this.customFields[fieldIndex].value;if(typeof val==\"function\"){val=val(this,loggingEvent);}\r\nreplacement=val;}\r\nbreak;case\"n\":replacement=newLine;break;case\"p\":replacement=loggingEvent.level.name;break;case\"r\":replacement=\"\"+loggingEvent.timeStamp.getDifference(applicationStartDate);break;case\"%\":replacement=\"%\";break;default:replacement=matchedString;break;}\r\nvar l;if(truncation){l=parseInt(truncation.substr(1),10);var strLen=replacement.length;if(l=200&&xmlHttp.status<300)||xmlHttp.status==1223;}\r\nfunction AjaxAppender(url,withCredentials){var appender=this;var isSupported=true;if(!url){handleError(\"AjaxAppender: URL must be specified in constructor\");isSupported=false;}\r\nvar timed=this.defaults.timed;var waitForResponse=this.defaults.waitForResponse;var batchSize=this.defaults.batchSize;var timerInterval=this.defaults.timerInterval;var requestSuccessCallback=this.defaults.requestSuccessCallback;var failCallback=this.defaults.failCallback;var postVarName=this.defaults.postVarName;var sendAllOnUnload=this.defaults.sendAllOnUnload;var contentType=this.defaults.contentType;var sessionId=null;var queuedLoggingEvents=[];var queuedRequests=[];var headers=[];var sending=false;var initialized=false;function checkCanConfigure(configOptionName){if(initialized){handleError(\"AjaxAppender: configuration option '\"+\r\nconfigOptionName+\"' may not be set after the appender has been initialized\");return false;}\r\nreturn true;}\r\nthis.getSessionId=function(){return sessionId;};this.setSessionId=function(sessionIdParam){sessionId=extractStringFromParam(sessionIdParam,null);this.layout.setCustomField(\"sessionid\",sessionId);};this.setLayout=function(layoutParam){if(checkCanConfigure(\"layout\")){this.layout=layoutParam;if(sessionId!==null){this.setSessionId(sessionId);}}};this.isTimed=function(){return timed;};this.setTimed=function(timedParam){if(checkCanConfigure(\"timed\")){timed=bool(timedParam);}};this.getTimerInterval=function(){return timerInterval;};this.setTimerInterval=function(timerIntervalParam){if(checkCanConfigure(\"timerInterval\")){timerInterval=extractIntFromParam(timerIntervalParam,timerInterval);}};this.isWaitForResponse=function(){return waitForResponse;};this.setWaitForResponse=function(waitForResponseParam){if(checkCanConfigure(\"waitForResponse\")){waitForResponse=bool(waitForResponseParam);}};this.getBatchSize=function(){return batchSize;};this.setBatchSize=function(batchSizeParam){if(checkCanConfigure(\"batchSize\")){batchSize=extractIntFromParam(batchSizeParam,batchSize);}};this.isSendAllOnUnload=function(){return sendAllOnUnload;};this.setSendAllOnUnload=function(sendAllOnUnloadParam){if(checkCanConfigure(\"sendAllOnUnload\")){sendAllOnUnload=extractBooleanFromParam(sendAllOnUnloadParam,sendAllOnUnload);}};this.setRequestSuccessCallback=function(requestSuccessCallbackParam){requestSuccessCallback=extractFunctionFromParam(requestSuccessCallbackParam,requestSuccessCallback);};this.setFailCallback=function(failCallbackParam){failCallback=extractFunctionFromParam(failCallbackParam,failCallback);};this.getPostVarName=function(){return postVarName;};this.setPostVarName=function(postVarNameParam){if(checkCanConfigure(\"postVarName\")){postVarName=extractStringFromParam(postVarNameParam,postVarName);}};this.getHeaders=function(){return headers;};this.addHeader=function(name,value){if(name.toLowerCase()==\"content-type\"){contentType=value;}else{headers.push({name:name,value:value});}};function sendAll(){if(isSupported&&enabled){sending=true;var currentRequestBatch;if(waitForResponse){if(queuedRequests.length>0){currentRequestBatch=queuedRequests.shift();sendRequest(preparePostData(currentRequestBatch),sendAll);}else{sending=false;if(timed){scheduleSending();}}}else{while((currentRequestBatch=queuedRequests.shift())){sendRequest(preparePostData(currentRequestBatch));}\r\nsending=false;if(timed){scheduleSending();}}}}\r\nthis.sendAll=sendAll;function sendAllRemaining(){var sendingAnything=false;if(isSupported&&enabled){var actualBatchSize=appender.getLayout().allowBatching()?batchSize:1;var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);if(queuedLoggingEvents.length>=actualBatchSize){queuedRequests.push(batchedLoggingEvents);batchedLoggingEvents=[];}}\r\nif(batchedLoggingEvents.length>0){queuedRequests.push(batchedLoggingEvents);}\r\nsendingAnything=(queuedRequests.length>0);waitForResponse=false;timed=false;sendAll();}\r\nreturn sendingAnything;}\r\nthis.sendAllRemaining=sendAllRemaining;function preparePostData(batchedLoggingEvents){var formattedMessages=[];var currentLoggingEvent;var postData=\"\";while((currentLoggingEvent=batchedLoggingEvents.shift())){formattedMessages.push(appender.getLayout().formatWithException(currentLoggingEvent));}\r\nif(batchedLoggingEvents.length==1){postData=formattedMessages.join(\"\");}else{postData=appender.getLayout().batchHeader+\r\nformattedMessages.join(appender.getLayout().batchSeparator)+\r\nappender.getLayout().batchFooter;}\r\nif(contentType==appender.defaults.contentType){postData=appender.getLayout().returnsPostData?postData:urlEncode(postVarName)+\"=\"+urlEncode(postData);if(postData.length>0){postData+=\"&\";}\r\npostData+=\"layout=\"+urlEncode(appender.getLayout().toString());}\r\nreturn postData;}\r\nfunction scheduleSending(){window.setTimeout(sendAll,timerInterval);}\r\nfunction xmlHttpErrorHandler(){var msg=\"AjaxAppender: could not create XMLHttpRequest object. AjaxAppender disabled\";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}}\r\nfunction sendRequest(postData,successCallback){try{var xmlHttp=getXmlHttp(xmlHttpErrorHandler);if(isSupported){xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4){if(isHttpRequestSuccessful(xmlHttp)){if(requestSuccessCallback){requestSuccessCallback(xmlHttp);}\r\nif(successCallback){successCallback(xmlHttp);}}else{var msg=\"AjaxAppender.append: XMLHttpRequest request to URL \"+\r\nurl+\" returned status code \"+xmlHttp.status;handleError(msg);if(failCallback){failCallback(msg);}}\r\nxmlHttp.onreadystatechange=emptyFunction;xmlHttp=null;}};xmlHttp.open(\"POST\",url,true);if(withCredentials&&withCredentialsSupported){xmlHttp.withCredentials=true;}\r\ntry{for(var i=0,header;header=headers[i++];){xmlHttp.setRequestHeader(header.name,header.value);}\r\nxmlHttp.setRequestHeader(\"Content-Type\",contentType);}catch(headerEx){var msg=\"AjaxAppender.append: your browser's XMLHttpRequest implementation\"+\" does not support setRequestHeader, therefore cannot post data. AjaxAppender disabled\";handleError(msg);isSupported=false;if(failCallback){failCallback(msg);}\r\nreturn;}\r\nxmlHttp.send(postData);}}catch(ex){var errMsg=\"AjaxAppender.append: error sending log message to \"+url;handleError(errMsg,ex);isSupported=false;if(failCallback){failCallback(errMsg+\". Details: \"+getExceptionStringRep(ex));}}}\r\nthis.append=function(loggingEvent){if(isSupported){if(!initialized){init();}\r\nqueuedLoggingEvents.push(loggingEvent);var actualBatchSize=this.getLayout().allowBatching()?batchSize:1;if(queuedLoggingEvents.length>=actualBatchSize){var currentLoggingEvent;var batchedLoggingEvents=[];while((currentLoggingEvent=queuedLoggingEvents.shift())){batchedLoggingEvents.push(currentLoggingEvent);}\r\nqueuedRequests.push(batchedLoggingEvents);if(!timed&&(!waitForResponse||(waitForResponse&&!sending))){sendAll();}}}};function init(){initialized=true;if(sendAllOnUnload){var oldBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){if(oldBeforeUnload){oldBeforeUnload();}\r\nsendAllRemaining();};}\r\nif(timed){scheduleSending();}}}\r\nAjaxAppender.prototype=new Appender();AjaxAppender.prototype.defaults={waitForResponse:false,timed:false,timerInterval:1000,batchSize:1,sendAllOnUnload:false,requestSuccessCallback:null,failCallback:null,postVarName:\"data\",contentType:\"application/x-www-form-urlencoded\"};AjaxAppender.prototype.layout=new HttpPostDataLayout();AjaxAppender.prototype.toString=function(){return\"AjaxAppender\";};log4javascript.AjaxAppender=AjaxAppender;function setCookie(name,value,days,path){var expires;path=path?\"; path=\"+path:\"\";if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));expires=\"; expires=\"+date.toGMTString();}else{expires=\"\";}\r\ndocument.cookie=escape(name)+\"=\"+escape(value)+expires+path;}\r\nfunction getCookie(name){var nameEquals=escape(name)+\"=\";var ca=document.cookie.split(\";\");for(var i=0,len=ca.length;i','','','log4javascript','','','','','','','','','','','
','
','
','Filters:','','','','','','','','
','
',' ','','','','','
','','','','','
','
','
','Options:','','','','','','','','
','
','
','
','
','
','','','
','
','','',''];};var defaultCommandLineFunctions=[];ConsoleAppender=function(){};var consoleAppenderIdCounter=1;ConsoleAppender.prototype=new Appender();ConsoleAppender.prototype.create=function(inPage,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,focusConsoleWindow){var appender=this;var initialized=false;var consoleWindowCreated=false;var consoleWindowLoaded=false;var consoleClosed=false;var queuedLoggingEvents=[];var isSupported=true;var consoleAppenderId=consoleAppenderIdCounter++;initiallyMinimized=extractBooleanFromParam(initiallyMinimized,this.defaults.initiallyMinimized);lazyInit=extractBooleanFromParam(lazyInit,this.defaults.lazyInit);useDocumentWrite=extractBooleanFromParam(useDocumentWrite,this.defaults.useDocumentWrite);var newestMessageAtTop=this.defaults.newestMessageAtTop;var scrollToLatestMessage=this.defaults.scrollToLatestMessage;width=width?width:this.defaults.width;height=height?height:this.defaults.height;var maxMessages=this.defaults.maxMessages;var showCommandLine=this.defaults.showCommandLine;var commandLineObjectExpansionDepth=this.defaults.commandLineObjectExpansionDepth;var showHideButton=this.defaults.showHideButton;var showCloseButton=this.defaults.showCloseButton;this.setLayout(this.defaults.layout);var init,createWindow,safeToAppend,getConsoleWindow,open;var appenderName=inPage?\"InPageAppender\":\"PopUpAppender\";var checkCanConfigure=function(configOptionName){if(consoleWindowCreated){handleError(appenderName+\": configuration option '\"+configOptionName+\"' may not be set after the appender has been initialized\");return false;}\r\nreturn true;};var consoleWindowExists=function(){return(consoleWindowLoaded&&isSupported&&!consoleClosed);};this.isNewestMessageAtTop=function(){return newestMessageAtTop;};this.setNewestMessageAtTop=function(newestMessageAtTopParam){newestMessageAtTop=bool(newestMessageAtTopParam);if(consoleWindowExists()){getConsoleWindow().setNewestAtTop(newestMessageAtTop);}};this.isScrollToLatestMessage=function(){return scrollToLatestMessage;};this.setScrollToLatestMessage=function(scrollToLatestMessageParam){scrollToLatestMessage=bool(scrollToLatestMessageParam);if(consoleWindowExists()){getConsoleWindow().setScrollToLatest(scrollToLatestMessage);}};this.getWidth=function(){return width;};this.setWidth=function(widthParam){if(checkCanConfigure(\"width\")){width=extractStringFromParam(widthParam,width);}};this.getHeight=function(){return height;};this.setHeight=function(heightParam){if(checkCanConfigure(\"height\")){height=extractStringFromParam(heightParam,height);}};this.getMaxMessages=function(){return maxMessages;};this.setMaxMessages=function(maxMessagesParam){maxMessages=extractIntFromParam(maxMessagesParam,maxMessages);if(consoleWindowExists()){getConsoleWindow().setMaxMessages(maxMessages);}};this.isShowCommandLine=function(){return showCommandLine;};this.setShowCommandLine=function(showCommandLineParam){showCommandLine=bool(showCommandLineParam);if(consoleWindowExists()){getConsoleWindow().setShowCommandLine(showCommandLine);}};this.isShowHideButton=function(){return showHideButton;};this.setShowHideButton=function(showHideButtonParam){showHideButton=bool(showHideButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowHideButton(showHideButton);}};this.isShowCloseButton=function(){return showCloseButton;};this.setShowCloseButton=function(showCloseButtonParam){showCloseButton=bool(showCloseButtonParam);if(consoleWindowExists()){getConsoleWindow().setShowCloseButton(showCloseButton);}};this.getCommandLineObjectExpansionDepth=function(){return commandLineObjectExpansionDepth;};this.setCommandLineObjectExpansionDepth=function(commandLineObjectExpansionDepthParam){commandLineObjectExpansionDepth=extractIntFromParam(commandLineObjectExpansionDepthParam,commandLineObjectExpansionDepth);};var minimized=initiallyMinimized;this.isInitiallyMinimized=function(){return initiallyMinimized;};this.setInitiallyMinimized=function(initiallyMinimizedParam){if(checkCanConfigure(\"initiallyMinimized\")){initiallyMinimized=bool(initiallyMinimizedParam);minimized=initiallyMinimized;}};this.isUseDocumentWrite=function(){return useDocumentWrite;};this.setUseDocumentWrite=function(useDocumentWriteParam){if(checkCanConfigure(\"useDocumentWrite\")){useDocumentWrite=bool(useDocumentWriteParam);}};function QueuedLoggingEvent(loggingEvent,formattedMessage){this.loggingEvent=loggingEvent;this.levelName=loggingEvent.level.name;this.formattedMessage=formattedMessage;}\r\nQueuedLoggingEvent.prototype.append=function(){getConsoleWindow().log(this.levelName,this.formattedMessage);};function QueuedGroup(name,initiallyExpanded){this.name=name;this.initiallyExpanded=initiallyExpanded;}\r\nQueuedGroup.prototype.append=function(){getConsoleWindow().group(this.name,this.initiallyExpanded);};function QueuedGroupEnd(){}\r\nQueuedGroupEnd.prototype.append=function(){getConsoleWindow().groupEnd();};var checkAndAppend=function(){safeToAppend();if(!initialized){init();}else if(consoleClosed&&reopenWhenClosed){createWindow();}\r\nif(safeToAppend()){appendQueuedLoggingEvents();}};this.append=function(loggingEvent){if(isSupported){var formattedMessage=appender.getLayout().formatWithException(loggingEvent);queuedLoggingEvents.push(new QueuedLoggingEvent(loggingEvent,formattedMessage));checkAndAppend();}};this.group=function(name,initiallyExpanded){if(isSupported){queuedLoggingEvents.push(new QueuedGroup(name,initiallyExpanded));checkAndAppend();}};this.groupEnd=function(){if(isSupported){queuedLoggingEvents.push(new QueuedGroupEnd());checkAndAppend();}};var appendQueuedLoggingEvents=function(){while(queuedLoggingEvents.length>0){queuedLoggingEvents.shift().append();}\r\nif(focusConsoleWindow){getConsoleWindow().focus();}};this.setAddedToLogger=function(logger){this.loggers.push(logger);if(enabled&&!lazyInit){init();}};this.clear=function(){if(consoleWindowExists()){getConsoleWindow().clearLog();}\r\nqueuedLoggingEvents.length=0;};this.focus=function(){if(consoleWindowExists()){getConsoleWindow().focus();}};this.focusCommandLine=function(){if(consoleWindowExists()){getConsoleWindow().focusCommandLine();}};this.focusSearch=function(){if(consoleWindowExists()){getConsoleWindow().focusSearch();}};var commandWindow=window;this.getCommandWindow=function(){return commandWindow;};this.setCommandWindow=function(commandWindowParam){commandWindow=commandWindowParam;};this.executeLastCommand=function(){if(consoleWindowExists()){getConsoleWindow().evalLastCommand();}};var commandLayout=new PatternLayout(\"%m\");this.getCommandLayout=function(){return commandLayout;};this.setCommandLayout=function(commandLayoutParam){commandLayout=commandLayoutParam;};this.evalCommandAndAppend=function(expr){var commandReturnValue={appendResult:true,isError:false};var commandOutput=\"\";try{var result,i;if(!commandWindow.eval&&commandWindow.execScript){commandWindow.execScript(\"null\");}\r\nvar commandLineFunctionsHash={};for(i=0,len=commandLineFunctions.length;i>> \"+expr;if(!isUndefined(commandOutput)){message+=newLine+commandOutput;}\r\nvar level=commandReturnValue.isError?Level.ERROR:Level.INFO;var loggingEvent=new LoggingEvent(null,new Date(),level,[message],null);var mainLayout=this.getLayout();this.setLayout(commandLayout);this.append(loggingEvent);this.setLayout(mainLayout);}};var commandLineFunctions=defaultCommandLineFunctions.concat([]);this.addCommandLineFunction=function(functionName,commandLineFunction){commandLineFunctions.push([functionName,commandLineFunction]);};var commandHistoryCookieName=\"log4javascriptCommandHistory\";this.storeCommandHistory=function(commandHistory){setCookie(commandHistoryCookieName,commandHistory.join(\",\"));};var writeHtml=function(doc){var lines=getConsoleHtmlLines();doc.open();for(var i=0,len=lines.length;i\";consoleClosed=false;var iframeDocumentExistsTest=function(win){try{return bool(win)&&bool(win.document);}catch(ex){return false;}};if(iframeDocumentExistsTest(getConsoleWindow())){writeToDocument();}else{pollConsoleWindow(iframeDocumentExistsTest,100,writeToDocument,initErrorMessage);}\r\nconsoleWindowCreated=true;};createWindow=function(show){if(show||!initiallyMinimized){var pageLoadHandler=function(){if(!container){containerElement=document.createElement(\"div\");containerElement.style.position=\"fixed\";containerElement.style.left=\"0\";containerElement.style.right=\"0\";containerElement.style.bottom=\"0\";document.body.appendChild(containerElement);appender.addCssProperty(\"borderWidth\",\"1px 0 0 0\");appender.addCssProperty(\"zIndex\",1000000);open();}else{try{var el=document.getElementById(container);if(el.nodeType==1){containerElement=el;}\r\nopen();}catch(ex){handleError(\"InPageAppender.init: invalid container element '\"+container+\"' supplied\",ex);}}};if(pageLoaded&&container&&container.appendChild){containerElement=container;open();}else if(pageLoaded){pageLoadHandler();}else{log4javascript.addEventListener(\"load\",pageLoadHandler);}\r\nwindowCreationStarted=true;}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){var iframe=window.frames[iframeId];if(iframe){return iframe;}};safeToAppend=function(){if(isSupported&&!consoleClosed){if(consoleWindowCreated&&!consoleWindowLoaded&&getConsoleWindow()&&isLoaded(getConsoleWindow())){consoleWindowLoaded=true;}\r\nreturn consoleWindowLoaded;}\r\nreturn false;};}else{var useOldPopUp=appender.defaults.useOldPopUp;var complainAboutPopUpBlocking=appender.defaults.complainAboutPopUpBlocking;var reopenWhenClosed=this.defaults.reopenWhenClosed;this.isUseOldPopUp=function(){return useOldPopUp;};this.setUseOldPopUp=function(useOldPopUpParam){if(checkCanConfigure(\"useOldPopUp\")){useOldPopUp=bool(useOldPopUpParam);}};this.isComplainAboutPopUpBlocking=function(){return complainAboutPopUpBlocking;};this.setComplainAboutPopUpBlocking=function(complainAboutPopUpBlockingParam){if(checkCanConfigure(\"complainAboutPopUpBlocking\")){complainAboutPopUpBlocking=bool(complainAboutPopUpBlockingParam);}};this.isFocusPopUp=function(){return focusConsoleWindow;};this.setFocusPopUp=function(focusPopUpParam){focusConsoleWindow=bool(focusPopUpParam);};this.isReopenWhenClosed=function(){return reopenWhenClosed;};this.setReopenWhenClosed=function(reopenWhenClosedParam){reopenWhenClosed=bool(reopenWhenClosedParam);};this.close=function(){logLog.debug(\"close \"+this);try{popUp.close();this.unload();}catch(ex){}};this.hide=function(){logLog.debug(\"hide \"+this);if(consoleWindowExists()){this.close();}};this.show=function(){logLog.debug(\"show \"+this);if(!consoleWindowCreated){open();}};this.isVisible=function(){return safeToAppend();};var popUp;open=function(){var windowProperties=\"width=\"+width+\",height=\"+height+\",status,resizable\";var frameInfo=\"\";try{var frameEl=window.frameElement;if(frameEl){frameInfo=\"_\"+frameEl.tagName+\"_\"+(frameEl.name||frameEl.id||\"\");}}catch(e){frameInfo=\"_inaccessibleParentFrame\";}\r\nvar windowName=\"PopUp_\"+location.host.replace(/[^a-z0-9]/gi,\"_\")+\"_\"+consoleAppenderId+frameInfo;if(!useOldPopUp||!useDocumentWrite){windowName=windowName+\"_\"+uniqueId;}\r\nvar checkPopUpClosed=function(win){if(consoleClosed){return true;}else{try{return bool(win)&&win.closed;}catch(ex){}}\r\nreturn false;};var popUpClosedCallback=function(){if(!consoleClosed){appender.unload();}};function finalInit(){getConsoleWindow().setCloseIfOpenerCloses(!useOldPopUp||!useDocumentWrite);consoleWindowLoadHandler();consoleWindowLoaded=true;appendQueuedLoggingEvents();pollConsoleWindow(checkPopUpClosed,500,popUpClosedCallback,\"PopUpAppender.checkPopUpClosed: error checking pop-up window\");}\r\ntry{popUp=window.open(getConsoleUrl(),windowName,windowProperties);consoleClosed=false;consoleWindowCreated=true;if(popUp&&popUp.document){if(useDocumentWrite&&useOldPopUp&&isLoaded(popUp)){popUp.mainPageReloaded();finalInit();}else{if(useDocumentWrite){writeHtml(popUp.document);}\r\nvar popUpLoadedTest=function(win){return bool(win)&&isLoaded(win);};if(isLoaded(popUp)){finalInit();}else{pollConsoleWindow(popUpLoadedTest,100,finalInit,\"PopUpAppender.init: unable to create console window\");}}}else{isSupported=false;logLog.warn(\"PopUpAppender.init: pop-ups blocked, please unblock to use PopUpAppender\");if(complainAboutPopUpBlocking){handleError(\"log4javascript: pop-up windows appear to be blocked. Please unblock them to use pop-up logging.\");}}}catch(ex){handleError(\"PopUpAppender.init: error creating pop-up\",ex);}};createWindow=function(){if(!initiallyMinimized){open();}};init=function(){createWindow();initialized=true;};getConsoleWindow=function(){return popUp;};safeToAppend=function(){if(isSupported&&!isUndefined(popUp)&&!consoleClosed){if(popUp.closed||(consoleWindowLoaded&&isUndefined(popUp.closed))){appender.unload();logLog.debug(\"PopUpAppender: pop-up closed\");return false;}\r\nif(!consoleWindowLoaded&&isLoaded(popUp)){consoleWindowLoaded=true;}}\r\nreturn isSupported&&consoleWindowLoaded&&!consoleClosed;};}\r\nthis.getConsoleWindow=getConsoleWindow;};ConsoleAppender.addGlobalCommandLineFunction=function(functionName,commandLineFunction){defaultCommandLineFunctions.push([functionName,commandLineFunction]);};function PopUpAppender(lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(false,null,lazyInit,initiallyMinimized,useDocumentWrite,width,height,this.defaults.focusPopUp);}\r\nPopUpAppender.prototype=new ConsoleAppender();PopUpAppender.prototype.defaults={layout:new PatternLayout(\"%d{HH:mm:ss} %-5p - %m{1}%n\"),initiallyMinimized:false,focusPopUp:false,lazyInit:true,useOldPopUp:true,complainAboutPopUpBlocking:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:\"600\",height:\"400\",reopenWhenClosed:false,maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:true,useDocumentWrite:true};PopUpAppender.prototype.toString=function(){return\"PopUpAppender\";};log4javascript.PopUpAppender=PopUpAppender;function InPageAppender(container,lazyInit,initiallyMinimized,useDocumentWrite,width,height){this.create(true,container,lazyInit,initiallyMinimized,useDocumentWrite,width,height,false);}\r\nInPageAppender.prototype=new ConsoleAppender();InPageAppender.prototype.defaults={layout:new PatternLayout(\"%d{HH:mm:ss} %-5p - %m{1}%n\"),initiallyMinimized:false,lazyInit:true,newestMessageAtTop:false,scrollToLatestMessage:true,width:\"100%\",height:\"220px\",maxMessages:null,showCommandLine:true,commandLineObjectExpansionDepth:1,showHideButton:false,showCloseButton:false,showLogEntryDeleteButtons:true,useDocumentWrite:true};InPageAppender.prototype.toString=function(){return\"InPageAppender\";};log4javascript.InPageAppender=InPageAppender;log4javascript.InlineAppender=InPageAppender;})();function padWithSpaces(str,len){if(str.length]*>\",\"i\");if(regex.test(el.outerHTML)){return RegExp.$1.toLowerCase();}}\r\nreturn\"\";}\r\nvar lt=\"<\";var gt=\">\";var i,len;if(includeRootNode&&rootNode.nodeType!=nodeTypes.DOCUMENT_FRAGMENT_NODE){switch(rootNode.nodeType){case nodeTypes.ELEMENT_NODE:var tagName=rootNode.tagName.toLowerCase();xhtml=startNewLine?newLine+indentation:\"\";xhtml+=lt;var prefix=getNamespace(rootNode);var hasPrefix=!!prefix;if(hasPrefix){xhtml+=prefix+\":\";}\r\nxhtml+=tagName;for(i=0,len=rootNode.attributes.length;i\"+newLine;case nodeTypes.DOCUMENT_NODE:xhtml=\"\";for(i=0,len=rootNode.childNodes.length;i 0) {\n className += (i > 0) ? ' ' : '';\n className += isPrefix ? fix + klass\n : klass + fix;\n }\n });\n return className;\n}\n\nfunction removeFromArray(arr, val) {\n var index = arr.indexOf(val);\n if (val >= 0) {\n arr.splice(index, 1);\n }\n}\n\nfunction stripCommentsFromElement(element) {\n if (element instanceof jqLite) {\n switch (element.length) {\n case 0:\n return element;\n\n case 1:\n // there is no point of stripping anything if the element\n // is the only element within the jqLite wrapper.\n // (it's important that we retain the element instance.)\n if (element[0].nodeType === ELEMENT_NODE) {\n return element;\n }\n break;\n\n default:\n return jqLite(extractElementNode(element));\n }\n }\n\n if (element.nodeType === ELEMENT_NODE) {\n return jqLite(element);\n }\n}\n\nfunction extractElementNode(element) {\n if (!element[0]) return element;\n for (var i = 0; i < element.length; i++) {\n var elm = element[i];\n if (elm.nodeType === ELEMENT_NODE) {\n return elm;\n }\n }\n}\n\nfunction $$addClass($$jqLite, element, className) {\n forEach(element, function(elm) {\n $$jqLite.addClass(elm, className);\n });\n}\n\nfunction $$removeClass($$jqLite, element, className) {\n forEach(element, function(elm) {\n $$jqLite.removeClass(elm, className);\n });\n}\n\nfunction applyAnimationClassesFactory($$jqLite) {\n return function(element, options) {\n if (options.addClass) {\n $$addClass($$jqLite, element, options.addClass);\n options.addClass = null;\n }\n if (options.removeClass) {\n $$removeClass($$jqLite, element, options.removeClass);\n options.removeClass = null;\n }\n };\n}\n\nfunction prepareAnimationOptions(options) {\n options = options || {};\n if (!options.$$prepared) {\n var domOperation = options.domOperation || noop;\n options.domOperation = function() {\n options.$$domOperationFired = true;\n domOperation();\n domOperation = noop;\n };\n options.$$prepared = true;\n }\n return options;\n}\n\nfunction applyAnimationStyles(element, options) {\n applyAnimationFromStyles(element, options);\n applyAnimationToStyles(element, options);\n}\n\nfunction applyAnimationFromStyles(element, options) {\n if (options.from) {\n element.css(options.from);\n options.from = null;\n }\n}\n\nfunction applyAnimationToStyles(element, options) {\n if (options.to) {\n element.css(options.to);\n options.to = null;\n }\n}\n\nfunction mergeAnimationDetails(element, oldAnimation, newAnimation) {\n var target = oldAnimation.options || {};\n var newOptions = newAnimation.options || {};\n\n var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');\n var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');\n var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);\n\n if (newOptions.preparationClasses) {\n target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);\n delete newOptions.preparationClasses;\n }\n\n // noop is basically when there is no callback; otherwise something has been set\n var realDomOperation = target.domOperation !== noop ? target.domOperation : null;\n\n extend(target, newOptions);\n\n // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.\n if (realDomOperation) {\n target.domOperation = realDomOperation;\n }\n\n if (classes.addClass) {\n target.addClass = classes.addClass;\n } else {\n target.addClass = null;\n }\n\n if (classes.removeClass) {\n target.removeClass = classes.removeClass;\n } else {\n target.removeClass = null;\n }\n\n oldAnimation.addClass = target.addClass;\n oldAnimation.removeClass = target.removeClass;\n\n return target;\n}\n\nfunction resolveElementClasses(existing, toAdd, toRemove) {\n var ADD_CLASS = 1;\n var REMOVE_CLASS = -1;\n\n var flags = {};\n existing = splitClassesToLookup(existing);\n\n toAdd = splitClassesToLookup(toAdd);\n forEach(toAdd, function(value, key) {\n flags[key] = ADD_CLASS;\n });\n\n toRemove = splitClassesToLookup(toRemove);\n forEach(toRemove, function(value, key) {\n flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;\n });\n\n var classes = {\n addClass: '',\n removeClass: ''\n };\n\n forEach(flags, function(val, klass) {\n var prop, allow;\n if (val === ADD_CLASS) {\n prop = 'addClass';\n allow = !existing[klass] || existing[klass + REMOVE_CLASS_SUFFIX];\n } else if (val === REMOVE_CLASS) {\n prop = 'removeClass';\n allow = existing[klass] || existing[klass + ADD_CLASS_SUFFIX];\n }\n if (allow) {\n if (classes[prop].length) {\n classes[prop] += ' ';\n }\n classes[prop] += klass;\n }\n });\n\n function splitClassesToLookup(classes) {\n if (isString(classes)) {\n classes = classes.split(' ');\n }\n\n var obj = {};\n forEach(classes, function(klass) {\n // sometimes the split leaves empty string values\n // incase extra spaces were applied to the options\n if (klass.length) {\n obj[klass] = true;\n }\n });\n return obj;\n }\n\n return classes;\n}\n\nfunction getDomNode(element) {\n return (element instanceof jqLite) ? element[0] : element;\n}\n\nfunction applyGeneratedPreparationClasses(element, event, options) {\n var classes = '';\n if (event) {\n classes = pendClasses(event, EVENT_CLASS_PREFIX, true);\n }\n if (options.addClass) {\n classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));\n }\n if (options.removeClass) {\n classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));\n }\n if (classes.length) {\n options.preparationClasses = classes;\n element.addClass(classes);\n }\n}\n\nfunction clearGeneratedClasses(element, options) {\n if (options.preparationClasses) {\n element.removeClass(options.preparationClasses);\n options.preparationClasses = null;\n }\n if (options.activeClasses) {\n element.removeClass(options.activeClasses);\n options.activeClasses = null;\n }\n}\n\nfunction blockTransitions(node, duration) {\n // we use a negative delay value since it performs blocking\n // yet it doesn't kill any existing transitions running on the\n // same element which makes this safe for class-based animations\n var value = duration ? '-' + duration + 's' : '';\n applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);\n return [TRANSITION_DELAY_PROP, value];\n}\n\nfunction blockKeyframeAnimations(node, applyBlock) {\n var value = applyBlock ? 'paused' : '';\n var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;\n applyInlineStyle(node, [key, value]);\n return [key, value];\n}\n\nfunction applyInlineStyle(node, styleTuple) {\n var prop = styleTuple[0];\n var value = styleTuple[1];\n node.style[prop] = value;\n}\n\nfunction concatWithSpace(a,b) {\n if (!a) return b;\n if (!b) return a;\n return a + ' ' + b;\n}\n\nvar $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {\n var queue, cancelFn;\n\n function scheduler(tasks) {\n // we make a copy since RAFScheduler mutates the state\n // of the passed in array variable and this would be difficult\n // to track down on the outside code\n queue = queue.concat(tasks);\n nextTick();\n }\n\n queue = scheduler.queue = [];\n\n /* waitUntilQuiet does two things:\n * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through\n * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.\n *\n * The motivation here is that animation code can request more time from the scheduler\n * before the next wave runs. This allows for certain DOM properties such as classes to\n * be resolved in time for the next animation to run.\n */\n scheduler.waitUntilQuiet = function(fn) {\n if (cancelFn) cancelFn();\n\n cancelFn = $$rAF(function() {\n cancelFn = null;\n fn();\n nextTick();\n });\n };\n\n return scheduler;\n\n function nextTick() {\n if (!queue.length) return;\n\n var items = queue.shift();\n for (var i = 0; i < items.length; i++) {\n items[i]();\n }\n\n if (!cancelFn) {\n $$rAF(function() {\n if (!cancelFn) nextTick();\n });\n }\n }\n}];\n\n/**\n * @ngdoc directive\n * @name ngAnimateChildren\n * @restrict AE\n * @element ANY\n *\n * @description\n *\n * ngAnimateChildren allows you to specify that children of this element should animate even if any\n * of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`\n * (structural) animation, child elements that also have an active structural animation are not animated.\n *\n * Note that even if `ngAnimateChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).\n *\n *\n * @param {string} ngAnimateChildren If the value is empty, `true` or `on`,\n * then child animations are allowed. If the value is `false`, child animations are not allowed.\n *\n * @example\n * \n \n
\n \n \n
\n
\n
\n List of items:\n
Item {{item}}
\n
\n
\n
\n
\n \n\n .container.ng-enter,\n .container.ng-leave {\n transition: all ease 1.5s;\n }\n\n .container.ng-enter,\n .container.ng-leave-active {\n opacity: 0;\n }\n\n .container.ng-leave,\n .container.ng-enter-active {\n opacity: 1;\n }\n\n .item {\n background: firebrick;\n color: #FFF;\n margin-bottom: 10px;\n }\n\n .item.ng-enter,\n .item.ng-leave {\n transition: transform 1.5s ease;\n }\n\n .item.ng-enter {\n transform: translateX(50px);\n }\n\n .item.ng-enter-active {\n transform: translateX(0);\n }\n \n \n angular.module('ngAnimateChildren', ['ngAnimate'])\n .controller('MainController', function MainController() {\n this.animateChildren = false;\n this.enterElement = false;\n });\n \n
\n */\nvar $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {\n return {\n link: function(scope, element, attrs) {\n var val = attrs.ngAnimateChildren;\n if (isString(val) && val.length === 0) { //empty attribute\n element.data(NG_ANIMATE_CHILDREN_DATA, true);\n } else {\n // Interpolate and set the value, so that it is available to\n // animations that run right after compilation\n setData($interpolate(val)(scope));\n attrs.$observe('ngAnimateChildren', setData);\n }\n\n function setData(value) {\n value = value === 'on' || value === 'true';\n element.data(NG_ANIMATE_CHILDREN_DATA, value);\n }\n }\n };\n}];\n\n/* exported $AnimateCssProvider */\n\nvar ANIMATE_TIMER_KEY = '$$animateCss';\n\n/**\n * @ngdoc service\n * @name $animateCss\n * @kind object\n *\n * @description\n * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes\n * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT\n * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or\n * directives to create more complex animations that can be purely driven using CSS code.\n *\n * Note that only browsers that support CSS transitions and/or keyframe animations are capable of\n * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).\n *\n * ## General Use\n * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that\n * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,\n * any automatic control over cancelling animations and/or preventing animations from being run on\n * child elements will not be handled by AngularJS. For this to work as expected, please use `$animate` to\n * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger\n * the CSS animation.\n *\n * The example below shows how we can create a folding animation on an element using `ng-if`:\n *\n * ```html\n * \n *
\n * This element will go BOOM\n *
\n * \n * ```\n *\n * Now we create the **JavaScript animation** that will trigger the CSS transition:\n *\n * ```js\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element, doneFn) {\n * var height = element[0].offsetHeight;\n * return $animateCss(element, {\n * from: { height:'0px' },\n * to: { height:height + 'px' },\n * duration: 1 // one second\n * });\n * }\n * }\n * }]);\n * ```\n *\n * ## More Advanced Uses\n *\n * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks\n * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.\n *\n * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,\n * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with\n * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order\n * to provide a working animation that will run in CSS.\n *\n * The example below showcases a more advanced version of the `.fold-animation` from the example above:\n *\n * ```js\n * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element, doneFn) {\n * var height = element[0].offsetHeight;\n * return $animateCss(element, {\n * addClass: 'red large-text pulse-twice',\n * easing: 'ease-out',\n * from: { height:'0px' },\n * to: { height:height + 'px' },\n * duration: 1 // one second\n * });\n * }\n * }\n * }]);\n * ```\n *\n * Since we're adding/removing CSS classes then the CSS transition will also pick those up:\n *\n * ```css\n * /* since a hardcoded duration value of 1 was provided in the JavaScript animation code,\n * the CSS classes below will be transitioned despite them being defined as regular CSS classes */\n * .red { background:red; }\n * .large-text { font-size:20px; }\n *\n * /* we can also use a keyframe animation and $animateCss will make it work alongside the transition */\n * .pulse-twice {\n * animation: 0.5s pulse linear 2;\n * -webkit-animation: 0.5s pulse linear 2;\n * }\n *\n * @keyframes pulse {\n * from { transform: scale(0.5); }\n * to { transform: scale(1.5); }\n * }\n *\n * @-webkit-keyframes pulse {\n * from { -webkit-transform: scale(0.5); }\n * to { -webkit-transform: scale(1.5); }\n * }\n * ```\n *\n * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.\n *\n * ## How the Options are handled\n *\n * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation\n * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline\n * styles using the `from` and `to` properties.\n *\n * ```js\n * var animator = $animateCss(element, {\n * from: { background:'red' },\n * to: { background:'blue' }\n * });\n * animator.start();\n * ```\n *\n * ```css\n * .rotating-animation {\n * animation:0.5s rotate linear;\n * -webkit-animation:0.5s rotate linear;\n * }\n *\n * @keyframes rotate {\n * from { transform: rotate(0deg); }\n * to { transform: rotate(360deg); }\n * }\n *\n * @-webkit-keyframes rotate {\n * from { -webkit-transform: rotate(0deg); }\n * to { -webkit-transform: rotate(360deg); }\n * }\n * ```\n *\n * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is\n * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition\n * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition\n * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied\n * and spread across the transition and keyframe animation.\n *\n * ## What is returned\n *\n * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually\n * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are\n * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:\n *\n * ```js\n * var animator = $animateCss(element, { ... });\n * ```\n *\n * Now what do the contents of our `animator` variable look like:\n *\n * ```js\n * {\n * // starts the animation\n * start: Function,\n *\n * // ends (aborts) the animation\n * end: Function\n * }\n * ```\n *\n * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.\n * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been\n * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties\n * and that changing them will not reconfigure the parameters of the animation.\n *\n * ### runner.done() vs runner.then()\n * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the\n * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.\n * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`\n * unless you really need a digest to kick off afterwards.\n *\n * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss\n * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).\n * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.\n *\n * @param {DOMElement} element the element that will be animated\n * @param {object} options the animation-related options that will be applied during the animation\n *\n * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied\n * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)\n * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and\n * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.\n * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).\n * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).\n * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).\n * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.\n * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.\n * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.\n * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.\n * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`\n * is provided then the animation will be skipped entirely.\n * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is\n * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value\n * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same\n * CSS delay value.\n * * `stagger` - A numeric time value representing the delay between successively animated elements\n * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})\n * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a\n * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)\n * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.)\n * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once\n * the animation is closed. This is useful for when the styles are used purely for the sake of\n * the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).\n * By default this value is set to `false`.\n *\n * @return {object} an object with start and end methods and details about the animation.\n *\n * * `start` - The method to start the animation. This will return a `Promise` when called.\n * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.\n */\nvar ONE_SECOND = 1000;\n\nvar ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\nvar CLOSING_TIME_BUFFER = 1.5;\n\nvar DETECT_CSS_PROPERTIES = {\n transitionDuration: TRANSITION_DURATION_PROP,\n transitionDelay: TRANSITION_DELAY_PROP,\n transitionProperty: TRANSITION_PROP + PROPERTY_KEY,\n animationDuration: ANIMATION_DURATION_PROP,\n animationDelay: ANIMATION_DELAY_PROP,\n animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY\n};\n\nvar DETECT_STAGGER_CSS_PROPERTIES = {\n transitionDuration: TRANSITION_DURATION_PROP,\n transitionDelay: TRANSITION_DELAY_PROP,\n animationDuration: ANIMATION_DURATION_PROP,\n animationDelay: ANIMATION_DELAY_PROP\n};\n\nfunction getCssKeyframeDurationStyle(duration) {\n return [ANIMATION_DURATION_PROP, duration + 's'];\n}\n\nfunction getCssDelayStyle(delay, isKeyframeAnimation) {\n var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;\n return [prop, delay + 's'];\n}\n\nfunction computeCssStyles($window, element, properties) {\n var styles = Object.create(null);\n var detectedStyles = $window.getComputedStyle(element) || {};\n forEach(properties, function(formalStyleName, actualStyleName) {\n var val = detectedStyles[formalStyleName];\n if (val) {\n var c = val.charAt(0);\n\n // only numerical-based values have a negative sign or digit as the first value\n if (c === '-' || c === '+' || c >= 0) {\n val = parseMaxTime(val);\n }\n\n // by setting this to null in the event that the delay is not set or is set directly as 0\n // then we can still allow for negative values to be used later on and not mistake this\n // value for being greater than any other negative value.\n if (val === 0) {\n val = null;\n }\n styles[actualStyleName] = val;\n }\n });\n\n return styles;\n}\n\nfunction parseMaxTime(str) {\n var maxValue = 0;\n var values = str.split(/\\s*,\\s*/);\n forEach(values, function(value) {\n // it's always safe to consider only second values and omit `ms` values since\n // getComputedStyle will always handle the conversion for us\n if (value.charAt(value.length - 1) === 's') {\n value = value.substring(0, value.length - 1);\n }\n value = parseFloat(value) || 0;\n maxValue = maxValue ? Math.max(value, maxValue) : value;\n });\n return maxValue;\n}\n\nfunction truthyTimingValue(val) {\n return val === 0 || val != null;\n}\n\nfunction getCssTransitionDurationStyle(duration, applyOnlyDuration) {\n var style = TRANSITION_PROP;\n var value = duration + 's';\n if (applyOnlyDuration) {\n style += DURATION_KEY;\n } else {\n value += ' linear all';\n }\n return [style, value];\n}\n\nfunction createLocalCacheLookup() {\n var cache = Object.create(null);\n return {\n flush: function() {\n cache = Object.create(null);\n },\n\n count: function(key) {\n var entry = cache[key];\n return entry ? entry.total : 0;\n },\n\n get: function(key) {\n var entry = cache[key];\n return entry && entry.value;\n },\n\n put: function(key, value) {\n if (!cache[key]) {\n cache[key] = { total: 1, value: value };\n } else {\n cache[key].total++;\n }\n }\n };\n}\n\n// we do not reassign an already present style value since\n// if we detect the style property value again we may be\n// detecting styles that were added via the `from` styles.\n// We make use of `isDefined` here since an empty string\n// or null value (which is what getPropertyValue will return\n// for a non-existing style) will still be marked as a valid\n// value for the style (a falsy value implies that the style\n// is to be removed at the end of the animation). If we had a simple\n// \"OR\" statement then it would not be enough to catch that.\nfunction registerRestorableStyles(backup, node, properties) {\n forEach(properties, function(prop) {\n backup[prop] = isDefined(backup[prop])\n ? backup[prop]\n : node.style.getPropertyValue(prop);\n });\n}\n\nvar $AnimateCssProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n var gcsLookup = createLocalCacheLookup();\n var gcsStaggerLookup = createLocalCacheLookup();\n\n this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',\n '$$forceReflow', '$sniffer', '$$rAFScheduler', '$$animateQueue',\n function($window, $$jqLite, $$AnimateRunner, $timeout,\n $$forceReflow, $sniffer, $$rAFScheduler, $$animateQueue) {\n\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n var parentCounter = 0;\n function gcsHashFn(node, extraClasses) {\n var KEY = '$$ngAnimateParentKey';\n var parentNode = node.parentNode;\n var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);\n return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;\n }\n\n function computeCachedCssStyles(node, className, cacheKey, properties) {\n var timings = gcsLookup.get(cacheKey);\n\n if (!timings) {\n timings = computeCssStyles($window, node, properties);\n if (timings.animationIterationCount === 'infinite') {\n timings.animationIterationCount = 1;\n }\n }\n\n // we keep putting this in multiple times even though the value and the cacheKey are the same\n // because we're keeping an internal tally of how many duplicate animations are detected.\n gcsLookup.put(cacheKey, timings);\n return timings;\n }\n\n function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {\n var stagger;\n\n // if we have one or more existing matches of matching elements\n // containing the same parent + CSS styles (which is how cacheKey works)\n // then staggering is possible\n if (gcsLookup.count(cacheKey) > 0) {\n stagger = gcsStaggerLookup.get(cacheKey);\n\n if (!stagger) {\n var staggerClassName = pendClasses(className, '-stagger');\n\n $$jqLite.addClass(node, staggerClassName);\n\n stagger = computeCssStyles($window, node, properties);\n\n // force the conversion of a null value to zero incase not set\n stagger.animationDuration = Math.max(stagger.animationDuration, 0);\n stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);\n\n $$jqLite.removeClass(node, staggerClassName);\n\n gcsStaggerLookup.put(cacheKey, stagger);\n }\n }\n\n return stagger || {};\n }\n\n var rafWaitQueue = [];\n function waitUntilQuiet(callback) {\n rafWaitQueue.push(callback);\n $$rAFScheduler.waitUntilQuiet(function() {\n gcsLookup.flush();\n gcsStaggerLookup.flush();\n\n // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.\n // PLEASE EXAMINE THE `$$forceReflow` service to understand why.\n var pageWidth = $$forceReflow();\n\n // we use a for loop to ensure that if the queue is changed\n // during this looping then it will consider new requests\n for (var i = 0; i < rafWaitQueue.length; i++) {\n rafWaitQueue[i](pageWidth);\n }\n rafWaitQueue.length = 0;\n });\n }\n\n function computeTimings(node, className, cacheKey) {\n var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);\n var aD = timings.animationDelay;\n var tD = timings.transitionDelay;\n timings.maxDelay = aD && tD\n ? Math.max(aD, tD)\n : (aD || tD);\n timings.maxDuration = Math.max(\n timings.animationDuration * timings.animationIterationCount,\n timings.transitionDuration);\n\n return timings;\n }\n\n return function init(element, initialOptions) {\n // all of the animation functions should create\n // a copy of the options data, however, if a\n // parent service has already created a copy then\n // we should stick to using that\n var options = initialOptions || {};\n if (!options.$$prepared) {\n options = prepareAnimationOptions(copy(options));\n }\n\n var restoreStyles = {};\n var node = getDomNode(element);\n if (!node\n || !node.parentNode\n || !$$animateQueue.enabled()) {\n return closeAndReturnNoopAnimator();\n }\n\n var temporaryStyles = [];\n var classes = element.attr('class');\n var styles = packageStyles(options);\n var animationClosed;\n var animationPaused;\n var animationCompleted;\n var runner;\n var runnerHost;\n var maxDelay;\n var maxDelayTime;\n var maxDuration;\n var maxDurationTime;\n var startTime;\n var events = [];\n\n if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {\n return closeAndReturnNoopAnimator();\n }\n\n var method = options.event && isArray(options.event)\n ? options.event.join(' ')\n : options.event;\n\n var isStructural = method && options.structural;\n var structuralClassName = '';\n var addRemoveClassName = '';\n\n if (isStructural) {\n structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);\n } else if (method) {\n structuralClassName = method;\n }\n\n if (options.addClass) {\n addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);\n }\n\n if (options.removeClass) {\n if (addRemoveClassName.length) {\n addRemoveClassName += ' ';\n }\n addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);\n }\n\n // there may be a situation where a structural animation is combined together\n // with CSS classes that need to resolve before the animation is computed.\n // However this means that there is no explicit CSS code to block the animation\n // from happening (by setting 0s none in the class name). If this is the case\n // we need to apply the classes before the first rAF so we know to continue if\n // there actually is a detected transition or keyframe animation\n if (options.applyClassesEarly && addRemoveClassName.length) {\n applyAnimationClasses(element, options);\n }\n\n var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();\n var fullClassName = classes + ' ' + preparationClasses;\n var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);\n var hasToStyles = styles.to && Object.keys(styles.to).length > 0;\n var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;\n\n // there is no way we can trigger an animation if no styles and\n // no classes are being applied which would then trigger a transition,\n // unless there a is raw keyframe value that is applied to the element.\n if (!containsKeyframeAnimation\n && !hasToStyles\n && !preparationClasses) {\n return closeAndReturnNoopAnimator();\n }\n\n var cacheKey, stagger;\n if (options.stagger > 0) {\n var staggerVal = parseFloat(options.stagger);\n stagger = {\n transitionDelay: staggerVal,\n animationDelay: staggerVal,\n transitionDuration: 0,\n animationDuration: 0\n };\n } else {\n cacheKey = gcsHashFn(node, fullClassName);\n stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);\n }\n\n if (!options.$$skipPreparationClasses) {\n $$jqLite.addClass(element, preparationClasses);\n }\n\n var applyOnlyDuration;\n\n if (options.transitionStyle) {\n var transitionStyle = [TRANSITION_PROP, options.transitionStyle];\n applyInlineStyle(node, transitionStyle);\n temporaryStyles.push(transitionStyle);\n }\n\n if (options.duration >= 0) {\n applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;\n var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);\n\n // we set the duration so that it will be picked up by getComputedStyle later\n applyInlineStyle(node, durationStyle);\n temporaryStyles.push(durationStyle);\n }\n\n if (options.keyframeStyle) {\n var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];\n applyInlineStyle(node, keyframeStyle);\n temporaryStyles.push(keyframeStyle);\n }\n\n var itemIndex = stagger\n ? options.staggerIndex >= 0\n ? options.staggerIndex\n : gcsLookup.count(cacheKey)\n : 0;\n\n var isFirst = itemIndex === 0;\n\n // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY\n // without causing any combination of transitions to kick in. By adding a negative delay value\n // it forces the setup class' transition to end immediately. We later then remove the negative\n // transition delay to allow for the transition to naturally do it's thing. The beauty here is\n // that if there is no transition defined then nothing will happen and this will also allow\n // other transitions to be stacked on top of each other without any chopping them out.\n if (isFirst && !options.skipBlocking) {\n blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);\n }\n\n var timings = computeTimings(node, fullClassName, cacheKey);\n var relativeDelay = timings.maxDelay;\n maxDelay = Math.max(relativeDelay, 0);\n maxDuration = timings.maxDuration;\n\n var flags = {};\n flags.hasTransitions = timings.transitionDuration > 0;\n flags.hasAnimations = timings.animationDuration > 0;\n flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty === 'all';\n flags.applyTransitionDuration = hasToStyles && (\n (flags.hasTransitions && !flags.hasTransitionAll)\n || (flags.hasAnimations && !flags.hasTransitions));\n flags.applyAnimationDuration = options.duration && flags.hasAnimations;\n flags.applyTransitionDelay = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);\n flags.applyAnimationDelay = truthyTimingValue(options.delay) && flags.hasAnimations;\n flags.recalculateTimingStyles = addRemoveClassName.length > 0;\n\n if (flags.applyTransitionDuration || flags.applyAnimationDuration) {\n maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;\n\n if (flags.applyTransitionDuration) {\n flags.hasTransitions = true;\n timings.transitionDuration = maxDuration;\n applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;\n temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));\n }\n\n if (flags.applyAnimationDuration) {\n flags.hasAnimations = true;\n timings.animationDuration = maxDuration;\n temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));\n }\n }\n\n if (maxDuration === 0 && !flags.recalculateTimingStyles) {\n return closeAndReturnNoopAnimator();\n }\n\n if (options.delay != null) {\n var delayStyle;\n if (typeof options.delay !== 'boolean') {\n delayStyle = parseFloat(options.delay);\n // number in options.delay means we have to recalculate the delay for the closing timeout\n maxDelay = Math.max(delayStyle, 0);\n }\n\n if (flags.applyTransitionDelay) {\n temporaryStyles.push(getCssDelayStyle(delayStyle));\n }\n\n if (flags.applyAnimationDelay) {\n temporaryStyles.push(getCssDelayStyle(delayStyle, true));\n }\n }\n\n // we need to recalculate the delay value since we used a pre-emptive negative\n // delay value and the delay value is required for the final event checking. This\n // property will ensure that this will happen after the RAF phase has passed.\n if (options.duration == null && timings.transitionDuration > 0) {\n flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;\n }\n\n maxDelayTime = maxDelay * ONE_SECOND;\n maxDurationTime = maxDuration * ONE_SECOND;\n if (!options.skipBlocking) {\n flags.blockTransition = timings.transitionDuration > 0;\n flags.blockKeyframeAnimation = timings.animationDuration > 0 &&\n stagger.animationDelay > 0 &&\n stagger.animationDuration === 0;\n }\n\n if (options.from) {\n if (options.cleanupStyles) {\n registerRestorableStyles(restoreStyles, node, Object.keys(options.from));\n }\n applyAnimationFromStyles(element, options);\n }\n\n if (flags.blockTransition || flags.blockKeyframeAnimation) {\n applyBlocking(maxDuration);\n } else if (!options.skipBlocking) {\n blockTransitions(node, false);\n }\n\n // TODO(matsko): for 1.5 change this code to have an animator object for better debugging\n return {\n $$willAnimate: true,\n end: endFn,\n start: function() {\n if (animationClosed) return;\n\n runnerHost = {\n end: endFn,\n cancel: cancelFn,\n resume: null, //this will be set during the start() phase\n pause: null\n };\n\n runner = new $$AnimateRunner(runnerHost);\n\n waitUntilQuiet(start);\n\n // we don't have access to pause/resume the animation\n // since it hasn't run yet. AnimateRunner will therefore\n // set noop functions for resume and pause and they will\n // later be overridden once the animation is triggered\n return runner;\n }\n };\n\n function endFn() {\n close();\n }\n\n function cancelFn() {\n close(true);\n }\n\n function close(rejected) {\n // if the promise has been called already then we shouldn't close\n // the animation again\n if (animationClosed || (animationCompleted && animationPaused)) return;\n animationClosed = true;\n animationPaused = false;\n\n if (!options.$$skipPreparationClasses) {\n $$jqLite.removeClass(element, preparationClasses);\n }\n $$jqLite.removeClass(element, activeClasses);\n\n blockKeyframeAnimations(node, false);\n blockTransitions(node, false);\n\n forEach(temporaryStyles, function(entry) {\n // There is only one way to remove inline style properties entirely from elements.\n // By using `removeProperty` this works, but we need to convert camel-cased CSS\n // styles down to hyphenated values.\n node.style[entry[0]] = '';\n });\n\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n\n if (Object.keys(restoreStyles).length) {\n forEach(restoreStyles, function(value, prop) {\n if (value) {\n node.style.setProperty(prop, value);\n } else {\n node.style.removeProperty(prop);\n }\n });\n }\n\n // the reason why we have this option is to allow a synchronous closing callback\n // that is fired as SOON as the animation ends (when the CSS is removed) or if\n // the animation never takes off at all. A good example is a leave animation since\n // the element must be removed just after the animation is over or else the element\n // will appear on screen for one animation frame causing an overbearing flicker.\n if (options.onDone) {\n options.onDone();\n }\n\n if (events && events.length) {\n // Remove the transitionend / animationend listener(s)\n element.off(events.join(' '), onAnimationProgress);\n }\n\n //Cancel the fallback closing timeout and remove the timer data\n var animationTimerData = element.data(ANIMATE_TIMER_KEY);\n if (animationTimerData) {\n $timeout.cancel(animationTimerData[0].timer);\n element.removeData(ANIMATE_TIMER_KEY);\n }\n\n // if the preparation function fails then the promise is not setup\n if (runner) {\n runner.complete(!rejected);\n }\n }\n\n function applyBlocking(duration) {\n if (flags.blockTransition) {\n blockTransitions(node, duration);\n }\n\n if (flags.blockKeyframeAnimation) {\n blockKeyframeAnimations(node, !!duration);\n }\n }\n\n function closeAndReturnNoopAnimator() {\n runner = new $$AnimateRunner({\n end: endFn,\n cancel: cancelFn\n });\n\n // should flush the cache animation\n waitUntilQuiet(noop);\n close();\n\n return {\n $$willAnimate: false,\n start: function() {\n return runner;\n },\n end: endFn\n };\n }\n\n function onAnimationProgress(event) {\n event.stopPropagation();\n var ev = event.originalEvent || event;\n\n if (ev.target !== node) {\n // Since TransitionEvent / AnimationEvent bubble up,\n // we have to ignore events by finished child animations\n return;\n }\n\n // we now always use `Date.now()` due to the recent changes with\n // event.timeStamp in Firefox, Webkit and Chrome (see #13494 for more info)\n var timeStamp = ev.$manualTimeStamp || Date.now();\n\n /* Firefox (or possibly just Gecko) likes to not round values up\n * when a ms measurement is used for the animation */\n var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));\n\n /* $manualTimeStamp is a mocked timeStamp value which is set\n * within browserTrigger(). This is only here so that tests can\n * mock animations properly. Real events fallback to event.timeStamp,\n * or, if they don't, then a timeStamp is automatically created for them.\n * We're checking to see if the timeStamp surpasses the expected delay,\n * but we're using elapsedTime instead of the timeStamp on the 2nd\n * pre-condition since animationPauseds sometimes close off early */\n if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {\n // we set this flag to ensure that if the transition is paused then, when resumed,\n // the animation will automatically close itself since transitions cannot be paused.\n animationCompleted = true;\n close();\n }\n }\n\n function start() {\n if (animationClosed) return;\n if (!node.parentNode) {\n close();\n return;\n }\n\n // even though we only pause keyframe animations here the pause flag\n // will still happen when transitions are used. Only the transition will\n // not be paused since that is not possible. If the animation ends when\n // paused then it will not complete until unpaused or cancelled.\n var playPause = function(playAnimation) {\n if (!animationCompleted) {\n animationPaused = !playAnimation;\n if (timings.animationDuration) {\n var value = blockKeyframeAnimations(node, animationPaused);\n if (animationPaused) {\n temporaryStyles.push(value);\n } else {\n removeFromArray(temporaryStyles, value);\n }\n }\n } else if (animationPaused && playAnimation) {\n animationPaused = false;\n close();\n }\n };\n\n // checking the stagger duration prevents an accidentally cascade of the CSS delay style\n // being inherited from the parent. If the transition duration is zero then we can safely\n // rely that the delay value is an intentional stagger delay style.\n var maxStagger = itemIndex > 0\n && ((timings.transitionDuration && stagger.transitionDuration === 0) ||\n (timings.animationDuration && stagger.animationDuration === 0))\n && Math.max(stagger.animationDelay, stagger.transitionDelay);\n if (maxStagger) {\n $timeout(triggerAnimationStart,\n Math.floor(maxStagger * itemIndex * ONE_SECOND),\n false);\n } else {\n triggerAnimationStart();\n }\n\n // this will decorate the existing promise runner with pause/resume methods\n runnerHost.resume = function() {\n playPause(true);\n };\n\n runnerHost.pause = function() {\n playPause(false);\n };\n\n function triggerAnimationStart() {\n // just incase a stagger animation kicks in when the animation\n // itself was cancelled entirely\n if (animationClosed) return;\n\n applyBlocking(false);\n\n forEach(temporaryStyles, function(entry) {\n var key = entry[0];\n var value = entry[1];\n node.style[key] = value;\n });\n\n applyAnimationClasses(element, options);\n $$jqLite.addClass(element, activeClasses);\n\n if (flags.recalculateTimingStyles) {\n fullClassName = node.getAttribute('class') + ' ' + preparationClasses;\n cacheKey = gcsHashFn(node, fullClassName);\n\n timings = computeTimings(node, fullClassName, cacheKey);\n relativeDelay = timings.maxDelay;\n maxDelay = Math.max(relativeDelay, 0);\n maxDuration = timings.maxDuration;\n\n if (maxDuration === 0) {\n close();\n return;\n }\n\n flags.hasTransitions = timings.transitionDuration > 0;\n flags.hasAnimations = timings.animationDuration > 0;\n }\n\n if (flags.applyAnimationDelay) {\n relativeDelay = typeof options.delay !== 'boolean' && truthyTimingValue(options.delay)\n ? parseFloat(options.delay)\n : relativeDelay;\n\n maxDelay = Math.max(relativeDelay, 0);\n timings.animationDelay = relativeDelay;\n delayStyle = getCssDelayStyle(relativeDelay, true);\n temporaryStyles.push(delayStyle);\n node.style[delayStyle[0]] = delayStyle[1];\n }\n\n maxDelayTime = maxDelay * ONE_SECOND;\n maxDurationTime = maxDuration * ONE_SECOND;\n\n if (options.easing) {\n var easeProp, easeVal = options.easing;\n if (flags.hasTransitions) {\n easeProp = TRANSITION_PROP + TIMING_KEY;\n temporaryStyles.push([easeProp, easeVal]);\n node.style[easeProp] = easeVal;\n }\n if (flags.hasAnimations) {\n easeProp = ANIMATION_PROP + TIMING_KEY;\n temporaryStyles.push([easeProp, easeVal]);\n node.style[easeProp] = easeVal;\n }\n }\n\n if (timings.transitionDuration) {\n events.push(TRANSITIONEND_EVENT);\n }\n\n if (timings.animationDuration) {\n events.push(ANIMATIONEND_EVENT);\n }\n\n startTime = Date.now();\n var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;\n var endTime = startTime + timerTime;\n\n var animationsData = element.data(ANIMATE_TIMER_KEY) || [];\n var setupFallbackTimer = true;\n if (animationsData.length) {\n var currentTimerData = animationsData[0];\n setupFallbackTimer = endTime > currentTimerData.expectedEndTime;\n if (setupFallbackTimer) {\n $timeout.cancel(currentTimerData.timer);\n } else {\n animationsData.push(close);\n }\n }\n\n if (setupFallbackTimer) {\n var timer = $timeout(onAnimationExpired, timerTime, false);\n animationsData[0] = {\n timer: timer,\n expectedEndTime: endTime\n };\n animationsData.push(close);\n element.data(ANIMATE_TIMER_KEY, animationsData);\n }\n\n if (events.length) {\n element.on(events.join(' '), onAnimationProgress);\n }\n\n if (options.to) {\n if (options.cleanupStyles) {\n registerRestorableStyles(restoreStyles, node, Object.keys(options.to));\n }\n applyAnimationToStyles(element, options);\n }\n }\n\n function onAnimationExpired() {\n var animationsData = element.data(ANIMATE_TIMER_KEY);\n\n // this will be false in the event that the element was\n // removed from the DOM (via a leave animation or something\n // similar)\n if (animationsData) {\n for (var i = 1; i < animationsData.length; i++) {\n animationsData[i]();\n }\n element.removeData(ANIMATE_TIMER_KEY);\n }\n }\n }\n };\n }];\n}];\n\nvar $$AnimateCssDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {\n $$animationProvider.drivers.push('$$animateCssDriver');\n\n var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';\n var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';\n\n var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';\n var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';\n\n function isDocumentFragment(node) {\n return node.parentNode && node.parentNode.nodeType === 11;\n }\n\n this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',\n function($animateCss, $rootScope, $$AnimateRunner, $rootElement, $sniffer, $$jqLite, $document) {\n\n // only browsers that support these properties can render animations\n if (!$sniffer.animations && !$sniffer.transitions) return noop;\n\n var bodyNode = $document[0].body;\n var rootNode = getDomNode($rootElement);\n\n var rootBodyElement = jqLite(\n // this is to avoid using something that exists outside of the body\n // we also special case the doc fragment case because our unit test code\n // appends the $rootElement to the body after the app has been bootstrapped\n isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode\n );\n\n return function initDriverFn(animationDetails) {\n return animationDetails.from && animationDetails.to\n ? prepareFromToAnchorAnimation(animationDetails.from,\n animationDetails.to,\n animationDetails.classes,\n animationDetails.anchors)\n : prepareRegularAnimation(animationDetails);\n };\n\n function filterCssClasses(classes) {\n //remove all the `ng-` stuff\n return classes.replace(/\\bng-\\S+\\b/g, '');\n }\n\n function getUniqueValues(a, b) {\n if (isString(a)) a = a.split(' ');\n if (isString(b)) b = b.split(' ');\n return a.filter(function(val) {\n return b.indexOf(val) === -1;\n }).join(' ');\n }\n\n function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {\n var clone = jqLite(getDomNode(outAnchor).cloneNode(true));\n var startingClasses = filterCssClasses(getClassVal(clone));\n\n outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);\n\n clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);\n\n rootBodyElement.append(clone);\n\n var animatorIn, animatorOut = prepareOutAnimation();\n\n // the user may not end up using the `out` animation and\n // only making use of the `in` animation or vice-versa.\n // In either case we should allow this and not assume the\n // animation is over unless both animations are not used.\n if (!animatorOut) {\n animatorIn = prepareInAnimation();\n if (!animatorIn) {\n return end();\n }\n }\n\n var startingAnimator = animatorOut || animatorIn;\n\n return {\n start: function() {\n var runner;\n\n var currentAnimation = startingAnimator.start();\n currentAnimation.done(function() {\n currentAnimation = null;\n if (!animatorIn) {\n animatorIn = prepareInAnimation();\n if (animatorIn) {\n currentAnimation = animatorIn.start();\n currentAnimation.done(function() {\n currentAnimation = null;\n end();\n runner.complete();\n });\n return currentAnimation;\n }\n }\n // in the event that there is no `in` animation\n end();\n runner.complete();\n });\n\n runner = new $$AnimateRunner({\n end: endFn,\n cancel: endFn\n });\n\n return runner;\n\n function endFn() {\n if (currentAnimation) {\n currentAnimation.end();\n }\n }\n }\n };\n\n function calculateAnchorStyles(anchor) {\n var styles = {};\n\n var coords = getDomNode(anchor).getBoundingClientRect();\n\n // we iterate directly since safari messes up and doesn't return\n // all the keys for the coords object when iterated\n forEach(['width','height','top','left'], function(key) {\n var value = coords[key];\n switch (key) {\n case 'top':\n value += bodyNode.scrollTop;\n break;\n case 'left':\n value += bodyNode.scrollLeft;\n break;\n }\n styles[key] = Math.floor(value) + 'px';\n });\n return styles;\n }\n\n function prepareOutAnimation() {\n var animator = $animateCss(clone, {\n addClass: NG_OUT_ANCHOR_CLASS_NAME,\n delay: true,\n from: calculateAnchorStyles(outAnchor)\n });\n\n // read the comment within `prepareRegularAnimation` to understand\n // why this check is necessary\n return animator.$$willAnimate ? animator : null;\n }\n\n function getClassVal(element) {\n return element.attr('class') || '';\n }\n\n function prepareInAnimation() {\n var endingClasses = filterCssClasses(getClassVal(inAnchor));\n var toAdd = getUniqueValues(endingClasses, startingClasses);\n var toRemove = getUniqueValues(startingClasses, endingClasses);\n\n var animator = $animateCss(clone, {\n to: calculateAnchorStyles(inAnchor),\n addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,\n removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,\n delay: true\n });\n\n // read the comment within `prepareRegularAnimation` to understand\n // why this check is necessary\n return animator.$$willAnimate ? animator : null;\n }\n\n function end() {\n clone.remove();\n outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);\n }\n }\n\n function prepareFromToAnchorAnimation(from, to, classes, anchors) {\n var fromAnimation = prepareRegularAnimation(from, noop);\n var toAnimation = prepareRegularAnimation(to, noop);\n\n var anchorAnimations = [];\n forEach(anchors, function(anchor) {\n var outElement = anchor['out'];\n var inElement = anchor['in'];\n var animator = prepareAnchoredAnimation(classes, outElement, inElement);\n if (animator) {\n anchorAnimations.push(animator);\n }\n });\n\n // no point in doing anything when there are no elements to animate\n if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;\n\n return {\n start: function() {\n var animationRunners = [];\n\n if (fromAnimation) {\n animationRunners.push(fromAnimation.start());\n }\n\n if (toAnimation) {\n animationRunners.push(toAnimation.start());\n }\n\n forEach(anchorAnimations, function(animation) {\n animationRunners.push(animation.start());\n });\n\n var runner = new $$AnimateRunner({\n end: endFn,\n cancel: endFn // CSS-driven animations cannot be cancelled, only ended\n });\n\n $$AnimateRunner.all(animationRunners, function(status) {\n runner.complete(status);\n });\n\n return runner;\n\n function endFn() {\n forEach(animationRunners, function(runner) {\n runner.end();\n });\n }\n }\n };\n }\n\n function prepareRegularAnimation(animationDetails) {\n var element = animationDetails.element;\n var options = animationDetails.options || {};\n\n if (animationDetails.structural) {\n options.event = animationDetails.event;\n options.structural = true;\n options.applyClassesEarly = true;\n\n // we special case the leave animation since we want to ensure that\n // the element is removed as soon as the animation is over. Otherwise\n // a flicker might appear or the element may not be removed at all\n if (animationDetails.event === 'leave') {\n options.onDone = options.domOperation;\n }\n }\n\n // We assign the preparationClasses as the actual animation event since\n // the internals of $animateCss will just suffix the event token values\n // with `-active` to trigger the animation.\n if (options.preparationClasses) {\n options.event = concatWithSpace(options.event, options.preparationClasses);\n }\n\n var animator = $animateCss(element, options);\n\n // the driver lookup code inside of $$animation attempts to spawn a\n // driver one by one until a driver returns a.$$willAnimate animator object.\n // $animateCss will always return an object, however, it will pass in\n // a flag as a hint as to whether an animation was detected or not\n return animator.$$willAnimate ? animator : null;\n }\n }];\n}];\n\n// TODO(matsko): use caching here to speed things up for detection\n// TODO(matsko): add documentation\n// by the time...\n\nvar $$AnimateJsProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',\n function($injector, $$AnimateRunner, $$jqLite) {\n\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n // $animateJs(element, 'enter');\n return function(element, event, classes, options) {\n var animationClosed = false;\n\n // the `classes` argument is optional and if it is not used\n // then the classes will be resolved from the element's className\n // property as well as options.addClass/options.removeClass.\n if (arguments.length === 3 && isObject(classes)) {\n options = classes;\n classes = null;\n }\n\n options = prepareAnimationOptions(options);\n if (!classes) {\n classes = element.attr('class') || '';\n if (options.addClass) {\n classes += ' ' + options.addClass;\n }\n if (options.removeClass) {\n classes += ' ' + options.removeClass;\n }\n }\n\n var classesToAdd = options.addClass;\n var classesToRemove = options.removeClass;\n\n // the lookupAnimations function returns a series of animation objects that are\n // matched up with one or more of the CSS classes. These animation objects are\n // defined via the module.animation factory function. If nothing is detected then\n // we don't return anything which then makes $animation query the next driver.\n var animations = lookupAnimations(classes);\n var before, after;\n if (animations.length) {\n var afterFn, beforeFn;\n if (event === 'leave') {\n beforeFn = 'leave';\n afterFn = 'afterLeave'; // TODO(matsko): get rid of this\n } else {\n beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);\n afterFn = event;\n }\n\n if (event !== 'enter' && event !== 'move') {\n before = packageAnimations(element, event, options, animations, beforeFn);\n }\n after = packageAnimations(element, event, options, animations, afterFn);\n }\n\n // no matching animations\n if (!before && !after) return;\n\n function applyOptions() {\n options.domOperation();\n applyAnimationClasses(element, options);\n }\n\n function close() {\n animationClosed = true;\n applyOptions();\n applyAnimationStyles(element, options);\n }\n\n var runner;\n\n return {\n $$willAnimate: true,\n end: function() {\n if (runner) {\n runner.end();\n } else {\n close();\n runner = new $$AnimateRunner();\n runner.complete(true);\n }\n return runner;\n },\n start: function() {\n if (runner) {\n return runner;\n }\n\n runner = new $$AnimateRunner();\n var closeActiveAnimations;\n var chain = [];\n\n if (before) {\n chain.push(function(fn) {\n closeActiveAnimations = before(fn);\n });\n }\n\n if (chain.length) {\n chain.push(function(fn) {\n applyOptions();\n fn(true);\n });\n } else {\n applyOptions();\n }\n\n if (after) {\n chain.push(function(fn) {\n closeActiveAnimations = after(fn);\n });\n }\n\n runner.setHost({\n end: function() {\n endAnimations();\n },\n cancel: function() {\n endAnimations(true);\n }\n });\n\n $$AnimateRunner.chain(chain, onComplete);\n return runner;\n\n function onComplete(success) {\n close(success);\n runner.complete(success);\n }\n\n function endAnimations(cancelled) {\n if (!animationClosed) {\n (closeActiveAnimations || noop)(cancelled);\n onComplete(cancelled);\n }\n }\n }\n };\n\n function executeAnimationFn(fn, element, event, options, onDone) {\n var args;\n switch (event) {\n case 'animate':\n args = [element, options.from, options.to, onDone];\n break;\n\n case 'setClass':\n args = [element, classesToAdd, classesToRemove, onDone];\n break;\n\n case 'addClass':\n args = [element, classesToAdd, onDone];\n break;\n\n case 'removeClass':\n args = [element, classesToRemove, onDone];\n break;\n\n default:\n args = [element, onDone];\n break;\n }\n\n args.push(options);\n\n var value = fn.apply(fn, args);\n if (value) {\n if (isFunction(value.start)) {\n value = value.start();\n }\n\n if (value instanceof $$AnimateRunner) {\n value.done(onDone);\n } else if (isFunction(value)) {\n // optional onEnd / onCancel callback\n return value;\n }\n }\n\n return noop;\n }\n\n function groupEventedAnimations(element, event, options, animations, fnName) {\n var operations = [];\n forEach(animations, function(ani) {\n var animation = ani[fnName];\n if (!animation) return;\n\n // note that all of these animations will run in parallel\n operations.push(function() {\n var runner;\n var endProgressCb;\n\n var resolved = false;\n var onAnimationComplete = function(rejected) {\n if (!resolved) {\n resolved = true;\n (endProgressCb || noop)(rejected);\n runner.complete(!rejected);\n }\n };\n\n runner = new $$AnimateRunner({\n end: function() {\n onAnimationComplete();\n },\n cancel: function() {\n onAnimationComplete(true);\n }\n });\n\n endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {\n var cancelled = result === false;\n onAnimationComplete(cancelled);\n });\n\n return runner;\n });\n });\n\n return operations;\n }\n\n function packageAnimations(element, event, options, animations, fnName) {\n var operations = groupEventedAnimations(element, event, options, animations, fnName);\n if (operations.length === 0) {\n var a, b;\n if (fnName === 'beforeSetClass') {\n a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');\n b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');\n } else if (fnName === 'setClass') {\n a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');\n b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');\n }\n\n if (a) {\n operations = operations.concat(a);\n }\n if (b) {\n operations = operations.concat(b);\n }\n }\n\n if (operations.length === 0) return;\n\n // TODO(matsko): add documentation\n return function startAnimation(callback) {\n var runners = [];\n if (operations.length) {\n forEach(operations, function(animateFn) {\n runners.push(animateFn());\n });\n }\n\n if (runners.length) {\n $$AnimateRunner.all(runners, callback);\n } else {\n callback();\n }\n\n return function endFn(reject) {\n forEach(runners, function(runner) {\n if (reject) {\n runner.cancel();\n } else {\n runner.end();\n }\n });\n };\n };\n }\n };\n\n function lookupAnimations(classes) {\n classes = isArray(classes) ? classes : classes.split(' ');\n var matches = [], flagMap = {};\n for (var i = 0; i < classes.length; i++) {\n var klass = classes[i],\n animationFactory = $animateProvider.$$registeredAnimations[klass];\n if (animationFactory && !flagMap[klass]) {\n matches.push($injector.get(animationFactory));\n flagMap[klass] = true;\n }\n }\n return matches;\n }\n }];\n}];\n\nvar $$AnimateJsDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {\n $$animationProvider.drivers.push('$$animateJsDriver');\n this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {\n return function initDriverFn(animationDetails) {\n if (animationDetails.from && animationDetails.to) {\n var fromAnimation = prepareAnimation(animationDetails.from);\n var toAnimation = prepareAnimation(animationDetails.to);\n if (!fromAnimation && !toAnimation) return;\n\n return {\n start: function() {\n var animationRunners = [];\n\n if (fromAnimation) {\n animationRunners.push(fromAnimation.start());\n }\n\n if (toAnimation) {\n animationRunners.push(toAnimation.start());\n }\n\n $$AnimateRunner.all(animationRunners, done);\n\n var runner = new $$AnimateRunner({\n end: endFnFactory(),\n cancel: endFnFactory()\n });\n\n return runner;\n\n function endFnFactory() {\n return function() {\n forEach(animationRunners, function(runner) {\n // at this point we cannot cancel animations for groups just yet. 1.5+\n runner.end();\n });\n };\n }\n\n function done(status) {\n runner.complete(status);\n }\n }\n };\n } else {\n return prepareAnimation(animationDetails);\n }\n };\n\n function prepareAnimation(animationDetails) {\n // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations\n var element = animationDetails.element;\n var event = animationDetails.event;\n var options = animationDetails.options;\n var classes = animationDetails.classes;\n return $$animateJs(element, event, classes, options);\n }\n }];\n}];\n\nvar NG_ANIMATE_ATTR_NAME = 'data-ng-animate';\nvar NG_ANIMATE_PIN_DATA = '$ngAnimatePin';\nvar $$AnimateQueueProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n var PRE_DIGEST_STATE = 1;\n var RUNNING_STATE = 2;\n var ONE_SPACE = ' ';\n\n var rules = this.rules = {\n skip: [],\n cancel: [],\n join: []\n };\n\n function makeTruthyCssClassMap(classString) {\n if (!classString) {\n return null;\n }\n\n var keys = classString.split(ONE_SPACE);\n var map = Object.create(null);\n\n forEach(keys, function(key) {\n map[key] = true;\n });\n return map;\n }\n\n function hasMatchingClasses(newClassString, currentClassString) {\n if (newClassString && currentClassString) {\n var currentClassMap = makeTruthyCssClassMap(currentClassString);\n return newClassString.split(ONE_SPACE).some(function(className) {\n return currentClassMap[className];\n });\n }\n }\n\n function isAllowed(ruleType, currentAnimation, previousAnimation) {\n return rules[ruleType].some(function(fn) {\n return fn(currentAnimation, previousAnimation);\n });\n }\n\n function hasAnimationClasses(animation, and) {\n var a = (animation.addClass || '').length > 0;\n var b = (animation.removeClass || '').length > 0;\n return and ? a && b : a || b;\n }\n\n rules.join.push(function(newAnimation, currentAnimation) {\n // if the new animation is class-based then we can just tack that on\n return !newAnimation.structural && hasAnimationClasses(newAnimation);\n });\n\n rules.skip.push(function(newAnimation, currentAnimation) {\n // there is no need to animate anything if no classes are being added and\n // there is no structural animation that will be triggered\n return !newAnimation.structural && !hasAnimationClasses(newAnimation);\n });\n\n rules.skip.push(function(newAnimation, currentAnimation) {\n // why should we trigger a new structural animation if the element will\n // be removed from the DOM anyway?\n return currentAnimation.event === 'leave' && newAnimation.structural;\n });\n\n rules.skip.push(function(newAnimation, currentAnimation) {\n // if there is an ongoing current animation then don't even bother running the class-based animation\n return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;\n });\n\n rules.cancel.push(function(newAnimation, currentAnimation) {\n // there can never be two structural animations running at the same time\n return currentAnimation.structural && newAnimation.structural;\n });\n\n rules.cancel.push(function(newAnimation, currentAnimation) {\n // if the previous animation is already running, but the new animation will\n // be triggered, but the new animation is structural\n return currentAnimation.state === RUNNING_STATE && newAnimation.structural;\n });\n\n rules.cancel.push(function(newAnimation, currentAnimation) {\n // cancel the animation if classes added / removed in both animation cancel each other out,\n // but only if the current animation isn't structural\n\n if (currentAnimation.structural) return false;\n\n var nA = newAnimation.addClass;\n var nR = newAnimation.removeClass;\n var cA = currentAnimation.addClass;\n var cR = currentAnimation.removeClass;\n\n // early detection to save the global CPU shortage :)\n if ((isUndefined(nA) && isUndefined(nR)) || (isUndefined(cA) && isUndefined(cR))) {\n return false;\n }\n\n return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);\n });\n\n this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$Map',\n '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',\n '$$isDocumentHidden',\n function($$rAF, $rootScope, $rootElement, $document, $$Map,\n $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow,\n $$isDocumentHidden) {\n\n var activeAnimationsLookup = new $$Map();\n var disabledElementsLookup = new $$Map();\n var animationsEnabled = null;\n\n function postDigestTaskFactory() {\n var postDigestCalled = false;\n return function(fn) {\n // we only issue a call to postDigest before\n // it has first passed. This prevents any callbacks\n // from not firing once the animation has completed\n // since it will be out of the digest cycle.\n if (postDigestCalled) {\n fn();\n } else {\n $rootScope.$$postDigest(function() {\n postDigestCalled = true;\n fn();\n });\n }\n };\n }\n\n // Wait until all directive and route-related templates are downloaded and\n // compiled. The $templateRequest.totalPendingRequests variable keeps track of\n // all of the remote templates being currently downloaded. If there are no\n // templates currently downloading then the watcher will still fire anyway.\n var deregisterWatch = $rootScope.$watch(\n function() { return $templateRequest.totalPendingRequests === 0; },\n function(isEmpty) {\n if (!isEmpty) return;\n deregisterWatch();\n\n // Now that all templates have been downloaded, $animate will wait until\n // the post digest queue is empty before enabling animations. By having two\n // calls to $postDigest calls we can ensure that the flag is enabled at the\n // very end of the post digest queue. Since all of the animations in $animate\n // use $postDigest, it's important that the code below executes at the end.\n // This basically means that the page is fully downloaded and compiled before\n // any animations are triggered.\n $rootScope.$$postDigest(function() {\n $rootScope.$$postDigest(function() {\n // we check for null directly in the event that the application already called\n // .enabled() with whatever arguments that it provided it with\n if (animationsEnabled === null) {\n animationsEnabled = true;\n }\n });\n });\n }\n );\n\n var callbackRegistry = Object.create(null);\n\n // remember that the `customFilter`/`classNameFilter` are set during the\n // provider/config stage therefore we can optimize here and setup helper functions\n var customFilter = $animateProvider.customFilter();\n var classNameFilter = $animateProvider.classNameFilter();\n var returnTrue = function() { return true; };\n\n var isAnimatableByFilter = customFilter || returnTrue;\n var isAnimatableClassName = !classNameFilter ? returnTrue : function(node, options) {\n var className = [node.getAttribute('class'), options.addClass, options.removeClass].join(' ');\n return classNameFilter.test(className);\n };\n\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n function normalizeAnimationDetails(element, animation) {\n return mergeAnimationDetails(element, animation, {});\n }\n\n // IE9-11 has no method \"contains\" in SVG element and in Node.prototype. Bug #10259.\n var contains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return this === arg || !!(this.compareDocumentPosition(arg) & 16);\n };\n\n function findCallbacks(targetParentNode, targetNode, event) {\n var matches = [];\n var entries = callbackRegistry[event];\n if (entries) {\n forEach(entries, function(entry) {\n if (contains.call(entry.node, targetNode)) {\n matches.push(entry.callback);\n } else if (event === 'leave' && contains.call(entry.node, targetParentNode)) {\n matches.push(entry.callback);\n }\n });\n }\n\n return matches;\n }\n\n function filterFromRegistry(list, matchContainer, matchCallback) {\n var containerNode = extractElementNode(matchContainer);\n return list.filter(function(entry) {\n var isMatch = entry.node === containerNode &&\n (!matchCallback || entry.callback === matchCallback);\n return !isMatch;\n });\n }\n\n function cleanupEventListeners(phase, node) {\n if (phase === 'close' && !node.parentNode) {\n // If the element is not attached to a parentNode, it has been removed by\n // the domOperation, and we can safely remove the event callbacks\n $animate.off(node);\n }\n }\n\n var $animate = {\n on: function(event, container, callback) {\n var node = extractElementNode(container);\n callbackRegistry[event] = callbackRegistry[event] || [];\n callbackRegistry[event].push({\n node: node,\n callback: callback\n });\n\n // Remove the callback when the element is removed from the DOM\n jqLite(container).on('$destroy', function() {\n var animationDetails = activeAnimationsLookup.get(node);\n\n if (!animationDetails) {\n // If there's an animation ongoing, the callback calling code will remove\n // the event listeners. If we'd remove here, the callbacks would be removed\n // before the animation ends\n $animate.off(event, container, callback);\n }\n });\n },\n\n off: function(event, container, callback) {\n if (arguments.length === 1 && !isString(arguments[0])) {\n container = arguments[0];\n for (var eventType in callbackRegistry) {\n callbackRegistry[eventType] = filterFromRegistry(callbackRegistry[eventType], container);\n }\n\n return;\n }\n\n var entries = callbackRegistry[event];\n if (!entries) return;\n\n callbackRegistry[event] = arguments.length === 1\n ? null\n : filterFromRegistry(entries, container, callback);\n },\n\n pin: function(element, parentElement) {\n assertArg(isElement(element), 'element', 'not an element');\n assertArg(isElement(parentElement), 'parentElement', 'not an element');\n element.data(NG_ANIMATE_PIN_DATA, parentElement);\n },\n\n push: function(element, event, options, domOperation) {\n options = options || {};\n options.domOperation = domOperation;\n return queueAnimation(element, event, options);\n },\n\n // this method has four signatures:\n // () - global getter\n // (bool) - global setter\n // (element) - element getter\n // (element, bool) - element setter\n enabled: function(element, bool) {\n var argCount = arguments.length;\n\n if (argCount === 0) {\n // () - Global getter\n bool = !!animationsEnabled;\n } else {\n var hasElement = isElement(element);\n\n if (!hasElement) {\n // (bool) - Global setter\n bool = animationsEnabled = !!element;\n } else {\n var node = getDomNode(element);\n\n if (argCount === 1) {\n // (element) - Element getter\n bool = !disabledElementsLookup.get(node);\n } else {\n // (element, bool) - Element setter\n disabledElementsLookup.set(node, !bool);\n }\n }\n }\n\n return bool;\n }\n };\n\n return $animate;\n\n function queueAnimation(originalElement, event, initialOptions) {\n // we always make a copy of the options since\n // there should never be any side effects on\n // the input data when running `$animateCss`.\n var options = copy(initialOptions);\n\n var element = stripCommentsFromElement(originalElement);\n var node = getDomNode(element);\n var parentNode = node && node.parentNode;\n\n options = prepareAnimationOptions(options);\n\n // we create a fake runner with a working promise.\n // These methods will become available after the digest has passed\n var runner = new $$AnimateRunner();\n\n // this is used to trigger callbacks in postDigest mode\n var runInNextPostDigestOrNow = postDigestTaskFactory();\n\n if (isArray(options.addClass)) {\n options.addClass = options.addClass.join(' ');\n }\n\n if (options.addClass && !isString(options.addClass)) {\n options.addClass = null;\n }\n\n if (isArray(options.removeClass)) {\n options.removeClass = options.removeClass.join(' ');\n }\n\n if (options.removeClass && !isString(options.removeClass)) {\n options.removeClass = null;\n }\n\n if (options.from && !isObject(options.from)) {\n options.from = null;\n }\n\n if (options.to && !isObject(options.to)) {\n options.to = null;\n }\n\n // If animations are hard-disabled for the whole application there is no need to continue.\n // There are also situations where a directive issues an animation for a jqLite wrapper that\n // contains only comment nodes. In this case, there is no way we can perform an animation.\n if (!animationsEnabled ||\n !node ||\n !isAnimatableByFilter(node, event, initialOptions) ||\n !isAnimatableClassName(node, options)) {\n close();\n return runner;\n }\n\n var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\n var documentHidden = $$isDocumentHidden();\n\n // This is a hard disable of all animations the element itself, therefore there is no need to\n // continue further past this point if not enabled\n // Animations are also disabled if the document is currently hidden (page is not visible\n // to the user), because browsers slow down or do not flush calls to requestAnimationFrame\n var skipAnimations = documentHidden || disabledElementsLookup.get(node);\n var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};\n var hasExistingAnimation = !!existingAnimation.state;\n\n // there is no point in traversing the same collection of parent ancestors if a followup\n // animation will be run on the same element that already did all that checking work\n if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state !== PRE_DIGEST_STATE)) {\n skipAnimations = !areAnimationsAllowed(node, parentNode, event);\n }\n\n if (skipAnimations) {\n // Callbacks should fire even if the document is hidden (regression fix for issue #14120)\n if (documentHidden) notifyProgress(runner, event, 'start');\n close();\n if (documentHidden) notifyProgress(runner, event, 'close');\n return runner;\n }\n\n if (isStructural) {\n closeChildAnimations(node);\n }\n\n var newAnimation = {\n structural: isStructural,\n element: element,\n event: event,\n addClass: options.addClass,\n removeClass: options.removeClass,\n close: close,\n options: options,\n runner: runner\n };\n\n if (hasExistingAnimation) {\n var skipAnimationFlag = isAllowed('skip', newAnimation, existingAnimation);\n if (skipAnimationFlag) {\n if (existingAnimation.state === RUNNING_STATE) {\n close();\n return runner;\n } else {\n mergeAnimationDetails(element, existingAnimation, newAnimation);\n return existingAnimation.runner;\n }\n }\n var cancelAnimationFlag = isAllowed('cancel', newAnimation, existingAnimation);\n if (cancelAnimationFlag) {\n if (existingAnimation.state === RUNNING_STATE) {\n // this will end the animation right away and it is safe\n // to do so since the animation is already running and the\n // runner callback code will run in async\n existingAnimation.runner.end();\n } else if (existingAnimation.structural) {\n // this means that the animation is queued into a digest, but\n // hasn't started yet. Therefore it is safe to run the close\n // method which will call the runner methods in async.\n existingAnimation.close();\n } else {\n // this will merge the new animation options into existing animation options\n mergeAnimationDetails(element, existingAnimation, newAnimation);\n\n return existingAnimation.runner;\n }\n } else {\n // a joined animation means that this animation will take over the existing one\n // so an example would involve a leave animation taking over an enter. Then when\n // the postDigest kicks in the enter will be ignored.\n var joinAnimationFlag = isAllowed('join', newAnimation, existingAnimation);\n if (joinAnimationFlag) {\n if (existingAnimation.state === RUNNING_STATE) {\n normalizeAnimationDetails(element, newAnimation);\n } else {\n applyGeneratedPreparationClasses(element, isStructural ? event : null, options);\n\n event = newAnimation.event = existingAnimation.event;\n options = mergeAnimationDetails(element, existingAnimation, newAnimation);\n\n //we return the same runner since only the option values of this animation will\n //be fed into the `existingAnimation`.\n return existingAnimation.runner;\n }\n }\n }\n } else {\n // normalization in this case means that it removes redundant CSS classes that\n // already exist (addClass) or do not exist (removeClass) on the element\n normalizeAnimationDetails(element, newAnimation);\n }\n\n // when the options are merged and cleaned up we may end up not having to do\n // an animation at all, therefore we should check this before issuing a post\n // digest callback. Structural animations will always run no matter what.\n var isValidAnimation = newAnimation.structural;\n if (!isValidAnimation) {\n // animate (from/to) can be quickly checked first, otherwise we check if any classes are present\n isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)\n || hasAnimationClasses(newAnimation);\n }\n\n if (!isValidAnimation) {\n close();\n clearElementAnimationState(node);\n return runner;\n }\n\n // the counter keeps track of cancelled animations\n var counter = (existingAnimation.counter || 0) + 1;\n newAnimation.counter = counter;\n\n markElementAnimationState(node, PRE_DIGEST_STATE, newAnimation);\n\n $rootScope.$$postDigest(function() {\n // It is possible that the DOM nodes inside `originalElement` have been replaced. This can\n // happen if the animated element is a transcluded clone and also has a `templateUrl`\n // directive on it. Therefore, we must recreate `element` in order to interact with the\n // actual DOM nodes.\n // Note: We still need to use the old `node` for certain things, such as looking up in\n // HashMaps where it was used as the key.\n\n element = stripCommentsFromElement(originalElement);\n\n var animationDetails = activeAnimationsLookup.get(node);\n var animationCancelled = !animationDetails;\n animationDetails = animationDetails || {};\n\n // if addClass/removeClass is called before something like enter then the\n // registered parent element may not be present. The code below will ensure\n // that a final value for parent element is obtained\n var parentElement = element.parent() || [];\n\n // animate/structural/class-based animations all have requirements. Otherwise there\n // is no point in performing an animation. The parent node must also be set.\n var isValidAnimation = parentElement.length > 0\n && (animationDetails.event === 'animate'\n || animationDetails.structural\n || hasAnimationClasses(animationDetails));\n\n // this means that the previous animation was cancelled\n // even if the follow-up animation is the same event\n if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {\n // if another animation did not take over then we need\n // to make sure that the domOperation and options are\n // handled accordingly\n if (animationCancelled) {\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n }\n\n // if the event changed from something like enter to leave then we do\n // it, otherwise if it's the same then the end result will be the same too\n if (animationCancelled || (isStructural && animationDetails.event !== event)) {\n options.domOperation();\n runner.end();\n }\n\n // in the event that the element animation was not cancelled or a follow-up animation\n // isn't allowed to animate from here then we need to clear the state of the element\n // so that any future animations won't read the expired animation data.\n if (!isValidAnimation) {\n clearElementAnimationState(node);\n }\n\n return;\n }\n\n // this combined multiple class to addClass / removeClass into a setClass event\n // so long as a structural event did not take over the animation\n event = !animationDetails.structural && hasAnimationClasses(animationDetails, true)\n ? 'setClass'\n : animationDetails.event;\n\n markElementAnimationState(node, RUNNING_STATE);\n var realRunner = $$animation(element, event, animationDetails.options);\n\n // this will update the runner's flow-control events based on\n // the `realRunner` object.\n runner.setHost(realRunner);\n notifyProgress(runner, event, 'start', {});\n\n realRunner.done(function(status) {\n close(!status);\n var animationDetails = activeAnimationsLookup.get(node);\n if (animationDetails && animationDetails.counter === counter) {\n clearElementAnimationState(node);\n }\n notifyProgress(runner, event, 'close', {});\n });\n });\n\n return runner;\n\n function notifyProgress(runner, event, phase, data) {\n runInNextPostDigestOrNow(function() {\n var callbacks = findCallbacks(parentNode, node, event);\n if (callbacks.length) {\n // do not optimize this call here to RAF because\n // we don't know how heavy the callback code here will\n // be and if this code is buffered then this can\n // lead to a performance regression.\n $$rAF(function() {\n forEach(callbacks, function(callback) {\n callback(element, phase, data);\n });\n cleanupEventListeners(phase, node);\n });\n } else {\n cleanupEventListeners(phase, node);\n }\n });\n runner.progress(event, phase, data);\n }\n\n function close(reject) {\n clearGeneratedClasses(element, options);\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n options.domOperation();\n runner.complete(!reject);\n }\n }\n\n function closeChildAnimations(node) {\n var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');\n forEach(children, function(child) {\n var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME), 10);\n var animationDetails = activeAnimationsLookup.get(child);\n if (animationDetails) {\n switch (state) {\n case RUNNING_STATE:\n animationDetails.runner.end();\n /* falls through */\n case PRE_DIGEST_STATE:\n activeAnimationsLookup.delete(child);\n break;\n }\n }\n });\n }\n\n function clearElementAnimationState(node) {\n node.removeAttribute(NG_ANIMATE_ATTR_NAME);\n activeAnimationsLookup.delete(node);\n }\n\n /**\n * This fn returns false if any of the following is true:\n * a) animations on any parent element are disabled, and animations on the element aren't explicitly allowed\n * b) a parent element has an ongoing structural animation, and animateChildren is false\n * c) the element is not a child of the body\n * d) the element is not a child of the $rootElement\n */\n function areAnimationsAllowed(node, parentNode, event) {\n var bodyNode = $document[0].body;\n var rootNode = getDomNode($rootElement);\n\n var bodyNodeDetected = (node === bodyNode) || node.nodeName === 'HTML';\n var rootNodeDetected = (node === rootNode);\n var parentAnimationDetected = false;\n var elementDisabled = disabledElementsLookup.get(node);\n var animateChildren;\n\n var parentHost = jqLite.data(node, NG_ANIMATE_PIN_DATA);\n if (parentHost) {\n parentNode = getDomNode(parentHost);\n }\n\n while (parentNode) {\n if (!rootNodeDetected) {\n // AngularJS doesn't want to attempt to animate elements outside of the application\n // therefore we need to ensure that the rootElement is an ancestor of the current element\n rootNodeDetected = (parentNode === rootNode);\n }\n\n if (parentNode.nodeType !== ELEMENT_NODE) {\n // no point in inspecting the #document element\n break;\n }\n\n var details = activeAnimationsLookup.get(parentNode) || {};\n // either an enter, leave or move animation will commence\n // therefore we can't allow any animations to take place\n // but if a parent animation is class-based then that's ok\n if (!parentAnimationDetected) {\n var parentNodeDisabled = disabledElementsLookup.get(parentNode);\n\n if (parentNodeDisabled === true && elementDisabled !== false) {\n // disable animations if the user hasn't explicitly enabled animations on the\n // current element\n elementDisabled = true;\n // element is disabled via parent element, no need to check anything else\n break;\n } else if (parentNodeDisabled === false) {\n elementDisabled = false;\n }\n parentAnimationDetected = details.structural;\n }\n\n if (isUndefined(animateChildren) || animateChildren === true) {\n var value = jqLite.data(parentNode, NG_ANIMATE_CHILDREN_DATA);\n if (isDefined(value)) {\n animateChildren = value;\n }\n }\n\n // there is no need to continue traversing at this point\n if (parentAnimationDetected && animateChildren === false) break;\n\n if (!bodyNodeDetected) {\n // we also need to ensure that the element is or will be a part of the body element\n // otherwise it is pointless to even issue an animation to be rendered\n bodyNodeDetected = (parentNode === bodyNode);\n }\n\n if (bodyNodeDetected && rootNodeDetected) {\n // If both body and root have been found, any other checks are pointless,\n // as no animation data should live outside the application\n break;\n }\n\n if (!rootNodeDetected) {\n // If `rootNode` is not detected, check if `parentNode` is pinned to another element\n parentHost = jqLite.data(parentNode, NG_ANIMATE_PIN_DATA);\n if (parentHost) {\n // The pin target element becomes the next parent element\n parentNode = getDomNode(parentHost);\n continue;\n }\n }\n\n parentNode = parentNode.parentNode;\n }\n\n var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true;\n return allowAnimation && rootNodeDetected && bodyNodeDetected;\n }\n\n function markElementAnimationState(node, state, details) {\n details = details || {};\n details.state = state;\n\n node.setAttribute(NG_ANIMATE_ATTR_NAME, state);\n\n var oldValue = activeAnimationsLookup.get(node);\n var newValue = oldValue\n ? extend(oldValue, details)\n : details;\n activeAnimationsLookup.set(node, newValue);\n }\n }];\n}];\n\n/* exported $$AnimationProvider */\n\nvar $$AnimationProvider = ['$animateProvider', /** @this */ function($animateProvider) {\n var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';\n\n var drivers = this.drivers = [];\n\n var RUNNER_STORAGE_KEY = '$$animationRunner';\n\n function setRunner(element, runner) {\n element.data(RUNNER_STORAGE_KEY, runner);\n }\n\n function removeRunner(element) {\n element.removeData(RUNNER_STORAGE_KEY);\n }\n\n function getRunner(element) {\n return element.data(RUNNER_STORAGE_KEY);\n }\n\n this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$Map', '$$rAFScheduler',\n function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$Map, $$rAFScheduler) {\n\n var animationQueue = [];\n var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);\n\n function sortAnimations(animations) {\n var tree = { children: [] };\n var i, lookup = new $$Map();\n\n // this is done first beforehand so that the map\n // is filled with a list of the elements that will be animated\n for (i = 0; i < animations.length; i++) {\n var animation = animations[i];\n lookup.set(animation.domNode, animations[i] = {\n domNode: animation.domNode,\n fn: animation.fn,\n children: []\n });\n }\n\n for (i = 0; i < animations.length; i++) {\n processNode(animations[i]);\n }\n\n return flatten(tree);\n\n function processNode(entry) {\n if (entry.processed) return entry;\n entry.processed = true;\n\n var elementNode = entry.domNode;\n var parentNode = elementNode.parentNode;\n lookup.set(elementNode, entry);\n\n var parentEntry;\n while (parentNode) {\n parentEntry = lookup.get(parentNode);\n if (parentEntry) {\n if (!parentEntry.processed) {\n parentEntry = processNode(parentEntry);\n }\n break;\n }\n parentNode = parentNode.parentNode;\n }\n\n (parentEntry || tree).children.push(entry);\n return entry;\n }\n\n function flatten(tree) {\n var result = [];\n var queue = [];\n var i;\n\n for (i = 0; i < tree.children.length; i++) {\n queue.push(tree.children[i]);\n }\n\n var remainingLevelEntries = queue.length;\n var nextLevelEntries = 0;\n var row = [];\n\n for (i = 0; i < queue.length; i++) {\n var entry = queue[i];\n if (remainingLevelEntries <= 0) {\n remainingLevelEntries = nextLevelEntries;\n nextLevelEntries = 0;\n result.push(row);\n row = [];\n }\n row.push(entry.fn);\n entry.children.forEach(function(childEntry) {\n nextLevelEntries++;\n queue.push(childEntry);\n });\n remainingLevelEntries--;\n }\n\n if (row.length) {\n result.push(row);\n }\n\n return result;\n }\n }\n\n // TODO(matsko): document the signature in a better way\n return function(element, event, options) {\n options = prepareAnimationOptions(options);\n var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;\n\n // there is no animation at the current moment, however\n // these runner methods will get later updated with the\n // methods leading into the driver's end/cancel methods\n // for now they just stop the animation from starting\n var runner = new $$AnimateRunner({\n end: function() { close(); },\n cancel: function() { close(true); }\n });\n\n if (!drivers.length) {\n close();\n return runner;\n }\n\n setRunner(element, runner);\n\n var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));\n var tempClasses = options.tempClasses;\n if (tempClasses) {\n classes += ' ' + tempClasses;\n options.tempClasses = null;\n }\n\n var prepareClassName;\n if (isStructural) {\n prepareClassName = 'ng-' + event + PREPARE_CLASS_SUFFIX;\n $$jqLite.addClass(element, prepareClassName);\n }\n\n animationQueue.push({\n // this data is used by the postDigest code and passed into\n // the driver step function\n element: element,\n classes: classes,\n event: event,\n structural: isStructural,\n options: options,\n beforeStart: beforeStart,\n close: close\n });\n\n element.on('$destroy', handleDestroyedElement);\n\n // we only want there to be one function called within the post digest\n // block. This way we can group animations for all the animations that\n // were apart of the same postDigest flush call.\n if (animationQueue.length > 1) return runner;\n\n $rootScope.$$postDigest(function() {\n var animations = [];\n forEach(animationQueue, function(entry) {\n // the element was destroyed early on which removed the runner\n // form its storage. This means we can't animate this element\n // at all and it already has been closed due to destruction.\n if (getRunner(entry.element)) {\n animations.push(entry);\n } else {\n entry.close();\n }\n });\n\n // now any future animations will be in another postDigest\n animationQueue.length = 0;\n\n var groupedAnimations = groupAnimations(animations);\n var toBeSortedAnimations = [];\n\n forEach(groupedAnimations, function(animationEntry) {\n toBeSortedAnimations.push({\n domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element),\n fn: function triggerAnimationStart() {\n // it's important that we apply the `ng-animate` CSS class and the\n // temporary classes before we do any driver invoking since these\n // CSS classes may be required for proper CSS detection.\n animationEntry.beforeStart();\n\n var startAnimationFn, closeFn = animationEntry.close;\n\n // in the event that the element was removed before the digest runs or\n // during the RAF sequencing then we should not trigger the animation.\n var targetElement = animationEntry.anchors\n ? (animationEntry.from.element || animationEntry.to.element)\n : animationEntry.element;\n\n if (getRunner(targetElement)) {\n var operation = invokeFirstDriver(animationEntry);\n if (operation) {\n startAnimationFn = operation.start;\n }\n }\n\n if (!startAnimationFn) {\n closeFn();\n } else {\n var animationRunner = startAnimationFn();\n animationRunner.done(function(status) {\n closeFn(!status);\n });\n updateAnimationRunners(animationEntry, animationRunner);\n }\n }\n });\n });\n\n // we need to sort each of the animations in order of parent to child\n // relationships. This ensures that the child classes are applied at the\n // right time.\n $$rAFScheduler(sortAnimations(toBeSortedAnimations));\n });\n\n return runner;\n\n // TODO(matsko): change to reference nodes\n function getAnchorNodes(node) {\n var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';\n var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)\n ? [node]\n : node.querySelectorAll(SELECTOR);\n var anchors = [];\n forEach(items, function(node) {\n var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);\n if (attr && attr.length) {\n anchors.push(node);\n }\n });\n return anchors;\n }\n\n function groupAnimations(animations) {\n var preparedAnimations = [];\n var refLookup = {};\n forEach(animations, function(animation, index) {\n var element = animation.element;\n var node = getDomNode(element);\n var event = animation.event;\n var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;\n var anchorNodes = animation.structural ? getAnchorNodes(node) : [];\n\n if (anchorNodes.length) {\n var direction = enterOrMove ? 'to' : 'from';\n\n forEach(anchorNodes, function(anchor) {\n var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);\n refLookup[key] = refLookup[key] || {};\n refLookup[key][direction] = {\n animationID: index,\n element: jqLite(anchor)\n };\n });\n } else {\n preparedAnimations.push(animation);\n }\n });\n\n var usedIndicesLookup = {};\n var anchorGroups = {};\n forEach(refLookup, function(operations, key) {\n var from = operations.from;\n var to = operations.to;\n\n if (!from || !to) {\n // only one of these is set therefore we can't have an\n // anchor animation since all three pieces are required\n var index = from ? from.animationID : to.animationID;\n var indexKey = index.toString();\n if (!usedIndicesLookup[indexKey]) {\n usedIndicesLookup[indexKey] = true;\n preparedAnimations.push(animations[index]);\n }\n return;\n }\n\n var fromAnimation = animations[from.animationID];\n var toAnimation = animations[to.animationID];\n var lookupKey = from.animationID.toString();\n if (!anchorGroups[lookupKey]) {\n var group = anchorGroups[lookupKey] = {\n structural: true,\n beforeStart: function() {\n fromAnimation.beforeStart();\n toAnimation.beforeStart();\n },\n close: function() {\n fromAnimation.close();\n toAnimation.close();\n },\n classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),\n from: fromAnimation,\n to: toAnimation,\n anchors: [] // TODO(matsko): change to reference nodes\n };\n\n // the anchor animations require that the from and to elements both have at least\n // one shared CSS class which effectively marries the two elements together to use\n // the same animation driver and to properly sequence the anchor animation.\n if (group.classes.length) {\n preparedAnimations.push(group);\n } else {\n preparedAnimations.push(fromAnimation);\n preparedAnimations.push(toAnimation);\n }\n }\n\n anchorGroups[lookupKey].anchors.push({\n 'out': from.element, 'in': to.element\n });\n });\n\n return preparedAnimations;\n }\n\n function cssClassesIntersection(a,b) {\n a = a.split(' ');\n b = b.split(' ');\n var matches = [];\n\n for (var i = 0; i < a.length; i++) {\n var aa = a[i];\n if (aa.substring(0,3) === 'ng-') continue;\n\n for (var j = 0; j < b.length; j++) {\n if (aa === b[j]) {\n matches.push(aa);\n break;\n }\n }\n }\n\n return matches.join(' ');\n }\n\n function invokeFirstDriver(animationDetails) {\n // we loop in reverse order since the more general drivers (like CSS and JS)\n // may attempt more elements, but custom drivers are more particular\n for (var i = drivers.length - 1; i >= 0; i--) {\n var driverName = drivers[i];\n var factory = $injector.get(driverName);\n var driver = factory(animationDetails);\n if (driver) {\n return driver;\n }\n }\n }\n\n function beforeStart() {\n element.addClass(NG_ANIMATE_CLASSNAME);\n if (tempClasses) {\n $$jqLite.addClass(element, tempClasses);\n }\n if (prepareClassName) {\n $$jqLite.removeClass(element, prepareClassName);\n prepareClassName = null;\n }\n }\n\n function updateAnimationRunners(animation, newRunner) {\n if (animation.from && animation.to) {\n update(animation.from.element);\n update(animation.to.element);\n } else {\n update(animation.element);\n }\n\n function update(element) {\n var runner = getRunner(element);\n if (runner) runner.setHost(newRunner);\n }\n }\n\n function handleDestroyedElement() {\n var runner = getRunner(element);\n if (runner && (event !== 'leave' || !options.$$domOperationFired)) {\n runner.end();\n }\n }\n\n function close(rejected) {\n element.off('$destroy', handleDestroyedElement);\n removeRunner(element);\n\n applyAnimationClasses(element, options);\n applyAnimationStyles(element, options);\n options.domOperation();\n\n if (tempClasses) {\n $$jqLite.removeClass(element, tempClasses);\n }\n\n element.removeClass(NG_ANIMATE_CLASSNAME);\n runner.complete(!rejected);\n }\n };\n }];\n}];\n\n/**\n * @ngdoc directive\n * @name ngAnimateSwap\n * @restrict A\n * @scope\n *\n * @description\n *\n * ngAnimateSwap is a animation-oriented directive that allows for the container to\n * be removed and entered in whenever the associated expression changes. A\n * common usecase for this directive is a rotating banner or slider component which\n * contains one image being present at a time. When the active image changes\n * then the old image will perform a `leave` animation and the new element\n * will be inserted via an `enter` animation.\n *\n * @animations\n * | Animation | Occurs |\n * |----------------------------------|--------------------------------------|\n * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |\n * | {@link ng.$animate#leave leave} | when the old element is removed from the DOM |\n *\n * @example\n * \n * \n *
\n *
\n * {{ number }}\n *
\n *
\n *
\n * \n * angular.module('ngAnimateSwapExample', ['ngAnimate'])\n * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) {\n * $scope.number = 0;\n * $interval(function() {\n * $scope.number++;\n * }, 1000);\n *\n * var colors = ['red','blue','green','yellow','orange'];\n * $scope.colorClass = function(number) {\n * return colors[number % colors.length];\n * };\n * }]);\n * \n * \n * .container {\n * height:250px;\n * width:250px;\n * position:relative;\n * overflow:hidden;\n * border:2px solid black;\n * }\n * .container .cell {\n * font-size:150px;\n * text-align:center;\n * line-height:250px;\n * position:absolute;\n * top:0;\n * left:0;\n * right:0;\n * border-bottom:2px solid black;\n * }\n * .swap-animation.ng-enter, .swap-animation.ng-leave {\n * transition:0.5s linear all;\n * }\n * .swap-animation.ng-enter {\n * top:-250px;\n * }\n * .swap-animation.ng-enter-active {\n * top:0px;\n * }\n * .swap-animation.ng-leave {\n * top:0px;\n * }\n * .swap-animation.ng-leave-active {\n * top:250px;\n * }\n * .red { background:red; }\n * .green { background:green; }\n * .blue { background:blue; }\n * .yellow { background:yellow; }\n * .orange { background:orange; }\n * \n *
\n */\nvar ngAnimateSwapDirective = ['$animate', '$rootScope', function($animate, $rootScope) {\n return {\n restrict: 'A',\n transclude: 'element',\n terminal: true,\n priority: 600, // we use 600 here to ensure that the directive is caught before others\n link: function(scope, $element, attrs, ctrl, $transclude) {\n var previousElement, previousScope;\n scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) {\n if (previousElement) {\n $animate.leave(previousElement);\n }\n if (previousScope) {\n previousScope.$destroy();\n previousScope = null;\n }\n if (value || value === 0) {\n previousScope = scope.$new();\n $transclude(previousScope, function(element) {\n previousElement = element;\n $animate.enter(element, null, $element);\n });\n }\n });\n }\n };\n}];\n\n/**\n * @ngdoc module\n * @name ngAnimate\n * @description\n *\n * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via\n * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an AngularJS app.\n *\n * ## Usage\n * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based\n * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For\n * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within\n * the HTML element that the animation will be triggered on.\n *\n * ## Directive Support\n * The following directives are \"animation aware\":\n *\n * | Directive | Supported Animations |\n * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|\n * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move |\n * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave |\n * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave |\n * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave |\n * | {@link ng.directive:ngIf#animations ngIf} | enter and leave |\n * | {@link ng.directive:ngClass#animations ngClass} | add and remove (the CSS class(es) present) |\n * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide} | add and remove (the ng-hide class value) |\n * | {@link ng.directive:form#animations form} & {@link ng.directive:ngModel#animations ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) |\n * | {@link module:ngMessages#animations ngMessages} | add and remove (ng-active & ng-inactive) |\n * | {@link module:ngMessages#animations ngMessage} | enter and leave |\n *\n * (More information can be found by visiting each the documentation associated with each directive.)\n *\n * ## CSS-based Animations\n *\n * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML\n * and CSS code we can create an animation that will be picked up by AngularJS when an underlying directive performs an operation.\n *\n * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:\n *\n * ```html\n *
\n * Fade me in out\n *
\n * \n * \n * ```\n *\n * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:\n *\n * ```css\n * /* The starting CSS styles for the enter animation */\n * .fade.ng-enter {\n * transition:0.5s linear all;\n * opacity:0;\n * }\n *\n * /* The finishing CSS styles for the enter animation */\n * .fade.ng-enter.ng-enter-active {\n * opacity:1;\n * }\n * ```\n *\n * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two\n * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition\n * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards.\n *\n * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions:\n *\n * ```css\n * /* now the element will fade out before it is removed from the DOM */\n * .fade.ng-leave {\n * transition:0.5s linear all;\n * opacity:1;\n * }\n * .fade.ng-leave.ng-leave-active {\n * opacity:0;\n * }\n * ```\n *\n * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:\n *\n * ```css\n * /* there is no need to define anything inside of the destination\n * CSS class since the keyframe will take charge of the animation */\n * .fade.ng-leave {\n * animation: my_fade_animation 0.5s linear;\n * -webkit-animation: my_fade_animation 0.5s linear;\n * }\n *\n * @keyframes my_fade_animation {\n * from { opacity:1; }\n * to { opacity:0; }\n * }\n *\n * @-webkit-keyframes my_fade_animation {\n * from { opacity:1; }\n * to { opacity:0; }\n * }\n * ```\n *\n * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.\n *\n * ### CSS Class-based Animations\n *\n * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different\n * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added\n * and removed.\n *\n * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:\n *\n * ```html\n *
\n * Show and hide me\n *
\n * \n *\n * \n * ```\n *\n * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since\n * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.\n *\n * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation\n * with CSS styles.\n *\n * ```html\n *
\n * Highlight this box\n *
\n * \n *\n * \n * ```\n *\n * We can also make use of CSS keyframes by placing them within the CSS classes.\n *\n *\n * ### CSS Staggering Animations\n * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a\n * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be\n * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for\n * the animation. The style property expected within the stagger class can either be a **transition-delay** or an\n * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).\n *\n * ```css\n * .my-animation.ng-enter {\n * /* standard transition code */\n * transition: 1s linear all;\n * opacity:0;\n * }\n * .my-animation.ng-enter-stagger {\n * /* this will have a 100ms delay between each successive leave animation */\n * transition-delay: 0.1s;\n *\n * /* As of 1.4.4, this must always be set: it signals ngAnimate\n * to not accidentally inherit a delay property from another CSS class */\n * transition-duration: 0s;\n *\n * /* if you are using animations instead of transitions you should configure as follows:\n * animation-delay: 0.1s;\n * animation-duration: 0s; */\n * }\n * .my-animation.ng-enter.ng-enter-active {\n * /* standard transition styles */\n * opacity:1;\n * }\n * ```\n *\n * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations\n * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this\n * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation\n * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.\n *\n * The following code will issue the **ng-leave-stagger** event on the element provided:\n *\n * ```js\n * var kids = parent.children();\n *\n * $animate.leave(kids[0]); //stagger index=0\n * $animate.leave(kids[1]); //stagger index=1\n * $animate.leave(kids[2]); //stagger index=2\n * $animate.leave(kids[3]); //stagger index=3\n * $animate.leave(kids[4]); //stagger index=4\n *\n * window.requestAnimationFrame(function() {\n * //stagger has reset itself\n * $animate.leave(kids[5]); //stagger index=0\n * $animate.leave(kids[6]); //stagger index=1\n *\n * $scope.$digest();\n * });\n * ```\n *\n * Stagger animations are currently only supported within CSS-defined animations.\n *\n * ### The `ng-animate` CSS class\n *\n * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.\n * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).\n *\n * Therefore, animations can be applied to an element using this temporary class directly via CSS.\n *\n * ```css\n * .zipper.ng-animate {\n * transition:0.5s linear all;\n * }\n * .zipper.ng-enter {\n * opacity:0;\n * }\n * .zipper.ng-enter.ng-enter-active {\n * opacity:1;\n * }\n * .zipper.ng-leave {\n * opacity:1;\n * }\n * .zipper.ng-leave.ng-leave-active {\n * opacity:0;\n * }\n * ```\n *\n * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove\n * the CSS class once an animation has completed.)\n *\n *\n * ### The `ng-[event]-prepare` class\n *\n * This is a special class that can be used to prevent unwanted flickering / flash of content before\n * the actual animation starts. The class is added as soon as an animation is initialized, but removed\n * before the actual animation starts (after waiting for a $digest).\n * It is also only added for *structural* animations (`enter`, `move`, and `leave`).\n *\n * In practice, flickering can appear when nesting elements with structural animations such as `ngIf`\n * into elements that have class-based animations such as `ngClass`.\n *\n * ```html\n *
\n *
\n *
\n *
\n *
\n * ```\n *\n * It is possible that during the `enter` animation, the `.message` div will be briefly visible before it starts animating.\n * In that case, you can add styles to the CSS that make sure the element stays hidden before the animation starts:\n *\n * ```css\n * .message.ng-enter-prepare {\n * opacity: 0;\n * }\n *\n * ```\n *\n * ## JavaScript-based Animations\n *\n * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared\n * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the\n * `module.animation()` module function we can register the animation.\n *\n * Let's see an example of a enter/leave animation using `ngRepeat`:\n *\n * ```html\n *
\n * {{ item }}\n *
\n * ```\n *\n * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`:\n *\n * ```js\n * myModule.animation('.slide', [function() {\n * return {\n * // make note that other events (like addClass/removeClass)\n * // have different function input parameters\n * enter: function(element, doneFn) {\n * jQuery(element).fadeIn(1000, doneFn);\n *\n * // remember to call doneFn so that AngularJS\n * // knows that the animation has concluded\n * },\n *\n * move: function(element, doneFn) {\n * jQuery(element).fadeIn(1000, doneFn);\n * },\n *\n * leave: function(element, doneFn) {\n * jQuery(element).fadeOut(1000, doneFn);\n * }\n * }\n * }]);\n * ```\n *\n * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as\n * greensock.js and velocity.js.\n *\n * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define\n * our animations inside of the same registered animation, however, the function input arguments are a bit different:\n *\n * ```html\n *
\n * this box is moody\n *
\n * \n * \n * \n * ```\n *\n * ```js\n * myModule.animation('.colorful', [function() {\n * return {\n * addClass: function(element, className, doneFn) {\n * // do some cool animation and call the doneFn\n * },\n * removeClass: function(element, className, doneFn) {\n * // do some cool animation and call the doneFn\n * },\n * setClass: function(element, addedClass, removedClass, doneFn) {\n * // do some cool animation and call the doneFn\n * }\n * }\n * }]);\n * ```\n *\n * ## CSS + JS Animations Together\n *\n * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of AngularJS,\n * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore the example below will only result in **JS animations taking\n * charge of the animation**:\n *\n * ```html\n *
\n * Slide in and out\n *
\n * ```\n *\n * ```js\n * myModule.animation('.slide', [function() {\n * return {\n * enter: function(element, doneFn) {\n * jQuery(element).slideIn(1000, doneFn);\n * }\n * }\n * }]);\n * ```\n *\n * ```css\n * .slide.ng-enter {\n * transition:0.5s linear all;\n * transform:translateY(-100px);\n * }\n * .slide.ng-enter.ng-enter-active {\n * transform:translateY(0);\n * }\n * ```\n *\n * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can make up for the\n * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from\n * our own JS-based animation code:\n *\n * ```js\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element) {\n* // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.\n * return $animateCss(element, {\n * event: 'enter',\n * structural: true\n * });\n * }\n * }\n * }]);\n * ```\n *\n * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework.\n *\n * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or\n * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that\n * data into `$animateCss` directly:\n *\n * ```js\n * myModule.animation('.slide', ['$animateCss', function($animateCss) {\n * return {\n * enter: function(element) {\n * return $animateCss(element, {\n * event: 'enter',\n * structural: true,\n * addClass: 'maroon-setting',\n * from: { height:0 },\n * to: { height: 200 }\n * });\n * }\n * }\n * }]);\n * ```\n *\n * Now we can fill in the rest via our transition CSS code:\n *\n * ```css\n * /* the transition tells ngAnimate to make the animation happen */\n * .slide.ng-enter { transition:0.5s linear all; }\n *\n * /* this extra CSS class will be absorbed into the transition\n * since the $animateCss code is adding the class */\n * .maroon-setting { background:red; }\n * ```\n *\n * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over.\n *\n * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.\n *\n * ## Animation Anchoring (via `ng-animate-ref`)\n *\n * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between\n * structural areas of an application (like views) by pairing up elements using an attribute\n * called `ng-animate-ref`.\n *\n * Let's say for example we have two views that are managed by `ng-view` and we want to show\n * that there is a relationship between two components situated in within these views. By using the\n * `ng-animate-ref` attribute we can identify that the two components are paired together and we\n * can then attach an animation, which is triggered when the view changes.\n *\n * Say for example we have the following template code:\n *\n * ```html\n * \n *
\n *
\n *\n * \n * \n * \n * \n *\n * \n * \n * ```\n *\n * Now, when the view changes (once the link is clicked), ngAnimate will examine the\n * HTML contents to see if there is a match reference between any components in the view\n * that is leaving and the view that is entering. It will scan both the view which is being\n * removed (leave) and inserted (enter) to see if there are any paired DOM elements that\n * contain a matching ref value.\n *\n * The two images match since they share the same ref value. ngAnimate will now create a\n * transport element (which is a clone of the first image element) and it will then attempt\n * to animate to the position of the second image element in the next view. For the animation to\n * work a special CSS class called `ng-anchor` will be added to the transported element.\n *\n * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then\n * ngAnimate will handle the entire transition for us as well as the addition and removal of\n * any changes of CSS classes between the elements:\n *\n * ```css\n * .banner.ng-anchor {\n * /* this animation will last for 1 second since there are\n * two phases to the animation (an `in` and an `out` phase) */\n * transition:0.5s linear all;\n * }\n * ```\n *\n * We also **must** include animations for the views that are being entered and removed\n * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).\n *\n * ```css\n * .view-animation.ng-enter, .view-animation.ng-leave {\n * transition:0.5s linear all;\n * position:fixed;\n * left:0;\n * top:0;\n * width:100%;\n * }\n * .view-animation.ng-enter {\n * transform:translateX(100%);\n * }\n * .view-animation.ng-leave,\n * .view-animation.ng-enter.ng-enter-active {\n * transform:translateX(0%);\n * }\n * .view-animation.ng-leave.ng-leave-active {\n * transform:translateX(-100%);\n * }\n * ```\n *\n * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:\n * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away\n * from its origin. Once that animation is over then the `in` stage occurs which animates the\n * element to its destination. The reason why there are two animations is to give enough time\n * for the enter animation on the new element to be ready.\n *\n * The example above sets up a transition for both the in and out phases, but we can also target the out or\n * in phases directly via `ng-anchor-out` and `ng-anchor-in`.\n *\n * ```css\n * .banner.ng-anchor-out {\n * transition: 0.5s linear all;\n *\n * /* the scale will be applied during the out animation,\n * but will be animated away when the in animation runs */\n * transform: scale(1.2);\n * }\n *\n * .banner.ng-anchor-in {\n * transition: 1s linear all;\n * }\n * ```\n *\n *\n *\n *\n * ### Anchoring Demo\n *\n \n \n Home\n
\n
\n
\n
\n
\n \n angular.module('anchoringExample', ['ngAnimate', 'ngRoute'])\n .config(['$routeProvider', function($routeProvider) {\n $routeProvider.when('/', {\n templateUrl: 'home.html',\n controller: 'HomeController as home'\n });\n $routeProvider.when('/profile/:id', {\n templateUrl: 'profile.html',\n controller: 'ProfileController as profile'\n });\n }])\n .run(['$rootScope', function($rootScope) {\n $rootScope.records = [\n { id: 1, title: 'Miss Beulah Roob' },\n { id: 2, title: 'Trent Morissette' },\n { id: 3, title: 'Miss Ava Pouros' },\n { id: 4, title: 'Rod Pouros' },\n { id: 5, title: 'Abdul Rice' },\n { id: 6, title: 'Laurie Rutherford Sr.' },\n { id: 7, title: 'Nakia McLaughlin' },\n { id: 8, title: 'Jordon Blanda DVM' },\n { id: 9, title: 'Rhoda Hand' },\n { id: 10, title: 'Alexandrea Sauer' }\n ];\n }])\n .controller('HomeController', [function() {\n //empty\n }])\n .controller('ProfileController', ['$rootScope', '$routeParams',\n function ProfileController($rootScope, $routeParams) {\n var index = parseInt($routeParams.id, 10);\n var record = $rootScope.records[index - 1];\n\n this.title = record.title;\n this.id = record.id;\n }]);\n \n \n

Welcome to the home page

\n

Please click on an element

\n \n {{ record.title }}\n \n
\n \n
\n {{ profile.title }}\n
\n
\n \n .record {\n display:block;\n font-size:20px;\n }\n .profile {\n background:black;\n color:white;\n font-size:100px;\n }\n .view-container {\n position:relative;\n }\n .view-container > .view.ng-animate {\n position:absolute;\n top:0;\n left:0;\n width:100%;\n min-height:500px;\n }\n .view.ng-enter, .view.ng-leave,\n .record.ng-anchor {\n transition:0.5s linear all;\n }\n .view.ng-enter {\n transform:translateX(100%);\n }\n .view.ng-enter.ng-enter-active, .view.ng-leave {\n transform:translateX(0%);\n }\n .view.ng-leave.ng-leave-active {\n transform:translateX(-100%);\n }\n .record.ng-anchor-out {\n background:red;\n }\n \n
\n *\n * ### How is the element transported?\n *\n * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting\n * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element\n * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The\n * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match\n * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied\n * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class\n * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element\n * will become visible since the shim class will be removed.\n *\n * ### How is the morphing handled?\n *\n * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out\n * what CSS classes differ between the starting element and the destination element. These different CSS classes\n * will be added/removed on the anchor element and a transition will be applied (the transition that is provided\n * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will\n * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that\n * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since\n * the cloned element is placed inside of root element which is likely close to the body element).\n *\n * Note that if the root element is on the `` element then the cloned node will be placed inside of body.\n *\n *\n * ## Using $animate in your directive code\n *\n * So far we've explored how to feed in animations into an AngularJS application, but how do we trigger animations within our own directives in our application?\n * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's\n * imagine we have a greeting box that shows and hides itself when the data changes\n *\n * ```html\n * Hi there\n * ```\n *\n * ```js\n * ngModule.directive('greetingBox', ['$animate', function($animate) {\n * return function(scope, element, attrs) {\n * attrs.$observe('active', function(value) {\n * value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on');\n * });\n * });\n * }]);\n * ```\n *\n * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element\n * in our HTML code then we can trigger a CSS or JS animation to happen.\n *\n * ```css\n * /* normally we would create a CSS class to reference on the element */\n * greeting-box.on { transition:0.5s linear all; background:green; color:white; }\n * ```\n *\n * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's\n * possible be sure to visit the {@link ng.$animate $animate service API page}.\n *\n *\n * ## Callbacks and Promises\n *\n * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger\n * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has\n * ended by chaining onto the returned promise that animation method returns.\n *\n * ```js\n * // somewhere within the depths of the directive\n * $animate.enter(element, parent).then(function() {\n * //the animation has completed\n * });\n * ```\n *\n * (Note that earlier versions of AngularJS prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case\n * anymore.)\n *\n * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering\n * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view\n * routing controller to hook into that:\n *\n * ```js\n * ngModule.controller('HomePageController', ['$animate', function($animate) {\n * $animate.on('enter', ngViewElement, function(element) {\n * // the animation for this route has completed\n * }]);\n * }])\n * ```\n *\n * (Note that you will need to trigger a digest within the callback to get AngularJS to notice any scope-related changes.)\n */\n\nvar copy;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar isElement;\nvar isFunction;\nvar isObject;\nvar isString;\nvar isUndefined;\nvar jqLite;\nvar noop;\n\n/**\n * @ngdoc service\n * @name $animate\n * @kind object\n *\n * @description\n * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.\n *\n * Click here {@link ng.$animate to learn more about animations with `$animate`}.\n */\nangular.module('ngAnimate', [], function initAngularHelpers() {\n // Access helpers from AngularJS core.\n // Do it inside a `config` block to ensure `window.angular` is available.\n noop = angular.noop;\n copy = angular.copy;\n extend = angular.extend;\n jqLite = angular.element;\n forEach = angular.forEach;\n isArray = angular.isArray;\n isString = angular.isString;\n isObject = angular.isObject;\n isUndefined = angular.isUndefined;\n isDefined = angular.isDefined;\n isFunction = angular.isFunction;\n isElement = angular.isElement;\n})\n .info({ angularVersion: '1.6.10' })\n .directive('ngAnimateSwap', ngAnimateSwapDirective)\n\n .directive('ngAnimateChildren', $$AnimateChildrenDirective)\n .factory('$$rAFScheduler', $$rAFSchedulerFactory)\n\n .provider('$$animateQueue', $$AnimateQueueProvider)\n .provider('$$animation', $$AnimationProvider)\n\n .provider('$animateCss', $AnimateCssProvider)\n .provider('$$animateCssDriver', $$AnimateCssDriverProvider)\n\n .provider('$$animateJs', $$AnimateJsProvider)\n .provider('$$animateJsDriver', $$AnimateJsDriverProvider);\n\n\n})(window, window.angular);\n","/**\n * @license AngularJS v1.6.10\n * (c) 2010-2018 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/**\n * @ngdoc module\n * @name ngCookies\n * @description\n *\n * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.\n *\n * See {@link ngCookies.$cookies `$cookies`} for usage.\n */\n\n\nangular.module('ngCookies', ['ng']).\n info({ angularVersion: '1.6.10' }).\n /**\n * @ngdoc provider\n * @name $cookiesProvider\n * @description\n * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.\n * */\n provider('$cookies', [/** @this */function $CookiesProvider() {\n /**\n * @ngdoc property\n * @name $cookiesProvider#defaults\n * @description\n *\n * Object containing default options to pass when setting cookies.\n *\n * The object may have following properties:\n *\n * - **path** - `{string}` - The cookie will be available only for this path and its\n * sub-paths. By default, this is the URL that appears in your `` tag.\n * - **domain** - `{string}` - The cookie will be available only for this domain and\n * its sub-domains. For security reasons the user agent will not accept the cookie\n * if the current domain is not a sub-domain of this domain or equal to it.\n * - **expires** - `{string|Date}` - String of the form \"Wdy, DD Mon YYYY HH:MM:SS GMT\"\n * or a Date object indicating the exact date/time this cookie will expire.\n * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a\n * secured connection.\n *\n * Note: By default, the address that appears in your `` tag will be used as the path.\n * This is important so that cookies will be visible for all routes when html5mode is enabled.\n *\n * @example\n *\n * ```js\n * angular.module('cookiesProviderExample', ['ngCookies'])\n * .config(['$cookiesProvider', function($cookiesProvider) {\n * // Setting default options\n * $cookiesProvider.defaults.domain = 'foo.com';\n * $cookiesProvider.defaults.secure = true;\n * }]);\n * ```\n **/\n var defaults = this.defaults = {};\n\n function calcOptions(options) {\n return options ? angular.extend({}, defaults, options) : defaults;\n }\n\n /**\n * @ngdoc service\n * @name $cookies\n *\n * @description\n * Provides read/write access to browser's cookies.\n *\n *
\n * Up until AngularJS 1.3, `$cookies` exposed properties that represented the\n * current browser cookie values. In version 1.4, this behavior has changed, and\n * `$cookies` now provides a standard api of getters, setters etc.\n *
\n *\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\n *\n * @example\n *\n * ```js\n * angular.module('cookiesExample', ['ngCookies'])\n * .controller('ExampleController', ['$cookies', function($cookies) {\n * // Retrieving a cookie\n * var favoriteCookie = $cookies.get('myFavorite');\n * // Setting a cookie\n * $cookies.put('myFavorite', 'oatmeal');\n * }]);\n * ```\n */\n this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {\n return {\n /**\n * @ngdoc method\n * @name $cookies#get\n *\n * @description\n * Returns the value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {string} Raw cookie value.\n */\n get: function(key) {\n return $$cookieReader()[key];\n },\n\n /**\n * @ngdoc method\n * @name $cookies#getObject\n *\n * @description\n * Returns the deserialized value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {Object} Deserialized cookie value.\n */\n getObject: function(key) {\n var value = this.get(key);\n return value ? angular.fromJson(value) : value;\n },\n\n /**\n * @ngdoc method\n * @name $cookies#getAll\n *\n * @description\n * Returns a key value object with all the cookies\n *\n * @returns {Object} All cookies\n */\n getAll: function() {\n return $$cookieReader();\n },\n\n /**\n * @ngdoc method\n * @name $cookies#put\n *\n * @description\n * Sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {string} value Raw value to be stored.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n put: function(key, value, options) {\n $$cookieWriter(key, value, calcOptions(options));\n },\n\n /**\n * @ngdoc method\n * @name $cookies#putObject\n *\n * @description\n * Serializes and sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {Object} value Value to be stored.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n putObject: function(key, value, options) {\n this.put(key, angular.toJson(value), options);\n },\n\n /**\n * @ngdoc method\n * @name $cookies#remove\n *\n * @description\n * Remove given cookie\n *\n * @param {string} key Id of the key-value pair to delete.\n * @param {Object=} options Options object.\n * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}\n */\n remove: function(key, options) {\n $$cookieWriter(key, undefined, calcOptions(options));\n }\n };\n }];\n }]);\n\nangular.module('ngCookies').\n/**\n * @ngdoc service\n * @name $cookieStore\n * @deprecated\n * sinceVersion=\"v1.4.0\"\n * Please use the {@link ngCookies.$cookies `$cookies`} service instead.\n *\n * @requires $cookies\n *\n * @description\n * Provides a key-value (string-object) storage, that is backed by session cookies.\n * Objects put or retrieved from this storage are automatically serialized or\n * deserialized by AngularJS's `toJson`/`fromJson`.\n *\n * Requires the {@link ngCookies `ngCookies`} module to be installed.\n *\n * @example\n *\n * ```js\n * angular.module('cookieStoreExample', ['ngCookies'])\n * .controller('ExampleController', ['$cookieStore', function($cookieStore) {\n * // Put cookie\n * $cookieStore.put('myFavorite','oatmeal');\n * // Get cookie\n * var favoriteCookie = $cookieStore.get('myFavorite');\n * // Removing a cookie\n * $cookieStore.remove('myFavorite');\n * }]);\n * ```\n */\n factory('$cookieStore', ['$cookies', function($cookies) {\n\n return {\n /**\n * @ngdoc method\n * @name $cookieStore#get\n *\n * @description\n * Returns the value of given cookie key\n *\n * @param {string} key Id to use for lookup.\n * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.\n */\n get: function(key) {\n return $cookies.getObject(key);\n },\n\n /**\n * @ngdoc method\n * @name $cookieStore#put\n *\n * @description\n * Sets a value for given cookie key\n *\n * @param {string} key Id for the `value`.\n * @param {Object} value Value to be stored.\n */\n put: function(key, value) {\n $cookies.putObject(key, value);\n },\n\n /**\n * @ngdoc method\n * @name $cookieStore#remove\n *\n * @description\n * Remove given cookie\n *\n * @param {string} key Id of the key-value pair to delete.\n */\n remove: function(key) {\n $cookies.remove(key);\n }\n };\n\n }]);\n\n/**\n * @name $$cookieWriter\n * @requires $document\n *\n * @description\n * This is a private service for writing cookies\n *\n * @param {string} name Cookie name\n * @param {string=} value Cookie value (if undefined, cookie will be deleted)\n * @param {Object=} options Object with options that need to be stored for the cookie.\n */\nfunction $$CookieWriter($document, $log, $browser) {\n var cookiePath = $browser.baseHref();\n var rawDocument = $document[0];\n\n function buildCookieString(name, value, options) {\n var path, expires;\n options = options || {};\n expires = options.expires;\n path = angular.isDefined(options.path) ? options.path : cookiePath;\n if (angular.isUndefined(value)) {\n expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\n value = '';\n }\n if (angular.isString(expires)) {\n expires = new Date(expires);\n }\n\n var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n str += path ? ';path=' + path : '';\n str += options.domain ? ';domain=' + options.domain : '';\n str += expires ? ';expires=' + expires.toUTCString() : '';\n str += options.secure ? ';secure' : '';\n\n // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n // - 300 cookies\n // - 20 cookies per unique domain\n // - 4096 bytes per cookie\n var cookieLength = str.length + 1;\n if (cookieLength > 4096) {\n $log.warn('Cookie \\'' + name +\n '\\' possibly not set or overflowed because it was too large (' +\n cookieLength + ' > 4096 bytes)!');\n }\n\n return str;\n }\n\n return function(name, value, options) {\n rawDocument.cookie = buildCookieString(name, value, options);\n };\n}\n\n$$CookieWriter.$inject = ['$document', '$log', '$browser'];\n\nangular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {\n this.$get = $$CookieWriter;\n});\n\n\n})(window, window.angular);\n","/**\n * @license AngularJS v1.6.10\n * (c) 2010-2018 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\nvar forEach;\nvar isArray;\nvar isString;\nvar jqLite;\n\n/**\n * @ngdoc module\n * @name ngMessages\n * @description\n *\n * The `ngMessages` module provides enhanced support for displaying messages within templates\n * (typically within forms or when rendering message objects that return key/value data).\n * Instead of relying on JavaScript code and/or complex ng-if statements within your form template to\n * show and hide error messages specific to the state of an input field, the `ngMessages` and\n * `ngMessage` directives are designed to handle the complexity, inheritance and priority\n * sequencing based on the order of how the messages are defined in the template.\n *\n * Currently, the ngMessages module only contains the code for the `ngMessages`, `ngMessagesInclude`\n * `ngMessage` and `ngMessageExp` directives.\n *\n * ## Usage\n * The `ngMessages` directive allows keys in a key/value collection to be associated with a child element\n * (or 'message') that will show or hide based on the truthiness of that key's value in the collection. A common use\n * case for `ngMessages` is to display error messages for inputs using the `$error` object exposed by the\n * {@link ngModel ngModel} directive.\n *\n * The child elements of the `ngMessages` directive are matched to the collection keys by a `ngMessage` or\n * `ngMessageExp` directive. The value of these attributes must match a key in the collection that is provided by\n * the `ngMessages` directive.\n *\n * Consider the following example, which illustrates a typical use case of `ngMessages`. Within the form `myForm` we\n * have a text input named `myField` which is bound to the scope variable `field` using the {@link ngModel ngModel}\n * directive.\n *\n * The `myField` field is a required input of type `email` with a maximum length of 15 characters.\n *\n * ```html\n *
\n * \n *
\n *
Please enter a value for this field.
\n *
This field must be a valid email address.
\n *
This field can be at most 15 characters long.
\n *
\n *
\n * ```\n *\n * In order to show error messages corresponding to `myField` we first create an element with an `ngMessages` attribute\n * set to the `$error` object owned by the `myField` input in our `myForm` form.\n *\n * Within this element we then create separate elements for each of the possible errors that `myField` could have.\n * The `ngMessage` attribute is used to declare which element(s) will appear for which error - for example,\n * setting `ng-message=\"required\"` specifies that this particular element should be displayed when there\n * is no value present for the required field `myField` (because the key `required` will be `true` in the object\n * `myForm.myField.$error`).\n *\n * ### Message order\n *\n * By default, `ngMessages` will only display one message for a particular key/value collection at any time. If more\n * than one message (or error) key is currently true, then which message is shown is determined by the order of messages\n * in the HTML template code (messages declared first are prioritised). This mechanism means the developer does not have\n * to prioritize messages using custom JavaScript code.\n *\n * Given the following error object for our example (which informs us that the field `myField` currently has both the\n * `required` and `email` errors):\n *\n * ```javascript\n * \n * myField.$error = { required : true, email: true, maxlength: false };\n * ```\n * The `required` message will be displayed to the user since it appears before the `email` message in the DOM.\n * Once the user types a single character, the `required` message will disappear (since the field now has a value)\n * but the `email` message will be visible because it is still applicable.\n *\n * ### Displaying multiple messages at the same time\n *\n * While `ngMessages` will by default only display one error element at a time, the `ng-messages-multiple` attribute can\n * be applied to the `ngMessages` container element to cause it to display all applicable error messages at once:\n *\n * ```html\n * \n *
...
\n *\n * \n * ...\n * ```\n *\n * ## Reusing and Overriding Messages\n * In addition to prioritization, ngMessages also allows for including messages from a remote or an inline\n * template. This allows for generic collection of messages to be reused across multiple parts of an\n * application.\n *\n * ```html\n * \n *\n *
\n *
\n *
\n * ```\n *\n * However, including generic messages may not be useful enough to match all input fields, therefore,\n * `ngMessages` provides the ability to override messages defined in the remote template by redefining\n * them within the directive container.\n *\n * ```html\n * \n * \n *\n *
\n * \n * \n *
\n * \n *
You did not enter your email address
\n *\n * \n *
Your email address is invalid
\n *\n * \n *
\n *
\n *
\n * ```\n *\n * In the example HTML code above the message that is set on required will override the corresponding\n * required message defined within the remote template. Therefore, with particular input fields (such\n * email addresses, date fields, autocomplete inputs, etc...), specialized error messages can be applied\n * while more generic messages can be used to handle other, more general input errors.\n *\n * ## Dynamic Messaging\n * ngMessages also supports using expressions to dynamically change key values. Using arrays and\n * repeaters to list messages is also supported. This means that the code below will be able to\n * fully adapt itself and display the appropriate message when any of the expression data changes:\n *\n * ```html\n *
\n * \n *
\n *
You did not enter your email address
\n *
\n * \n *
{{ errorMessage.text }}
\n *
\n *
\n *
\n * ```\n *\n * The `errorMessage.type` expression can be a string value or it can be an array so\n * that multiple errors can be associated with a single error message:\n *\n * ```html\n * \n *
\n *
You did not enter your email address
\n *
\n * Your email must be between 5 and 100 characters long\n *
\n *
\n * ```\n *\n * Feel free to use other structural directives such as ng-if and ng-switch to further control\n * what messages are active and when. Be careful, if you place ng-message on the same element\n * as these structural directives, AngularJS may not be able to determine if a message is active\n * or not. Therefore it is best to place the ng-message on a child element of the structural\n * directive.\n *\n * ```html\n *
\n *
\n *
Please enter something
\n *
\n *
\n * ```\n *\n * ## Animations\n * If the `ngAnimate` module is active within the application then the `ngMessages`, `ngMessage` and\n * `ngMessageExp` directives will trigger animations whenever any messages are added and removed from\n * the DOM by the `ngMessages` directive.\n *\n * Whenever the `ngMessages` directive contains one or more visible messages then the `.ng-active` CSS\n * class will be added to the element. The `.ng-inactive` CSS class will be applied when there are no\n * messages present. Therefore, CSS transitions and keyframes as well as JavaScript animations can\n * hook into the animations whenever these classes are added/removed.\n *\n * Let's say that our HTML code for our messages container looks like so:\n *\n * ```html\n *
\n *
...
\n *
...
\n *
\n * ```\n *\n * Then the CSS animation code for the message container looks like so:\n *\n * ```css\n * .my-messages {\n * transition:1s linear all;\n * }\n * .my-messages.ng-active {\n * // messages are visible\n * }\n * .my-messages.ng-inactive {\n * // messages are hidden\n * }\n * ```\n *\n * Whenever an inner message is attached (becomes visible) or removed (becomes hidden) then the enter\n * and leave animation is triggered for each particular element bound to the `ngMessage` directive.\n *\n * Therefore, the CSS code for the inner messages looks like so:\n *\n * ```css\n * .some-message {\n * transition:1s linear all;\n * }\n *\n * .some-message.ng-enter {}\n * .some-message.ng-enter.ng-enter-active {}\n *\n * .some-message.ng-leave {}\n * .some-message.ng-leave.ng-leave-active {}\n * ```\n *\n * {@link ngAnimate Click here} to learn how to use JavaScript animations or to learn more about ngAnimate.\n */\nangular.module('ngMessages', [], function initAngularHelpers() {\n // Access helpers from AngularJS core.\n // Do it inside a `config` block to ensure `window.angular` is available.\n forEach = angular.forEach;\n isArray = angular.isArray;\n isString = angular.isString;\n jqLite = angular.element;\n})\n .info({ angularVersion: '1.6.10' })\n\n /**\n * @ngdoc directive\n * @module ngMessages\n * @name ngMessages\n * @restrict AE\n *\n * @description\n * `ngMessages` is a directive that is designed to show and hide messages based on the state\n * of a key/value object that it listens on. The directive itself complements error message\n * reporting with the `ngModel` $error object (which stores a key/value state of validation errors).\n *\n * `ngMessages` manages the state of internal messages within its container element. The internal\n * messages use the `ngMessage` directive and will be inserted/removed from the page depending\n * on if they're present within the key/value object. By default, only one message will be displayed\n * at a time and this depends on the prioritization of the messages within the template. (This can\n * be changed by using the `ng-messages-multiple` or `multiple` attribute on the directive container.)\n *\n * A remote template can also be used to promote message reusability and messages can also be\n * overridden.\n *\n * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * ...\n * ...\n * \n *\n * \n * \n * ...\n * ...\n * ...\n * \n * ```\n *\n * @param {string} ngMessages an AngularJS expression evaluating to a key/value object\n * (this is typically the $error object on an ngModel instance).\n * @param {string=} ngMessagesMultiple|multiple when set, all messages will be displayed with true\n *\n * @example\n * \n * \n *
\n * \n *
myForm.myName.$error = {{ myForm.myName.$error | json }}
\n *\n *
\n *
You did not enter a field
\n *
Your field is too short
\n *
Your field is too long
\n *
\n *
\n *
\n * \n * angular.module('ngMessagesExample', ['ngMessages']);\n * \n *
\n */\n .directive('ngMessages', ['$animate', function($animate) {\n var ACTIVE_CLASS = 'ng-active';\n var INACTIVE_CLASS = 'ng-inactive';\n\n return {\n require: 'ngMessages',\n restrict: 'AE',\n controller: ['$element', '$scope', '$attrs', function NgMessagesCtrl($element, $scope, $attrs) {\n var ctrl = this;\n var latestKey = 0;\n var nextAttachId = 0;\n\n this.getAttachId = function getAttachId() { return nextAttachId++; };\n\n var messages = this.messages = {};\n var renderLater, cachedCollection;\n\n this.render = function(collection) {\n collection = collection || {};\n\n renderLater = false;\n cachedCollection = collection;\n\n // this is true if the attribute is empty or if the attribute value is truthy\n var multiple = isAttrTruthy($scope, $attrs.ngMessagesMultiple) ||\n isAttrTruthy($scope, $attrs.multiple);\n\n var unmatchedMessages = [];\n var matchedKeys = {};\n var messageItem = ctrl.head;\n var messageFound = false;\n var totalMessages = 0;\n\n // we use != instead of !== to allow for both undefined and null values\n while (messageItem != null) {\n totalMessages++;\n var messageCtrl = messageItem.message;\n\n var messageUsed = false;\n if (!messageFound) {\n forEach(collection, function(value, key) {\n if (!messageUsed && truthy(value) && messageCtrl.test(key)) {\n // this is to prevent the same error name from showing up twice\n if (matchedKeys[key]) return;\n matchedKeys[key] = true;\n\n messageUsed = true;\n messageCtrl.attach();\n }\n });\n }\n\n if (messageUsed) {\n // unless we want to display multiple messages then we should\n // set a flag here to avoid displaying the next message in the list\n messageFound = !multiple;\n } else {\n unmatchedMessages.push(messageCtrl);\n }\n\n messageItem = messageItem.next;\n }\n\n forEach(unmatchedMessages, function(messageCtrl) {\n messageCtrl.detach();\n });\n\n if (unmatchedMessages.length !== totalMessages) {\n $animate.setClass($element, ACTIVE_CLASS, INACTIVE_CLASS);\n } else {\n $animate.setClass($element, INACTIVE_CLASS, ACTIVE_CLASS);\n }\n };\n\n $scope.$watchCollection($attrs.ngMessages || $attrs['for'], ctrl.render);\n\n this.reRender = function() {\n if (!renderLater) {\n renderLater = true;\n $scope.$evalAsync(function() {\n if (renderLater && cachedCollection) {\n ctrl.render(cachedCollection);\n }\n });\n }\n };\n\n this.register = function(comment, messageCtrl) {\n var nextKey = latestKey.toString();\n messages[nextKey] = {\n message: messageCtrl\n };\n insertMessageNode($element[0], comment, nextKey);\n comment.$$ngMessageNode = nextKey;\n latestKey++;\n\n ctrl.reRender();\n };\n\n this.deregister = function(comment) {\n var key = comment.$$ngMessageNode;\n delete comment.$$ngMessageNode;\n removeMessageNode($element[0], comment, key);\n delete messages[key];\n ctrl.reRender();\n };\n\n function findPreviousMessage(parent, comment) {\n var prevNode = comment;\n var parentLookup = [];\n\n while (prevNode && prevNode !== parent) {\n var prevKey = prevNode.$$ngMessageNode;\n if (prevKey && prevKey.length) {\n return messages[prevKey];\n }\n\n // dive deeper into the DOM and examine its children for any ngMessage\n // comments that may be in an element that appears deeper in the list\n if (prevNode.childNodes.length && parentLookup.indexOf(prevNode) === -1) {\n parentLookup.push(prevNode);\n prevNode = prevNode.childNodes[prevNode.childNodes.length - 1];\n } else if (prevNode.previousSibling) {\n prevNode = prevNode.previousSibling;\n } else {\n prevNode = prevNode.parentNode;\n parentLookup.push(prevNode);\n }\n }\n }\n\n function insertMessageNode(parent, comment, key) {\n var messageNode = messages[key];\n if (!ctrl.head) {\n ctrl.head = messageNode;\n } else {\n var match = findPreviousMessage(parent, comment);\n if (match) {\n messageNode.next = match.next;\n match.next = messageNode;\n } else {\n messageNode.next = ctrl.head;\n ctrl.head = messageNode;\n }\n }\n }\n\n function removeMessageNode(parent, comment, key) {\n var messageNode = messages[key];\n\n // This message node may have already been removed by a call to deregister()\n if (!messageNode) return;\n\n var match = findPreviousMessage(parent, comment);\n if (match) {\n match.next = messageNode.next;\n } else {\n ctrl.head = messageNode.next;\n }\n }\n }]\n };\n\n function isAttrTruthy(scope, attr) {\n return (isString(attr) && attr.length === 0) || //empty attribute\n truthy(scope.$eval(attr));\n }\n\n function truthy(val) {\n return isString(val) ? val.length : !!val;\n }\n }])\n\n /**\n * @ngdoc directive\n * @name ngMessagesInclude\n * @restrict AE\n * @scope\n *\n * @description\n * `ngMessagesInclude` is a directive with the purpose to import existing ngMessage template\n * code from a remote template and place the downloaded template code into the exact spot\n * that the ngMessagesInclude directive is placed within the ngMessages container. This allows\n * for a series of pre-defined messages to be reused and also allows for the developer to\n * determine what messages are overridden due to the placement of the ngMessagesInclude directive.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * \n *\n * \n * \n * ...\n * \n * ```\n *\n * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n *\n * @param {string} ngMessagesInclude|src a string value corresponding to the remote template.\n */\n .directive('ngMessagesInclude',\n ['$templateRequest', '$document', '$compile', function($templateRequest, $document, $compile) {\n\n return {\n restrict: 'AE',\n require: '^^ngMessages', // we only require this for validation sake\n link: function($scope, element, attrs) {\n var src = attrs.ngMessagesInclude || attrs.src;\n $templateRequest(src).then(function(html) {\n if ($scope.$$destroyed) return;\n\n if (isString(html) && !html.trim()) {\n // Empty template - nothing to compile\n replaceElementWithMarker(element, src);\n } else {\n // Non-empty template - compile and link\n $compile(html)($scope, function(contents) {\n element.after(contents);\n replaceElementWithMarker(element, src);\n });\n }\n });\n }\n };\n\n // Helpers\n function replaceElementWithMarker(element, src) {\n // A comment marker is placed for debugging purposes\n var comment = $compile.$$createComment ?\n $compile.$$createComment('ngMessagesInclude', src) :\n $document[0].createComment(' ngMessagesInclude: ' + src + ' ');\n var marker = jqLite(comment);\n element.after(marker);\n\n // Don't pollute the DOM anymore by keeping an empty directive element\n element.remove();\n }\n }])\n\n /**\n * @ngdoc directive\n * @name ngMessage\n * @restrict AE\n * @scope\n * @priority 1\n *\n * @description\n * `ngMessage` is a directive with the purpose to show and hide a particular message.\n * For `ngMessage` to operate, a parent `ngMessages` directive on a parent DOM element\n * must be situated since it determines which messages are visible based on the state\n * of the provided key/value map that `ngMessages` listens on.\n *\n * More information about using `ngMessage` can be found in the\n * {@link module:ngMessages `ngMessages` module documentation}.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * ...\n * \n *\n * \n * \n * ...\n * ...\n * \n * ```\n *\n * @param {expression} ngMessage|when a string value corresponding to the message key.\n */\n .directive('ngMessage', ngMessageDirectiveFactory())\n\n\n /**\n * @ngdoc directive\n * @name ngMessageExp\n * @restrict AE\n * @priority 1\n * @scope\n *\n * @description\n * `ngMessageExp` is the same as {@link directive:ngMessage `ngMessage`}, but instead of a static\n * value, it accepts an expression to be evaluated for the message key.\n *\n * @usage\n * ```html\n * \n * \n * ...\n * \n *\n * \n * \n * ...\n * \n * ```\n *\n * {@link module:ngMessages Click here} to learn more about `ngMessages` and `ngMessage`.\n *\n * @param {expression} ngMessageExp|whenExp an expression value corresponding to the message key.\n */\n .directive('ngMessageExp', ngMessageDirectiveFactory());\n\nfunction ngMessageDirectiveFactory() {\n return ['$animate', function($animate) {\n return {\n restrict: 'AE',\n transclude: 'element',\n priority: 1, // must run before ngBind, otherwise the text is set on the comment\n terminal: true,\n require: '^^ngMessages',\n link: function(scope, element, attrs, ngMessagesCtrl, $transclude) {\n var commentNode = element[0];\n\n var records;\n var staticExp = attrs.ngMessage || attrs.when;\n var dynamicExp = attrs.ngMessageExp || attrs.whenExp;\n var assignRecords = function(items) {\n records = items\n ? (isArray(items)\n ? items\n : items.split(/[\\s,]+/))\n : null;\n ngMessagesCtrl.reRender();\n };\n\n if (dynamicExp) {\n assignRecords(scope.$eval(dynamicExp));\n scope.$watchCollection(dynamicExp, assignRecords);\n } else {\n assignRecords(staticExp);\n }\n\n var currentElement, messageCtrl;\n ngMessagesCtrl.register(commentNode, messageCtrl = {\n test: function(name) {\n return contains(records, name);\n },\n attach: function() {\n if (!currentElement) {\n $transclude(function(elm, newScope) {\n $animate.enter(elm, null, element);\n currentElement = elm;\n\n // Each time we attach this node to a message we get a new id that we can match\n // when we are destroying the node later.\n var $$attachId = currentElement.$$attachId = ngMessagesCtrl.getAttachId();\n\n // in the event that the element or a parent element is destroyed\n // by another structural directive then it's time\n // to deregister the message from the controller\n currentElement.on('$destroy', function() {\n // If the message element was removed via a call to `detach` then `currentElement` will be null\n // So this handler only handles cases where something else removed the message element.\n if (currentElement && currentElement.$$attachId === $$attachId) {\n ngMessagesCtrl.deregister(commentNode);\n messageCtrl.detach();\n }\n newScope.$destroy();\n });\n });\n }\n },\n detach: function() {\n if (currentElement) {\n var elm = currentElement;\n currentElement = null;\n $animate.leave(elm);\n }\n }\n });\n\n // We need to ensure that this directive deregisters itself when it no longer exists\n // Normally this is done when the attached element is destroyed; but if this directive\n // gets removed before we attach the message to the DOM there is nothing to watch\n // in which case we must deregister when the containing scope is destroyed.\n scope.$on('$destroy', function() {\n ngMessagesCtrl.deregister(commentNode);\n });\n }\n };\n }];\n\n function contains(collection, key) {\n if (collection) {\n return isArray(collection)\n ? collection.indexOf(key) >= 0\n : collection.hasOwnProperty(key);\n }\n }\n}\n\n\n})(window, window.angular);\n","/**\n * @license AngularJS v1.6.10\n * (c) 2010-2018 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar nodeContains;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are\n * then serialized back to properly escaped html string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The whitelist for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider\n * `$compileProvider`}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n \n \n \n
\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html=\"snippet\">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\n
<div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div>
\n
ng-bindAutomatically escapes
<div ng-bind=\"snippet\">
</div>
\n
\n
\n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('

an html\\nclick here\\nsnippet

');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\n toBe(\"

an html\\n\" +\n \"click here\\n\" +\n \"snippet

\");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new text');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
\n
\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n * @this\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var hasBeenInstantiated = false;\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n hasBeenInstantiated = true;\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n *
\n *

By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.

\n *\n *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

\n *\n *
\n *\n *
\n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
\n *
\n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidElements\n * @kind function\n *\n * @description\n * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe\n * and are not stripped off during sanitization. You can extend the following lists of elements:\n *\n * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML\n * elements. HTML elements considered safe will not be removed during sanitization. All other\n * elements will be stripped off.\n *\n * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as\n * \"void elements\" (similar to HTML\n * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These\n * elements have no end tag and cannot have content.\n *\n * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only\n * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for\n * `$sanitize`.\n *\n *
\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n *
\n *\n *
\n * Keep in mind that extending the built-in lists of elements may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the elements you add.\n *
\n *\n * @param {Array|Object} elements - A list of valid HTML elements or an object with one or\n * more of the following properties:\n * - **htmlElements** - `{Array}` - A list of elements to extend the current list of\n * HTML elements.\n * - **htmlVoidElements** - `{Array}` - A list of elements to extend the current list of\n * void HTML elements; i.e. elements that do not have an end tag.\n * - **svgElements** - `{Array}` - A list of elements to extend the current list of SVG\n * elements. The list of SVG elements is only taken into account if SVG is\n * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`.\n *\n * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`.\n *\n * @return {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidElements = function(elements) {\n if (!hasBeenInstantiated) {\n if (isArray(elements)) {\n elements = {htmlElements: elements};\n }\n\n addElementsTo(svgElements, elements.svgElements);\n addElementsTo(voidElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlElements);\n }\n\n return this;\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidAttrs\n * @kind function\n *\n * @description\n * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are\n * not stripped off during sanitization.\n *\n * **Note**:\n * The new attributes will not be treated as URI attributes, which means their values will not be\n * sanitized as URIs using `$compileProvider`'s\n * {@link ng.$compileProvider#aHrefSanitizationWhitelist aHrefSanitizationWhitelist} and\n * {@link ng.$compileProvider#imgSrcSanitizationWhitelist imgSrcSanitizationWhitelist}.\n *\n *
\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n *
\n *\n *
\n * Keep in mind that extending the built-in list of attributes may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the attributes you add.\n *
\n *\n * @param {Array} attrs - A list of valid attributes.\n *\n * @returns {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidAttrs = function(attrs) {\n if (!hasBeenInstantiated) {\n extend(validAttrs, arrayToMap(attrs, true));\n }\n return this;\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isArray = angular.isArray;\n isDefined = angular.isDefined;\n lowercase = angular.lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return !!(this.compareDocumentPosition(arg) & 16);\n };\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = stringToMap('area,br,col,hr,img,wbr');\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = stringToMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\n optionalEndTagInlineElements = stringToMap('rp,rt'),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, stringToMap('address,article,' +\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, stringToMap('a,abbr,acronym,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = stringToMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\n\n // Blocked Elements (will be stripped)\n var blockedElements = stringToMap('script,style');\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = stringToMap('background,cite,href,longdesc,src,xlink:href,xml:base');\n\n var htmlAttrs = stringToMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = stringToMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function stringToMap(str, lowercaseKeys) {\n return arrayToMap(str.split(','), lowercaseKeys);\n }\n\n function arrayToMap(items, lowercaseKeys) {\n var obj = {}, i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n function addElementsTo(elementsMap, newElements) {\n if (newElements && newElements.length) {\n extend(elementsMap, arrayToMap(newElements));\n }\n }\n\n /**\n * Create an inert document that contains the dirty HTML that needs sanitizing\n * Depending upon browser support we use one of three strategies for doing this.\n * Support: Safari 10.x -> XHR strategy\n * Support: Firefox -> DomParser strategy\n */\n var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {\n var inertDocument;\n if (document && document.implementation) {\n inertDocument = document.implementation.createHTMLDocument('inert');\n } else {\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\n }\n var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');\n\n // Check for the Safari 10.1 bug - which allows JS to run inside the SVG G element\n inertBodyElement.innerHTML = '';\n if (!inertBodyElement.querySelector('svg')) {\n return getInertBodyElement_XHR;\n } else {\n // Check for the Firefox bug - which prevents the inner img JS from being sanitized\n inertBodyElement.innerHTML = '

';\n if (inertBodyElement.querySelector('svg img')) {\n return getInertBodyElement_DOMParser;\n } else {\n return getInertBodyElement_InertDocument;\n }\n }\n\n function getInertBodyElement_XHR(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\n html = '' + html;\n try {\n html = encodeURI(html);\n } catch (e) {\n return undefined;\n }\n var xhr = new window.XMLHttpRequest();\n xhr.responseType = 'document';\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\n xhr.send(null);\n var body = xhr.response.body;\n body.firstChild.remove();\n return body;\n }\n\n function getInertBodyElement_DOMParser(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\n html = '' + html;\n try {\n var body = new window.DOMParser().parseFromString(html, 'text/html').body;\n body.firstChild.remove();\n return body;\n } catch (e) {\n return undefined;\n }\n }\n\n function getInertBodyElement_InertDocument(html) {\n inertBodyElement.innerHTML = html;\n\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n\n return inertBodyElement;\n }\n })(window, window.document);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n\n var inertBodyElement = getInertBodyElement(html);\n if (!inertBodyElement) return '';\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n // trigger mXSS if it is going to happen by reading and writing the innerHTML\n html = inertBodyElement.innerHTML;\n inertBodyElement = getInertBodyElement(html);\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = getNonDescendant('nextSibling', node);\n if (!nextNode) {\n while (nextNode == null) {\n node = getNonDescendant('parentNode', node);\n if (node === inertBodyElement) break;\n nextNode = getNonDescendant('nextSibling', node);\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while ((node = inertBodyElement.firstChild)) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(//g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('');\n }\n // eslint-disable-next-line eqeqeq\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n while (node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n node = getNonDescendant('nextSibling', node);\n }\n }\n\n function getNonDescendant(propName, node) {\n // An element is clobbered if its `propName` property points to one of its descendants\n var nextNode = node[propName];\n if (nextNode && nodeContains.call(node, nextNode)) {\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\n }\n return nextNode;\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', [])\n .provider('$sanitize', $SanitizeProvider)\n .info({ angularVersion: '1.6.10' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \n *\n * @example\n \n \n

\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FilterSourceRendered
linky filter\n
<div ng-bind-html=\"snippet | linky\">
</div>
\n
\n
\n
linky target\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
</div>
\n
\n
\n
linky custom attributes\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
</div>
\n
\n
\n
no filter
<div ng-bind=\"snippet\">
</div>
\n \n \n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n' +\n 'http://angularjs.org/,\\n' +\n 'mailto:us@somewhere.org,\\n' +\n 'another@somewhere.org,\\n' +\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n \n \n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n \n \n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((s?ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('');\n addText(text);\n html.push('');\n }\n };\n}]);\n\n\n})(window, window.angular);\n","/**\n * @license AngularJS v1.6.10\n * (c) 2010-2018 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* global ngTouchClickDirectiveFactory: false */\n\n/**\n * @ngdoc module\n * @name ngTouch\n * @description\n *\n * The `ngTouch` module provides helpers for touch-enabled devices.\n * The implementation is based on jQuery Mobile touch event handling\n * ([jquerymobile.com](http://jquerymobile.com/)). *\n *\n * See {@link ngTouch.$swipe `$swipe`} for usage.\n *\n */\n\n// define ngTouch module\n/* global -ngTouch */\nvar ngTouch = angular.module('ngTouch', []);\n\nngTouch.info({ angularVersion: '1.6.10' });\n\nngTouch.provider('$touch', $TouchProvider);\n\nfunction nodeName_(element) {\n return angular.lowercase(element.nodeName || (element[0] && element[0].nodeName));\n}\n\n/**\n * @ngdoc provider\n * @name $touchProvider\n *\n * @description\n * The `$touchProvider` allows enabling / disabling {@link ngTouch.ngClick ngTouch's ngClick directive}.\n */\n$TouchProvider.$inject = ['$provide', '$compileProvider'];\nfunction $TouchProvider($provide, $compileProvider) {\n\n /**\n * @ngdoc method\n * @name $touchProvider#ngClickOverrideEnabled\n *\n * @param {boolean=} enabled update the ngClickOverrideEnabled state if provided, otherwise just return the\n * current ngClickOverrideEnabled state\n * @returns {*} current value if used as getter or itself (chaining) if used as setter\n *\n * @kind function\n *\n * @description\n * Call this method to enable/disable {@link ngTouch.ngClick ngTouch's ngClick directive}. If enabled,\n * the default ngClick directive will be replaced by a version that eliminates the 300ms delay for\n * click events on browser for touch-devices.\n *\n * The default is `false`.\n *\n */\n var ngClickOverrideEnabled = false;\n var ngClickDirectiveAdded = false;\n // eslint-disable-next-line no-invalid-this\n this.ngClickOverrideEnabled = function(enabled) {\n if (angular.isDefined(enabled)) {\n\n if (enabled && !ngClickDirectiveAdded) {\n ngClickDirectiveAdded = true;\n\n // Use this to identify the correct directive in the delegate\n ngTouchClickDirectiveFactory.$$moduleName = 'ngTouch';\n $compileProvider.directive('ngClick', ngTouchClickDirectiveFactory);\n\n $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {\n if (ngClickOverrideEnabled) {\n // drop the default ngClick directive\n $delegate.shift();\n } else {\n // drop the ngTouch ngClick directive if the override has been re-disabled (because\n // we cannot de-register added directives)\n var i = $delegate.length - 1;\n while (i >= 0) {\n if ($delegate[i].$$moduleName === 'ngTouch') {\n $delegate.splice(i, 1);\n break;\n }\n i--;\n }\n }\n\n return $delegate;\n }]);\n }\n\n ngClickOverrideEnabled = enabled;\n return this;\n }\n\n return ngClickOverrideEnabled;\n };\n\n /**\n * @ngdoc service\n * @name $touch\n * @kind object\n *\n * @description\n * Provides the {@link ngTouch.$touch#ngClickOverrideEnabled `ngClickOverrideEnabled`} method.\n *\n */\n // eslint-disable-next-line no-invalid-this\n this.$get = function() {\n return {\n /**\n * @ngdoc method\n * @name $touch#ngClickOverrideEnabled\n *\n * @returns {*} current value of `ngClickOverrideEnabled` set in the {@link ngTouch.$touchProvider $touchProvider},\n * i.e. if {@link ngTouch.ngClick ngTouch's ngClick} directive is enabled.\n *\n * @kind function\n */\n ngClickOverrideEnabled: function() {\n return ngClickOverrideEnabled;\n }\n };\n };\n\n}\n\n/* global ngTouch: false */\n\n /**\n * @ngdoc service\n * @name $swipe\n *\n * @description\n * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe\n * behavior, to make implementing swipe-related directives more convenient.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`.\n *\n * # Usage\n * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element\n * which is to be watched for swipes, and an object with four handler functions. See the\n * documentation for `bind` below.\n */\n\nngTouch.factory('$swipe', [function() {\n // The total distance in any direction before we make the call on swipe vs. scroll.\n var MOVE_BUFFER_RADIUS = 10;\n\n var POINTER_EVENTS = {\n 'mouse': {\n start: 'mousedown',\n move: 'mousemove',\n end: 'mouseup'\n },\n 'touch': {\n start: 'touchstart',\n move: 'touchmove',\n end: 'touchend',\n cancel: 'touchcancel'\n },\n 'pointer': {\n start: 'pointerdown',\n move: 'pointermove',\n end: 'pointerup',\n cancel: 'pointercancel'\n }\n };\n\n function getCoordinates(event) {\n var originalEvent = event.originalEvent || event;\n var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0];\n\n return {\n x: e.clientX,\n y: e.clientY\n };\n }\n\n function getEvents(pointerTypes, eventType) {\n var res = [];\n angular.forEach(pointerTypes, function(pointerType) {\n var eventName = POINTER_EVENTS[pointerType][eventType];\n if (eventName) {\n res.push(eventName);\n }\n });\n return res.join(' ');\n }\n\n return {\n /**\n * @ngdoc method\n * @name $swipe#bind\n *\n * @description\n * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an\n * object containing event handlers.\n * The pointer types that should be used can be specified via the optional\n * third argument, which is an array of strings `'mouse'`, `'touch'` and `'pointer'`. By default,\n * `$swipe` will listen for `mouse`, `touch` and `pointer` events.\n *\n * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`\n * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }` and the raw\n * `event`. `cancel` receives the raw `event` as its single parameter.\n *\n * `start` is called on either `mousedown`, `touchstart` or `pointerdown`. After this event, `$swipe` is\n * watching for `touchmove`, `mousemove` or `pointermove` events. These events are ignored until the total\n * distance moved in either dimension exceeds a small threshold.\n *\n * Once this threshold is exceeded, either the horizontal or vertical delta is greater.\n * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.\n * - If the vertical distance is greater, this is a scroll, and we let the browser take over.\n * A `cancel` event is sent.\n *\n * `move` is called on `mousemove`, `touchmove` and `pointermove` after the above logic has determined that\n * a swipe is in progress.\n *\n * `end` is called when a swipe is successfully completed with a `touchend`, `mouseup` or `pointerup`.\n *\n * `cancel` is called either on a `touchcancel` or `pointercancel` from the browser, or when we begin scrolling\n * as described above.\n *\n */\n bind: function(element, eventHandlers, pointerTypes) {\n // Absolute total movement, used to control swipe vs. scroll.\n var totalX, totalY;\n // Coordinates of the start position.\n var startCoords;\n // Last event's position.\n var lastPos;\n // Whether a swipe is active.\n var active = false;\n\n pointerTypes = pointerTypes || ['mouse', 'touch', 'pointer'];\n element.on(getEvents(pointerTypes, 'start'), function(event) {\n startCoords = getCoordinates(event);\n active = true;\n totalX = 0;\n totalY = 0;\n lastPos = startCoords;\n if (eventHandlers['start']) {\n eventHandlers['start'](startCoords, event);\n }\n });\n var events = getEvents(pointerTypes, 'cancel');\n if (events) {\n element.on(events, function(event) {\n active = false;\n if (eventHandlers['cancel']) {\n eventHandlers['cancel'](event);\n }\n });\n }\n\n element.on(getEvents(pointerTypes, 'move'), function(event) {\n if (!active) return;\n\n // Android will send a touchcancel if it thinks we're starting to scroll.\n // So when the total distance (+ or - or both) exceeds 10px in either direction,\n // we either:\n // - On totalX > totalY, we send preventDefault() and treat this as a swipe.\n // - On totalY > totalX, we let the browser handle it as a scroll.\n\n if (!startCoords) return;\n var coords = getCoordinates(event);\n\n totalX += Math.abs(coords.x - lastPos.x);\n totalY += Math.abs(coords.y - lastPos.y);\n\n lastPos = coords;\n\n if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {\n return;\n }\n\n // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.\n if (totalY > totalX) {\n // Allow native scrolling to take over.\n active = false;\n if (eventHandlers['cancel']) {\n eventHandlers['cancel'](event);\n }\n return;\n } else {\n // Prevent the browser from scrolling.\n event.preventDefault();\n if (eventHandlers['move']) {\n eventHandlers['move'](coords, event);\n }\n }\n });\n\n element.on(getEvents(pointerTypes, 'end'), function(event) {\n if (!active) return;\n active = false;\n if (eventHandlers['end']) {\n eventHandlers['end'](getCoordinates(event), event);\n }\n });\n }\n };\n}]);\n\n/* global ngTouch: false,\n nodeName_: false\n*/\n\n/**\n * @ngdoc directive\n * @name ngClick\n * @deprecated\n * sinceVersion=\"v1.5.0\"\n * This directive is deprecated and **disabled** by default.\n * The directive will receive no further support and might be removed from future releases.\n * If you need the directive, you can enable it with the {@link ngTouch.$touchProvider $touchProvider#ngClickOverrideEnabled}\n * function. We also recommend that you migrate to [FastClick](https://github.com/ftlabs/fastclick).\n * To learn more about the 300ms delay, this [Telerik article](http://developer.telerik.com/featured/300-ms-click-delay-ios-8/)\n * gives a good overview.\n *\n * @description\n * A more powerful replacement for the default ngClick designed to be used on touchscreen\n * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending\n * the click event. This version handles them immediately, and then prevents the\n * following click event from propagating.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * This directive can fall back to using an ordinary click event, and so works on desktop\n * browsers as well as mobile.\n *\n * This directive also sets the CSS class `ng-click-active` while the element is being held\n * down (by a mouse click or touch) so you can restyle the depressed element if you wish.\n *\n * @element ANY\n * @param {expression} ngClick {@link guide/expression Expression} to evaluate\n * upon tap. (Event object is available as `$event`)\n *\n * @example\n \n \n \n count: {{ count }}\n \n \n angular.module('ngClickExample', ['ngTouch']);\n \n \n */\n\nvar ngTouchClickDirectiveFactory = ['$parse', '$timeout', '$rootElement',\n function($parse, $timeout, $rootElement) {\n var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.\n var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.\n var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click\n var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.\n\n var ACTIVE_CLASS_NAME = 'ng-click-active';\n var lastPreventedTime;\n var touchCoordinates;\n var lastLabelClickCoordinates;\n\n\n // TAP EVENTS AND GHOST CLICKS\n //\n // Why tap events?\n // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're\n // double-tapping, and then fire a click event.\n //\n // This delay sucks and makes mobile apps feel unresponsive.\n // So we detect touchstart, touchcancel and touchend ourselves and determine when\n // the user has tapped on something.\n //\n // What happens when the browser then generates a click event?\n // The browser, of course, also detects the tap and fires a click after a delay. This results in\n // tapping/clicking twice. We do \"clickbusting\" to prevent it.\n //\n // How does it work?\n // We attach global touchstart and click handlers, that run during the capture (early) phase.\n // So the sequence for a tap is:\n // - global touchstart: Sets an \"allowable region\" at the point touched.\n // - element's touchstart: Starts a touch\n // (- touchcancel ends the touch, no click follows)\n // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold\n // too long) and fires the user's tap handler. The touchend also calls preventGhostClick().\n // - preventGhostClick() removes the allowable region the global touchstart created.\n // - The browser generates a click event.\n // - The global click handler catches the click, and checks whether it was in an allowable region.\n // - If preventGhostClick was called, the region will have been removed, the click is busted.\n // - If the region is still there, the click proceeds normally. Therefore clicks on links and\n // other elements without ngTap on them work normally.\n //\n // This is an ugly, terrible hack!\n // Yeah, tell me about it. The alternatives are using the slow click events, or making our users\n // deal with the ghost clicks, so I consider this the least of evils. Fortunately AngularJS\n // encapsulates this ugly logic away from the user.\n //\n // Why not just put click handlers on the element?\n // We do that too, just to be sure. If the tap event caused the DOM to change,\n // it is possible another element is now in that position. To take account for these possibly\n // distinct elements, the handlers are global and care only about coordinates.\n\n // Checks if the coordinates are close enough to be within the region.\n function hit(x1, y1, x2, y2) {\n return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;\n }\n\n // Checks a list of allowable regions against a click location.\n // Returns true if the click should be allowed.\n // Splices out the allowable region from the list after it has been used.\n function checkAllowableRegions(touchCoordinates, x, y) {\n for (var i = 0; i < touchCoordinates.length; i += 2) {\n if (hit(touchCoordinates[i], touchCoordinates[i + 1], x, y)) {\n touchCoordinates.splice(i, i + 2);\n return true; // allowable region\n }\n }\n return false; // No allowable region; bust it.\n }\n\n // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick\n // was called recently.\n function onClick(event) {\n if (Date.now() - lastPreventedTime > PREVENT_DURATION) {\n return; // Too old.\n }\n\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label\n // and on the input element). Depending on the exact browser, this second click we don't want\n // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label\n // click event\n if (x < 1 && y < 1) {\n return; // offscreen\n }\n if (lastLabelClickCoordinates &&\n lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {\n return; // input click triggered by label click\n }\n // reset label click coordinates on first subsequent click\n if (lastLabelClickCoordinates) {\n lastLabelClickCoordinates = null;\n }\n // remember label click coordinates to prevent click busting of trigger click event on input\n if (nodeName_(event.target) === 'label') {\n lastLabelClickCoordinates = [x, y];\n }\n\n // Look for an allowable region containing this click.\n // If we find one, that means it was created by touchstart and not removed by\n // preventGhostClick, so we don't bust it.\n if (checkAllowableRegions(touchCoordinates, x, y)) {\n return;\n }\n\n // If we didn't find an allowable region, bust the click.\n event.stopPropagation();\n event.preventDefault();\n\n // Blur focused form elements\n if (event.target && event.target.blur) {\n event.target.blur();\n }\n }\n\n\n // Global touchstart handler that creates an allowable region for a click event.\n // This allowable region can be removed by preventGhostClick if we want to bust it.\n function onTouchStart(event) {\n var touches = event.touches && event.touches.length ? event.touches : [event];\n var x = touches[0].clientX;\n var y = touches[0].clientY;\n touchCoordinates.push(x, y);\n\n $timeout(function() {\n // Remove the allowable region.\n for (var i = 0; i < touchCoordinates.length; i += 2) {\n if (touchCoordinates[i] === x && touchCoordinates[i + 1] === y) {\n touchCoordinates.splice(i, i + 2);\n return;\n }\n }\n }, PREVENT_DURATION, false);\n }\n\n // On the first call, attaches some event handlers. Then whenever it gets called, it creates a\n // zone around the touchstart where clicks will get busted.\n function preventGhostClick(x, y) {\n if (!touchCoordinates) {\n $rootElement[0].addEventListener('click', onClick, true);\n $rootElement[0].addEventListener('touchstart', onTouchStart, true);\n touchCoordinates = [];\n }\n\n lastPreventedTime = Date.now();\n\n checkAllowableRegions(touchCoordinates, x, y);\n }\n\n // Actual linking function.\n return function(scope, element, attr) {\n var clickHandler = $parse(attr.ngClick),\n tapping = false,\n tapElement, // Used to blur the element after a tap.\n startTime, // Used to check if the tap was held too long.\n touchStartX,\n touchStartY;\n\n function resetState() {\n tapping = false;\n element.removeClass(ACTIVE_CLASS_NAME);\n }\n\n element.on('touchstart', function(event) {\n tapping = true;\n tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.\n // Hack for Safari, which can target text nodes instead of containers.\n if (tapElement.nodeType === 3) {\n tapElement = tapElement.parentNode;\n }\n\n element.addClass(ACTIVE_CLASS_NAME);\n\n startTime = Date.now();\n\n // Use jQuery originalEvent\n var originalEvent = event.originalEvent || event;\n var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n var e = touches[0];\n touchStartX = e.clientX;\n touchStartY = e.clientY;\n });\n\n element.on('touchcancel', function(event) {\n resetState();\n });\n\n element.on('touchend', function(event) {\n var diff = Date.now() - startTime;\n\n // Use jQuery originalEvent\n var originalEvent = event.originalEvent || event;\n var touches = (originalEvent.changedTouches && originalEvent.changedTouches.length) ?\n originalEvent.changedTouches :\n ((originalEvent.touches && originalEvent.touches.length) ? originalEvent.touches : [originalEvent]);\n var e = touches[0];\n var x = e.clientX;\n var y = e.clientY;\n var dist = Math.sqrt(Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2));\n\n if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {\n // Call preventGhostClick so the clickbuster will catch the corresponding click.\n preventGhostClick(x, y);\n\n // Blur the focused element (the button, probably) before firing the callback.\n // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.\n // I couldn't get anything to work reliably on Android Chrome.\n if (tapElement) {\n tapElement.blur();\n }\n\n if (!angular.isDefined(attr.disabled) || attr.disabled === false) {\n element.triggerHandler('click', [event]);\n }\n }\n\n resetState();\n });\n\n // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click\n // something else nearby.\n element.onclick = function(event) { };\n\n // Actual click handler.\n // There are three different kinds of clicks, only two of which reach this point.\n // - On desktop browsers without touch events, their clicks will always come here.\n // - On mobile browsers, the simulated \"fast\" click will call this.\n // - But the browser's follow-up slow click will be \"busted\" before it reaches this handler.\n // Therefore it's safe to use this directive on both mobile and desktop.\n element.on('click', function(event, touchend) {\n scope.$apply(function() {\n clickHandler(scope, {$event: (touchend || event)});\n });\n });\n\n element.on('mousedown', function(event) {\n element.addClass(ACTIVE_CLASS_NAME);\n });\n\n element.on('mousemove mouseup', function(event) {\n element.removeClass(ACTIVE_CLASS_NAME);\n });\n\n };\n}];\n\n/* global ngTouch: false */\n\n/**\n * @ngdoc directive\n * @name ngSwipeLeft\n *\n * @description\n * Specify custom behavior when an element is swiped to the left on a touchscreen device.\n * A leftward swipe is a quick, right-to-left slide of the finger.\n * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to\n * the `ng-swipe-left` or `ng-swipe-right` DOM Element.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate\n * upon left swipe. (Event object is available as `$event`)\n *\n * @example\n \n \n
\n Some list content, like an email in the inbox\n
\n
\n \n \n
\n
\n \n angular.module('ngSwipeLeftExample', ['ngTouch']);\n \n
\n */\n\n/**\n * @ngdoc directive\n * @name ngSwipeRight\n *\n * @description\n * Specify custom behavior when an element is swiped to the right on a touchscreen device.\n * A rightward swipe is a quick, left-to-right slide of the finger.\n * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag\n * too.\n *\n * Requires the {@link ngTouch `ngTouch`} module to be installed.\n *\n * @element ANY\n * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate\n * upon right swipe. (Event object is available as `$event`)\n *\n * @example\n \n \n
\n Some list content, like an email in the inbox\n
\n
\n \n \n
\n
\n \n angular.module('ngSwipeRightExample', ['ngTouch']);\n \n
\n */\n\nfunction makeSwipeDirective(directiveName, direction, eventName) {\n ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {\n // The maximum vertical delta for a swipe should be less than 75px.\n var MAX_VERTICAL_DISTANCE = 75;\n // Vertical distance should not be more than a fraction of the horizontal distance.\n var MAX_VERTICAL_RATIO = 0.3;\n // At least a 30px lateral motion is necessary for a swipe.\n var MIN_HORIZONTAL_DISTANCE = 30;\n\n return function(scope, element, attr) {\n var swipeHandler = $parse(attr[directiveName]);\n\n var startCoords, valid;\n\n function validSwipe(coords) {\n // Check that it's within the coordinates.\n // Absolute vertical distance must be within tolerances.\n // Horizontal distance, we take the current X - the starting X.\n // This is negative for leftward swipes and positive for rightward swipes.\n // After multiplying by the direction (-1 for left, +1 for right), legal swipes\n // (ie. same direction as the directive wants) will have a positive delta and\n // illegal ones a negative delta.\n // Therefore this delta must be positive, and larger than the minimum.\n if (!startCoords) return false;\n var deltaY = Math.abs(coords.y - startCoords.y);\n var deltaX = (coords.x - startCoords.x) * direction;\n return valid && // Short circuit for already-invalidated swipes.\n deltaY < MAX_VERTICAL_DISTANCE &&\n deltaX > 0 &&\n deltaX > MIN_HORIZONTAL_DISTANCE &&\n deltaY / deltaX < MAX_VERTICAL_RATIO;\n }\n\n var pointerTypes = ['touch'];\n if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {\n pointerTypes.push('mouse');\n }\n $swipe.bind(element, {\n 'start': function(coords, event) {\n startCoords = coords;\n valid = true;\n },\n 'cancel': function(event) {\n valid = false;\n },\n 'end': function(coords, event) {\n if (validSwipe(coords)) {\n scope.$apply(function() {\n element.triggerHandler(eventName);\n swipeHandler(scope, {$event: event});\n });\n }\n }\n }, pointerTypes);\n };\n }]);\n}\n\n// Left is negative X-coordinate, right is positive.\nmakeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');\nmakeSwipeDirective('ngSwipeRight', 1, 'swiperight');\n\n\n\n})(window, window.angular);\n","/**\n * State-based routing for AngularJS\n * @version v0.4.3\n * @link http://angular-ui.github.com/\n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\n\"undefined\"!=typeof module&&\"undefined\"!=typeof exports&&module.exports===exports&&(module.exports=\"ui.router\"),function(a,b,c){\"use strict\";function d(a,b){return T(new(T(function(){},{prototype:a})),b)}function e(a){return S(arguments,function(b){b!==a&&S(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return S(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=d<0?Math.ceil(d):Math.floor(d),d<0&&(d+=c);d=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return T({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e \"));if(t[c]=d,P(a))r.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);S(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),r.push(c,a,e)}s.pop(),t[c]=f}}function o(a){return Q(a)&&a.then&&a.$$promises}if(!Q(i))throw new Error(\"'invocables' must be an object\");var q=g(i||{}),r=[],s=[],t={};return S(i,n),i=s=t=null,function(d,f,g){function h(){--v||(w||e(u,f.$$values),s.$$values=u,s.$$promises=s.$$promises||!0,delete s.$$inheritedValues,n.resolve(u))}function i(a){s.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!N(s.$$failure))try{l.resolve(b.invoke(e,g,u)),l.promise.then(function(a){u[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;S(f,function(a){t.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,t[a].then(function(b){u[a]=b,--m||k()},j))}),m||k(),t[c]=p(l.promise)}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!Q(d))throw new Error(\"'locals' must be an object\")}else d=k;if(f){if(!o(f))throw new Error(\"'parent' must be a promise returned by $resolve.resolve()\")}else f=l;var n=a.defer(),s=p(n.promise),t=s.$$promises={},u=T({},d),v=1+r.length/3,w=!1;if(p(s),N(f.$$failure))return i(f.$$failure),s;f.$$inheritedValues&&e(u,m(f.$$inheritedValues,q)),T(t,f.$$promises),f.$$values?(w=e(u,m(f.$$values,q)),s.$$inheritedValues=m(f.$$values,q),h()):(f.$$inheritedValues&&(s.$$inheritedValues=m(f.$$inheritedValues,q)),f.then(h,i));for(var x=0,y=r.length;x=0));)s=f(r.id,r.type,r.cfg,\"path\"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf(\"?\");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,\"search\"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch=\"\";l+=g(t)+(!1===b.strict?\"/?\":\"\")+\"$\",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?\"i\":c),this.prefix=n[0],this.$$paramNames=q}function u(a){T(this,a)}function v(){function a(a){return null!=a?a.toString().replace(/(~|\\/)/g,function(a){return{\"~\":\"~~\",\"/\":\"~2F\"}[a]}):a}function e(a){return null!=a?a.toString().replace(/(~~|~2F)/g,function(a){return{\"~~\":\"~\",\"~2F\":\"/\"}[a]}):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return O(a)||R(a)&&O(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error(\"You cannot override a type's .pattern at runtime.\");b.extend(r[a.name],l.invoke(a.def))}}function k(a){T(this,a||{})}W=this;var l,m=!1,p=!0,q=!1,r={},s=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!N(a)||\"string\"==typeof a},pattern:/[^\\/]*/},int:{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return a!==c&&null!==a&&this.decode(a.toString())===a},pattern:/-?\\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return!0===a||!1===a},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),(\"0\"+(a.getMonth()+1)).slice(-2),(\"0\"+a.getDate()).slice(-2)].join(\"-\"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^\\/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};v.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error(\"Injectable functions cannot be called at configuration time\");return l.invoke(a.value)},this.caseInsensitive=function(a){return N(a)&&(m=a),m},this.strictMode=function(a){return N(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!N(a))return q;if(!0!==a&&!1!==a&&!P(a))throw new Error(\"Invalid squash policy: \"+a+\". Valid policies: false, true, arbitrary-string\");return q=a,a},this.compile=function(a,b){return new t(a,T(f(),b))},this.isMatcher=function(a){if(!Q(a))return!1;var b=!0;return S(t.prototype,function(c,d){O(c)&&(b=b&&N(a[d])&&O(a[d]))}),b},this.type=function(a,b,c){if(!N(b))return r[a];if(r.hasOwnProperty(a))throw new Error(\"A type named '\"+a+\"' has already been defined.\");return r[a]=new u(T({name:a},b)),c&&(w.push({name:a,def:c}),s||j()),this},S(x,function(a,b){r[b]=new u(T({name:b},a))}),r=d(r,{}),this.$get=[\"$injector\",function(a){return l=a,s=!1,j(),S(x,function(a,b){r[b]||(r[b]=new u(a))}),this}],this.Param=function(a,d,e,f){function j(a){var b=Q(a)?g(a):[];return-1===h(b,\"value\")&&-1===h(b,\"type\")&&-1===h(b,\"squash\")&&-1===h(b,\"array\")&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function k(c,d,e){if(c.type&&d)throw new Error(\"Param '\"+a+\"' has two type configurations.\");return d||(c.type?b.isString(c.type)?r[c.type]:c.type instanceof u?c.type:new u(c.type):\"config\"===e?r.any:r.string)}function m(){var b={array:\"search\"===f&&\"auto\"},c=a.match(/\\[\\]$/)?{array:!0}:{};return T(b,c,e).array}function p(a,b){var c=a.squash;if(!b||!1===c)return!1;if(!N(c)||null==c)return q;if(!0===c||P(c))return c;throw new Error(\"Invalid squash policy: '\"+c+\"'. Valid policies: false, true, or arbitrary string\")}function s(a,b,d,e){var f,g,i=[{from:\"\",to:d||b?c:\"\"},{from:null,to:d||b?c:\"\"}];return f=R(a.replace)?a.replace:[],P(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function t(){if(!l)throw new Error(\"Injectable functions cannot be called at configuration time\");var a=l.invoke(e.$$fn);if(null!==a&&a!==c&&!x.type.is(a))throw new Error(\"Default value (\"+a+\") for parameter '\"+x.id+\"' is not an instance of Type (\"+x.type.name+\")\");return a}function v(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(x.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),N(a)?x.type.$normalize(a):t()}function w(){return\"{Param:\"+a+\" \"+d+\" squash: '\"+A+\"' optional: \"+z+\"}\"}var x=this;e=j(e),d=k(e,d,f);var y=m();d=y?d.$asArray(y,\"search\"===f):d,\"string\"!==d.name||y||\"path\"!==f||e.value!==c||(e.value=\"\");var z=e.value!==c,A=p(e,z),B=s(e,y,z,A);T(this,{id:a,type:d,location:f,array:y,squash:A,replace:B,isOptional:z,value:v,dynamic:c,config:e,toString:w})},k.prototype={$$new:function(){return d(this,T(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),S(b,function(b){S(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return S(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return S(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;d=0)throw new Error(\"State must have a valid name\");if(A.hasOwnProperty(c))throw new Error(\"State '\"+c+\"' is already defined\");var e=-1!==c.indexOf(\".\")?c.substring(0,c.lastIndexOf(\".\")):P(b.parent)?b.parent:Q(b.parent)&&P(b.parent.name)?b.parent.name:\"\";if(e&&!A[e])return n(e,b.self);for(var f in D)O(D[f])&&(b[f]=D[f](b,D.$delegates[f]));return A[c]=b,!b[C]&&b.url&&a.when(b.url,[\"$match\",\"$stateParams\",function(a,c){z.$current.navigable==b&&j(a,c)||z.transitionTo(b,a,{inherit:!0,location:!1})}]),q(c),b}function s(a){return a.indexOf(\"*\")>-1}function t(a){for(var b=a.split(\".\"),c=z.$current.name.split(\".\"),d=0,e=b.length;d=G;d--)g=q[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=G;d2?k.enter(a,null,c).then(d):k.enter(a,null,c,d)},leave:function(a,c){b.version.minor>2?k.leave(a).then(c):k.leave(a,c)}};if(j){var e=j&&j(c,a);return{enter:function(a,b,c){e.enter(a,null,b),c()},leave:function(a,b){e.leave(a),b()}}}return d()}var i=g(),j=i(\"$animator\"),k=i(\"$animate\");return{restrict:\"ECA\",terminal:!0,priority:400,transclude:\"element\",compile:function(c,g,i){return function(c,g,j){function k(){if(m&&(m.remove(),m=null),o&&(o.$destroy(),o=null),n){var a=n.data(\"$uiViewAnim\");s.leave(n,function(){a.$$animLeave.resolve(),m=null}),m=n,n=null}}function l(h){var l,m=C(c,j,g,e),t=m&&a.$current&&a.$current.locals[m];if(h||t!==p){l=c.$new(),p=a.$current.locals[m],l.$emit(\"$viewContentLoading\",m);var u=i(l,function(a){var e=f.defer(),h=f.defer(),i={$animEnter:e.promise,$animLeave:h.promise,$$animLeave:h};a.data(\"$uiViewAnim\",i),s.enter(a,g,function(){e.resolve(),o&&o.$emit(\"$viewContentAnimationEnded\"),(b.isDefined(r)&&!r||c.$eval(r))&&d(a)}),k()});n=u,o=l,o.$emit(\"$viewContentLoaded\",m),o.$eval(q)}}var m,n,o,p,q=j.onload||\"\",r=j.autoscroll,s=h(j,c);g.inheritedData(\"$uiView\");c.$on(\"$stateChangeSuccess\",function(){l(!1)}),l(!0)}}}}function B(a,c,d,e){return{restrict:\"ECA\",priority:-400,compile:function(f){var g=f.html();return f.empty?f.empty():f[0].innerHTML=null,function(f,h,i){var j=d.$current,k=C(f,i,h,e),l=j&&j.locals[k];if(!l)return h.html(g),void a(h.contents())(f);h.data(\"$uiView\",{name:k,state:l.$$state}),h.html(l.$template?l.$template:g);var m=b.extend({},l);f[l.$$resolveAs]=m;var n=a(h.contents());if(l.$$controller){l.$scope=f,l.$element=h;var o=c(l.$$controller,l);l.$$controllerAs&&(f[l.$$controllerAs]=o,f[l.$$controllerAs][l.$$resolveAs]=m),O(o.$onInit)&&o.$onInit(),h.data(\"$ngControllerController\",o),h.children().data(\"$ngControllerController\",o)}n(f)}}}}function C(a,b,c,d){var e=d(b.uiView||b.name||\"\")(a),f=c.inheritedData(\"$uiView\");return e.indexOf(\"@\")>=0?e:e+\"@\"+(f?f.state.name:\"\")}function D(a,b){var c,d=a.match(/^\\s*({[^}]*})\\s*$/);if(d&&(a=b+\"(\"+d[1]+\")\"),!(c=a.replace(/\\n/g,\" \").match(/^([^(]+?)\\s*(\\((.*)\\))?$/))||4!==c.length)throw new Error(\"Invalid state ref '\"+a+\"'\");return{state:c[1],paramExpr:c[3]||null}}function E(a){var b=a.parent().inheritedData(\"$uiView\");if(b&&b.state&&b.state.name)return b.state}function F(a){var b=\"[object SVGAnimatedString]\"===Object.prototype.toString.call(a.prop(\"href\")),c=\"FORM\"===a[0].nodeName;return{attr:c?\"action\":b?\"xlink:href\":\"href\",isAnchor:\"A\"===a.prop(\"tagName\").toUpperCase(),clickable:!c}}function G(a,b,c,d,e){return function(f){var g=f.which||f.button,h=e();if(!(g>1||f.ctrlKey||f.metaKey||f.shiftKey||a.attr(\"target\"))){var i=c(function(){b.go(h.state,h.params,h.options)});f.preventDefault();var j=d.isAnchor&&!h.href?1:0;f.preventDefault=function(){j--<=0&&c.cancel(i)}}}}function H(a,b){return{relative:E(a)||b.$current,inherit:!0}}function I(a,c){return{restrict:\"A\",require:[\"?^uiSrefActive\",\"?^uiSrefActiveEq\"],link:function(d,e,f,g){var h,i=D(f.uiSref,a.current.name),j={state:i.state,href:null,params:null},k=F(e),l=g[1]||g[0],m=null;j.options=T(H(e,a),f.uiSrefOpts?d.$eval(f.uiSrefOpts):{});var n=function(c){c&&(j.params=b.copy(c)),j.href=a.href(i.state,j.params,j.options),m&&m(),l&&(m=l.$$addStateInfo(i.state,j.params)),null!==j.href&&f.$set(k.attr,j.href)};i.paramExpr&&(d.$watch(i.paramExpr,function(a){a!==j.params&&n(a)},!0),j.params=b.copy(d.$eval(i.paramExpr))),n(),k.clickable&&(h=G(e,a,c,k,function(){return j}),e[e.on?\"on\":\"bind\"](\"click\",h),d.$on(\"$destroy\",function(){e[e.off?\"off\":\"unbind\"](\"click\",h)}))}}}function J(a,b){return{restrict:\"A\",require:[\"?^uiSrefActive\",\"?^uiSrefActiveEq\"],link:function(c,d,e,f){function g(b){m.state=b[0],m.params=b[1],m.options=b[2],m.href=a.href(m.state,m.params,m.options),n&&n(),j&&(n=j.$$addStateInfo(m.state,m.params)),m.href&&e.$set(i.attr,m.href)}var h,i=F(d),j=f[1]||f[0],k=[e.uiState,e.uiStateParams||null,e.uiStateOpts||null],l=\"[\"+k.map(function(a){return a||\"null\"}).join(\", \")+\"]\",m={state:null,params:null,options:null,href:null},n=null;c.$watch(l,g,!0),g(c.$eval(l)),i.clickable&&(h=G(d,a,b,i,function(){return m}),d[d.on?\"on\":\"bind\"](\"click\",h),c.$on(\"$destroy\",function(){d[d.off?\"off\":\"unbind\"](\"click\",h)}))}}}function K(a,b,c){return{restrict:\"A\",controller:[\"$scope\",\"$element\",\"$attrs\",\"$timeout\",function(b,d,e,f){function g(b,c,e){var f=a.get(b,E(d)),g=h(b,c),i={state:f||{name:b},params:c,hash:g};return p.push(i),q[g]=e,function(){var a=p.indexOf(i);-1!==a&&p.splice(a,1)}}function h(a,c){if(!P(a))throw new Error(\"state should be a string\");return Q(c)?a+V(c):(c=b.$eval(c),Q(c)?a+V(c):a)}function i(){for(var a=0;a0)){var c=g(a,b,o);return i(),c}},b.$on(\"$stateChangeSuccess\",i),i()}]}}function L(a){var b=function(b,c){return a.is(b,c)};return b.$stateful=!0,b}function M(a){var b=function(b,c,d){return a.includes(b,c,d)};return b.$stateful=!0,b}var N=b.isDefined,O=b.isFunction,P=b.isString,Q=b.isObject,R=b.isArray,S=b.forEach,T=b.extend,U=b.copy,V=b.toJson;b.module(\"ui.router.util\",[\"ng\"]),b.module(\"ui.router.router\",[\"ui.router.util\"]),b.module(\"ui.router.state\",[\"ui.router.router\",\"ui.router.util\"]),b.module(\"ui.router\",[\"ui.router.state\"]),b.module(\"ui.router.compat\",[\"ui.router\"]),q.$inject=[\"$q\",\"$injector\"],b.module(\"ui.router.util\").service(\"$resolve\",q),b.module(\"ui.router.util\").provider(\"$templateFactory\",r);var W;t.prototype.concat=function(a,b){var c={caseInsensitive:W.caseInsensitive(),strict:W.strictMode(),squash:W.defaultSquashPolicy()};return new t(this.sourcePath+a+this.sourceSearch,T(c,b),this)},t.prototype.toString=function(){return this.source},t.prototype.exec=function(a,b){function c(a){function b(a){return a.split(\"\").reverse().join(\"\")}function c(a){return a.replace(/\\\\-/g,\"-\")}return o(o(b(a).split(/-(?!\\\\)/),b),c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error(\"Unbalanced capture group in route '\"+this.source+\"'\");var l,m;for(e=0;e*\",ghostClass:\"sortable-ghost\",ignore:\"a, img\",filter:null,animation:0,setData:function(a,b){a.setData(\"Text\",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:\"data-id\",delay:0};for(var e in d)!(e in b)&&(b[e]=d[e]);var g=b.group;g&&\"object\"==typeof g||(g=b.group={name:g}),[\"pull\",\"put\"].forEach(function(a){a in g||(g[a]=!0)}),b.groups=\" \"+g.name+(g.put.join?\" \"+g.put.join(\" \"):\"\")+\" \";for(var h in this)\"_\"===h.charAt(0)&&(this[h]=c(this,this[h]));f(a,\"mousedown\",this._onTapStart),f(a,\"touchstart\",this._onTapStart),f(a,\"dragover\",this),f(a,\"dragenter\",this),R.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a){v&&v.state!==a&&(i(v,\"display\",a?\"none\":\"\"),!a&&v.state&&w.insertBefore(v,t),v.state=a)}function c(a,b){var c=Q.call(arguments,2);return b.bind?b.bind.apply(b,[a].concat(c)):function(){return b.apply(a,c.concat(Q.call(arguments)))}}function d(a,b,c){if(a){c=c||L,b=b.split(\".\");var d=b.shift().toUpperCase(),e=new RegExp(\"\\\\s(\"+b.join(\"|\")+\")(?=\\\\s)\",\"g\");do if(\">*\"===d&&a.parentNode===c||(\"\"===d||a.nodeName.toUpperCase()==d)&&(!b.length||((\" \"+a.className+\" \").match(e)||[]).length==b.length))return a;while(a!==c&&(a=a.parentNode))}return null}function e(a){a.dataTransfer.dropEffect=\"move\",a.preventDefault()}function f(a,b,c){a.addEventListener(b,c,!1)}function g(a,b,c){a.removeEventListener(b,c,!1)}function h(a,b,c){if(a)if(a.classList)a.classList[c?\"add\":\"remove\"](b);else{var d=(\" \"+a.className+\" \").replace(I,\" \").replace(\" \"+b+\" \",\" \");a.className=(d+(c?\" \"+b:\"\")).replace(I,\" \")}}function i(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return L.defaultView&&L.defaultView.getComputedStyle?c=L.defaultView.getComputedStyle(a,\"\"):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b=\"-webkit-\"+b),d[b]=c+(\"string\"==typeof c?\"\":\"px\")}}function j(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;f>e;e++)c(d[e],e);return d}return[]}function k(a,b,c,d,e,f,g){var h=L.createEvent(\"Event\"),i=(a||b[J]).options,j=\"on\"+c.charAt(0).toUpperCase()+c.substr(1);h.initEvent(c,!0,!0),h.to=b,h.from=e||b,h.item=d||b,h.clone=v,h.oldIndex=f,h.newIndex=g,b.dispatchEvent(h),i[j]&&i[j].call(a,h)}function l(a,b,c,d,e,f){var g,h,i=a[J],j=i.options.onMove;return j&&(g=L.createEvent(\"Event\"),g.initEvent(\"move\",!0,!0),g.to=b,g.from=a,g.dragged=c,g.draggedRect=d,g.related=e||b,g.relatedRect=f||b.getBoundingClientRect(),h=j.call(i,g)),h}function m(a){a.draggable=!1}function n(){O=!1}function o(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return b.clientY-(d.top+d.height)>5&&c}function p(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function q(a){for(var b=0;a&&(a=a.previousElementSibling);)\"TEMPLATE\"!==a.nodeName.toUpperCase()&&b++;return b}function r(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function s(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var t,u,v,w,x,y,z,A,B,C,D,E,F,G,H={},I=/\\s+/g,J=\"Sortable\"+(new Date).getTime(),K=window,L=K.document,M=K.parseInt,N=!!(\"draggable\"in L.createElement(\"div\")),O=!1,P=Math.abs,Q=[].slice,R=[],S=r(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h=b.scrollSensitivity,i=b.scrollSpeed,j=a.clientX,k=a.clientY,l=window.innerWidth,m=window.innerHeight;if(z!==c&&(y=b.scroll,z=c,y===!0)){y=c;do if(y.offsetWidth=l-j)-(h>=j),g=(h>=m-k)-(h>=k),(f||g)&&(d=K)),(H.vx!==f||H.vy!==g||H.el!==d)&&(H.el=d,H.vx=f,H.vy=g,clearInterval(H.pid),d&&(H.pid=setInterval(function(){d===K?K.scrollTo(K.pageXOffset+f*i,K.pageYOffset+g*i):(g&&(d.scrollTop+=g*i),f&&(d.scrollLeft+=f*i))},24)))}},30);return a.prototype={constructor:a,_onTapStart:function(a){var b=this,c=this.el,e=this.options,f=a.type,g=a.touches&&a.touches[0],h=(g||a).target,i=h,j=e.filter;if(!(\"mousedown\"===f&&0!==a.button||e.disabled)&&(h=d(h,e.draggable,c))){if(C=q(h),\"function\"==typeof j){if(j.call(this,a,h,this))return k(b,i,\"filter\",h,c,C),void a.preventDefault()}else if(j&&(j=j.split(\",\").some(function(a){return a=d(i,a.trim(),c),a?(k(b,a,\"filter\",h,c,C),!0):void 0})))return void a.preventDefault();(!e.handle||d(i,e.handle,c))&&this._prepareDragStart(a,g,h)}},_prepareDragStart:function(a,b,c){var d,e=this,g=e.el,h=e.options,i=g.ownerDocument;c&&!t&&c.parentNode===g&&(F=a,w=g,t=c,x=t.nextSibling,E=h.group,d=function(){e._disableDelayedDrag(),t.draggable=!0,h.ignore.split(\",\").forEach(function(a){j(t,a.trim(),m)}),e._triggerDragStart(b)},f(i,\"mouseup\",e._onDrop),f(i,\"touchend\",e._onDrop),f(i,\"touchcancel\",e._onDrop),h.delay?(f(i,\"mousemove\",e._disableDelayedDrag),f(i,\"touchmove\",e._disableDelayedDrag),e._dragStartTimer=setTimeout(d,h.delay)):d())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),g(a,\"mousemove\",this._disableDelayedDrag),g(a,\"touchmove\",this._disableDelayedDrag)},_triggerDragStart:function(a){a?(F={target:t,clientX:a.clientX,clientY:a.clientY},this._onDragStart(F,\"touch\")):N?(f(t,\"dragend\",this),f(w,\"dragstart\",this._onDragStart)):this._onDragStart(F,!0);try{L.selection?L.selection.empty():window.getSelection().removeAllRanges()}catch(b){}},_dragStarted:function(){w&&t&&(h(t,this.options.ghostClass,!0),a.active=this,k(this,w,\"start\",t,w,C))},_emulateDragOver:function(){if(G){i(u,\"display\",\"none\");var a=L.elementFromPoint(G.clientX,G.clientY),b=a,c=\" \"+this.options.group.name,d=R.length;if(b)do{if(b[J]&&b[J].options.groups.indexOf(c)>-1){for(;d--;)R[d]({clientX:G.clientX,clientY:G.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);i(u,\"display\",\"\")}},_onTouchMove:function(a){if(F){var b=a.touches?a.touches[0]:a,c=b.clientX-F.clientX,d=b.clientY-F.clientY,e=a.touches?\"translate3d(\"+c+\"px,\"+d+\"px,0)\":\"translate(\"+c+\"px,\"+d+\"px)\";G=b,i(u,\"webkitTransform\",e),i(u,\"mozTransform\",e),i(u,\"msTransform\",e),i(u,\"transform\",e),a.preventDefault()}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;if(this._offUpEvents(),\"clone\"==E.pull&&(v=t.cloneNode(!0),i(v,\"display\",\"none\"),w.insertBefore(v,t)),b){var e,g=t.getBoundingClientRect(),h=i(t);u=t.cloneNode(!0),i(u,\"top\",g.top-M(h.marginTop,10)),i(u,\"left\",g.left-M(h.marginLeft,10)),i(u,\"width\",g.width),i(u,\"height\",g.height),i(u,\"opacity\",\"0.8\"),i(u,\"position\",\"fixed\"),i(u,\"zIndex\",\"100000\"),w.appendChild(u),e=u.getBoundingClientRect(),i(u,\"width\",2*g.width-e.width),i(u,\"height\",2*g.height-e.height),\"touch\"===b?(f(L,\"touchmove\",this._onTouchMove),f(L,\"touchend\",this._onDrop),f(L,\"touchcancel\",this._onDrop)):(f(L,\"mousemove\",this._onTouchMove),f(L,\"mouseup\",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,150)}else c&&(c.effectAllowed=\"move\",d.setData&&d.setData.call(this,c,t)),f(L,\"drop\",this);setTimeout(this._dragStarted,0)},_onDragOver:function(a){var c,e,f,g=this.el,h=this.options,j=h.group,k=j.put,m=E===j,p=h.sort;if(void 0!==a.preventDefault&&(a.preventDefault(),!h.dragoverBubble&&a.stopPropagation()),E&&!h.disabled&&(m?p||(f=!w.contains(t)):E.pull&&k&&(E.name===j.name||k.indexOf&&~k.indexOf(E.name)))&&(void 0===a.rootEl||a.rootEl===this.el)){if(S(a,h,this.el),O)return;if(c=d(a.target,h.draggable,g),e=t.getBoundingClientRect(),f)return b(!0),void(v||x?w.insertBefore(t,v||x):p||w.appendChild(t));if(0===g.children.length||g.children[0]===u||g===a.target&&(c=o(g,a))){if(c){if(c.animated)return;r=c.getBoundingClientRect()}b(m),l(w,g,t,e,c,r)!==!1&&(g.appendChild(t),this._animate(e,t),c&&this._animate(r,c))}else if(c&&!c.animated&&c!==t&&void 0!==c.parentNode[J]){A!==c&&(A=c,B=i(c));var q,r=c.getBoundingClientRect(),s=r.right-r.left,y=r.bottom-r.top,z=/left|right|inline/.test(B.cssFloat+B.display),C=c.offsetWidth>t.offsetWidth,D=c.offsetHeight>t.offsetHeight,F=(z?(a.clientX-r.left)/s:(a.clientY-r.top)/y)>.5,G=c.nextElementSibling,H=l(w,g,t,e,c,r);H!==!1&&(O=!0,setTimeout(n,30),b(m),q=1===H||-1===H?1===H:z?c.previousElementSibling===t&&!C||F&&C:G!==t&&!D||F&&D,q&&!G?g.appendChild(t):c.parentNode.insertBefore(t,q?G:c),this._animate(e,t),this._animate(r,c))}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();i(b,\"transition\",\"none\"),i(b,\"transform\",\"translate3d(\"+(a.left-d.left)+\"px,\"+(a.top-d.top)+\"px,0)\"),b.offsetWidth,i(b,\"transition\",\"all \"+c+\"ms\"),i(b,\"transform\",\"translate3d(0,0,0)\"),clearTimeout(b.animated),b.animated=setTimeout(function(){i(b,\"transition\",\"\"),i(b,\"transform\",\"\"),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;g(L,\"touchmove\",this._onTouchMove),g(a,\"mouseup\",this._onDrop),g(a,\"touchend\",this._onDrop),g(a,\"touchcancel\",this._onDrop)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(H.pid),clearTimeout(this._dragStartTimer),g(L,\"drop\",this),g(L,\"mousemove\",this._onTouchMove),g(c,\"dragstart\",this._onDragStart),this._offUpEvents(),b&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation(),u&&u.parentNode.removeChild(u),t&&(g(t,\"dragend\",this),m(t),h(t,this.options.ghostClass,!1),w!==t.parentNode?(D=q(t),k(null,t.parentNode,\"sort\",t,w,C,D),k(this,w,\"sort\",t,w,C,D),k(null,t.parentNode,\"add\",t,w,C,D),k(this,w,\"remove\",t,w,C,D)):(v&&v.parentNode.removeChild(v),t.nextSibling!==x&&(D=q(t),k(this,w,\"update\",t,w,C,D),k(this,w,\"sort\",t,w,C,D))),a.active&&(k(this,w,\"end\",t,w,C,D),this.save())),w=t=u=x=v=y=z=F=G=A=B=E=a.active=null)},handleEvent:function(a){var b=a.type;\"dragover\"===b||\"dragenter\"===b?t&&(this._onDragOver(a),e(a)):(\"drop\"===b||\"dragend\"===b)&&this._onDrop(a)},toArray:function(){for(var a,b=[],c=this.el.children,e=0,f=c.length,g=this.options;f>e;e++)a=c[e],d(a,g.draggable,this.el)&&b.push(a.getAttribute(g.dataIdAttr)||p(a));return b},sort:function(a){var b={},c=this.el;this.toArray().forEach(function(a,e){var f=c.children[e];d(f,this.options.draggable,c)&&(b[a]=f)},this),a.forEach(function(a){b[a]&&(c.removeChild(b[a]),c.appendChild(b[a]))})},save:function(){var a=this.options.store;a&&a.set(this)},closest:function(a,b){return d(a,b||this.options.draggable,this.el)},option:function(a,b){var c=this.options;return void 0===b?c[a]:void(c[a]=b)},destroy:function(){var a=this.el;a[J]=null,g(a,\"mousedown\",this._onTapStart),g(a,\"touchstart\",this._onTapStart),g(a,\"dragover\",this),g(a,\"dragenter\",this),Array.prototype.forEach.call(a.querySelectorAll(\"[draggable]\"),function(a){a.removeAttribute(\"draggable\")}),R.splice(R.indexOf(this._onDragOver),1),this._onDrop(),this.el=a=null}},a.utils={on:f,off:g,css:i,find:j,bind:c,is:function(a,b){return!!d(a,b,a)},extend:s,throttle:r,closest:d,toggleClass:h,index:q},a.version=\"1.2.1\",a.create=function(b,c){return new a(b,c)},a});","/*\r\n * angular-http-batcher - v1.12.0 - 2015-10-12\r\n * https://github.com/jonsamwell/angular-http-batcher\r\n * Copyright (c) 2015 Jon Samwell;*/\r\n!function(a,b){\"use strict\";function c(){var a=[],c=\"httpBatchAdapter\",d={maxBatchedRequestPerCall:10,minimumBatchSize:2,batchRequestCollectionDelay:100,ignoredVerbs:[\"head\"],sendCookies:!1,enabled:!0,adapter:c,uniqueRequestName:null};this.setAllowedBatchEndpoint=function(e,f,g){var h=b.copy(d);void 0!==g&&(b.forEach(g,function(a,b){h[b]=a}),b.forEach(h.ignoredVerbs,function(a,b){h.ignoredVerbs[b]=a.toLowerCase()})),h.serviceUrl=e,h.batchEndpointUrl=f,h.adapter=h.adapter||c,a.push(h)},this.getBatchConfig=function(b){var c,d;for(d=0;d-1));d+=1)c=void 0;return c},this.canBatchCall=function(a,b){var c=this.getBatchConfig(a),d=c?c.canBatchRequest:void 0,e=!1;return c&&c.enabled===!0&&(e=d?d(a,b):c.batchEndpointUrl!==a&&-1===a.indexOf(c.batchEndpointUrl)&&-1===c.ignoredVerbs.indexOf(b.toLowerCase())),e},this.calculateBoundary=function(){return(new Date).getTime().toString()},this.$get=[function(){return this}]}function d(a,b,c,d,e){this.request=a,this.statusCode=b,this.statusText=c,this.data=d,this.headers=e}function e(c,d,e){function f(a,b){var d,f,g,h,i,k,l=e.calculateBoundary(),m={method:\"POST\",url:b.batchEndpointUrl,cache:!1,headers:b.batchRequestHeaders||{}},n=[];for(m.headers[p.contentType]=\"multipart/mixed; boundary=\"+l,f=0;f1?\"?\"+i[1]:\"\"),n.push(g.method+\" \"+k+\" \"+p.httpVersion),n.push(\"Host: \"+d.host);for(h in g.headers)n.push(h+p.colon+p.singleSpace+g.headers[h]);b.sendCookies===!0&&c[0].cookie&&c[0].cookie.length>0&&n.push(\"Cookie: \"+c[0].cookie),n.push(p.emptyString),g.data&&n.push(g.data),n.push(p.emptyString)}return n.push(p.doubleDash+l+p.doubleDash),m.data=n.join(p.newline),m}function g(a,b,c){var d,e,f=[],g=k(b.headers()[\"content-type\"]),h=b.data.split(p.doubleDash+g+p.newline),i=0;for(d=0;d-1||a.indexOf(\"../\")>-1){var h=document.createElement(\"a\");h.href=a,a=h.href}return a.indexOf(\"://\")>-1?(f=a.indexOf(\"://\")+3,g=a.slice(f).split(p.forwardSlash),b=a.substring(0,f),c=g[0],e=function(){return delete g[0],g.join(p.forwardSlash)}()):(e=a,b=d.location.protocol,c=d.location.host),{protocol:b,host:c,relativeUrl:e}}function k(a){var b=\"boundary=\",c=a.indexOf(b),d=a.indexOf(\";\",c),e=a.substring(c+b.length,d>0?d:a.length);return e=e.replace(/\"/g,p.emptyString)}function l(a){return\"string\"==typeof a?a.replace(\")]}',\\n\",\"\"):a}function m(a,c){var d=c;return a=a.toLowerCase(),a.indexOf(\"json\")>-1&&(c=l(c),d=b.fromJson(c)),d}function n(b,c,d){var e,f,g,h,j,k,l=b.split(p.newline),n={headers:{}},o=!1;for(f=0;f1&&(c+=\"?\"+encodeURIComponent(f[1])),d>0&&(g.url+=\"&\"),g.url+=d.toString()+\"=\"+c;return g}function c(b,c){var d,e,f,g=[],h=c.data;for(d=0;d=this.config.maxBatchedRequestPerCall&&this.flush(),!0}function j(){var a=this,c=a.getAdapter(),d=c.buildRequest(a.requests,a.config);a.sendCallback(),a.$injector.get(\"$http\")(d).then(function(d){var e=c.parseResponse(a.requests,d,a.config);b.forEach(e,function(a){a.request.callback(a.statusCode,a.data,g(a.headers),a.statusText)})},function(c){b.forEach(a.requests,function(a){a.callback(c.statusCode,c.data,c.headers,c.statusText)})})}function k(){this.$timeout.cancel(this.currentTimeoutToken),this.currentTimeoutToken=void 0,this.send()}function l(a,c,d,e,f){var g=this;this.$injector=a,this.$timeout=c,this.adapters=d,this.config=e,this.sendCallback=f,this.requests=[],this.currentTimeoutToken=c(function(){g.currentTimeoutToken=void 0,g.requests.length
\");return e.text(t),e.html()},i=function(t){if(!n)throw new Error(\"pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.\");return n(t)},s=function(t){if(!a)throw new Error(\"pascalprecht.translate.$translateSanitization: Error cannot find $sce service.\");return a.trustAsHtml(t)},o=function(t,n,a){if(angular.isDate(t))return t;if(angular.isObject(t)){var r=angular.isArray(t)?[]:{};if(a){if(-1} [locale] - The locale(s) to use\n */\nfunction MessageFormat(locale) {\n this.pluralFuncs = {};\n if (locale) {\n if (typeof locale == 'string') {\n this.pluralFuncs[locale] = getPluralFunc(locale);\n } else if (Array.isArray(locale)) {\n locale.forEach(function(lc) { this.pluralFuncs[lc] = getPluralFunc(lc); }, this);\n } else if (typeof locale == 'object') {\n for (var lc in locale) if (locale.hasOwnProperty(lc)) {\n if (typeof locale[lc] != 'function') throw new Error('Expected function value for locale ' + JSON.stringify(lc));\n this.pluralFuncs[lc] = locale[lc];\n }\n this.hasCustomPluralFuncs = true;\n }\n }\n this.fmt = {};\n this.runtime = new Runtime(this);\n}\n\n\n/** The default locale\n *\n * Read by `compile()` when no locale has been previously set\n *\n * @memberof MessageFormat\n * @default 'en'\n */\nMessageFormat.defaultLocale = 'en';\n\n\n/** Escape special characaters\n *\n * Prefix the characters `#`, `{`, `}` and `\\` in the input string with a `\\`.\n * This will allow those characters to not be considered as MessageFormat\n * control characters.\n *\n * @param {string} str - The input string\n * @returns {string} The escaped string\n */\nMessageFormat.escape = function(str) {\n return str.replace(/[#{}\\\\]/g, '\\\\$&');\n}\n\n\n/** Default number formatting functions in the style of ICU's\n * {@link http://icu-project.org/apiref/icu4j/com/ibm/icu/text/MessageFormat.html simpleArg syntax}\n * implemented using the\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl Intl}\n * object defined by ECMA-402.\n *\n * **Note**: Intl is not defined in default Node until 0.11.15 / 0.12.0, so\n * earlier versions require a {@link https://www.npmjs.com/package/intl polyfill}.\n * Therefore {@link MessageFormat.intlSupport} needs to be true for these default\n * functions to be available for inclusion in the output.\n *\n * @see MessageFormat#setIntlSupport\n *\n * @namespace\n */\nMessageFormat.formatters = {\n\n\n /** Represent a number as an integer, percent or currency value\n *\n * Available in MessageFormat strings as `{VAR, number, integer|percent|currency}`.\n * Internally, calls Intl.NumberFormat with appropriate parameters. `currency` will\n * default to USD; to change, set `MessageFormat#currency` to the appropriate\n * three-letter currency code.\n *\n * @param {number} value - The value to operate on\n * @param {string} type - One of `'integer'`, `'percent'` , or `currency`\n *\n * @example\n * var mf = new MessageFormat('en').setIntlSupport(true);\n * mf.currency = 'EUR'; // needs to be set before first compile() call\n *\n * mf.compile('{N} is almost {N, number, integer}')({ N: 3.14 })\n * // '3.14 is almost 3'\n *\n * mf.compile('{P, number, percent} complete')({ P: 0.99 })\n * // '99% complete'\n *\n * mf.compile('The total is {V, number, currency}.')({ V: 5.5 })\n * // 'The total is €5.50.'\n */\n number: function(self) {\n return new Function(\"v,lc,p\",\n \"return new Intl.NumberFormat(lc,\\n\" +\n \" p=='integer' ? {maximumFractionDigits:0}\\n\" +\n \" : p=='percent' ? {style:'percent'}\\n\" +\n \" : p=='currency' ? {style:'currency', currency:'\" + (self.currency || 'USD') + \"', minimumFractionDigits:2, maximumFractionDigits:2}\\n\" +\n \" : {}).format(v)\"\n );\n },\n\n\n /** Represent a date as a short/default/long/full string\n *\n * The input value needs to be in a form that the\n * {@link https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date Date object}\n * can process using its single-argument form, `new Date(value)`.\n *\n * @param {number|string} value - Either a Unix epoch time in milliseconds, or a string value representing a date\n * @param {string} [type='default'] - One of `'short'`, `'default'`, `'long'` , or `full`\n *\n * @example\n * var mf = new MessageFormat(['en', 'fi']).setIntlSupport(true);\n *\n * mf.compile('Today is {T, date}')({ T: Date.now() })\n * // 'Today is Feb 21, 2016'\n *\n * mf.compile('Tänään on {T, date}', 'fi')({ T: Date.now() })\n * // 'Tänään on 21. helmikuuta 2016'\n *\n * mf.compile('Unix time started on {T, date, full}')({ T: 0 })\n * // 'Unix time started on Thursday, January 1, 1970'\n *\n * var cf = mf.compile('{sys} became operational on {d0, date, short}');\n * cf({ sys: 'HAL 9000', d0: '12 January 1999' })\n * // 'HAL 9000 became operational on 1/12/1999'\n */\n date: function(v,lc,p) {\n var o = {day:'numeric', month:'short', year:'numeric'};\n switch (p) {\n case 'full': o.weekday = 'long';\n case 'long': o.month = 'long'; break;\n case 'short': o.month = 'numeric';\n }\n return (new Date(v)).toLocaleDateString(lc, o)\n },\n\n\n /** Represent a time as a short/default/long string\n *\n * The input value needs to be in a form that the\n * {@link https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date Date object}\n * can process using its single-argument form, `new Date(value)`.\n *\n * @param {number|string} value - Either a Unix epoch time in milliseconds, or a string value representing a date\n * @param {string} [type='default'] - One of `'short'`, `'default'`, `'long'` , or `full`\n *\n * @example\n * var mf = new MessageFormat(['en', 'fi']).setIntlSupport(true);\n *\n * mf.compile('The time is now {T, time}')({ T: Date.now() })\n * // 'The time is now 11:26:35 PM'\n *\n * mf.compile('Kello on nyt {T, time}', 'fi')({ T: Date.now() })\n * // 'Kello on nyt 23.26.35'\n *\n * var cf = mf.compile('The Eagle landed at {T, time, full} on {T, date, full}');\n * cf({ T: '1969-07-20 20:17:40 UTC' })\n * // 'The Eagle landed at 10:17:40 PM GMT+2 on Sunday, July 20, 1969'\n */\n time: function(v,lc,p) {\n var o = {second:'numeric', minute:'numeric', hour:'numeric'};\n switch (p) {\n case 'full': case 'long': o.timeZoneName = 'short'; break;\n case 'short': delete o.second;\n }\n return (new Date(v)).toLocaleTimeString(lc, o)\n }\n};\n\n\n/** Add custom formatter functions to this MessageFormat instance\n *\n * The general syntax for calling a formatting function in MessageFormat is\n * `{var, fn[, args]*}`, where `var` is the variable that will be set by the\n * user code, `fn` determines the formatting function, and `args` is an\n * optional comma-separated list of additional arguments.\n *\n * In JavaScript, each formatting function is called with three parameters;\n * the variable value `v`, the current locale `lc`, and (if set) `args` as a\n * single string, or an array of strings. Formatting functions should not have\n * side effects.\n *\n * @see MessageFormat.formatters\n *\n * @memberof MessageFormat\n * @param {Object.} fmt - A map of formatting functions\n * @returns {MessageFormat} The MessageFormat instance, to allow for chaining\n *\n * @example\n * var mf = new MessageFormat('en-GB');\n * mf.addFormatters({\n * upcase: function(v) { return v.toUpperCase(); },\n * locale: function(v, lc) { return lc; },\n * prop: function(v, lc, p) { return v[p] }\n * });\n *\n * mf.compile('This is {VAR, upcase}.')({ VAR: 'big' })\n * // 'This is BIG.'\n *\n * mf.compile('The current locale is {_, locale}.')({ _: '' })\n * // 'The current locale is en-GB.'\n *\n * mf.compile('Answer: {obj, prop, a}')({ obj: {q: 3, a: 42} })\n * // 'Answer: 42'\n */\nMessageFormat.prototype.addFormatters = function(fmt) {\n for (var name in fmt) if (fmt.hasOwnProperty(name)) {\n this.fmt[name] = fmt[name];\n }\n return this;\n};\n\n\n/** Disable the validation of plural & selectordinal keys\n *\n * Previous versions of messageformat.js allowed the use of plural &\n * selectordinal statements with any keys; now we throw an error when a\n * statement uses a non-numerical key that will never be matched as a\n * pluralization category for the current locale.\n *\n * Use this method to disable the validation and allow usage as previously.\n * To re-enable, you'll need to create a new MessageFormat instance.\n *\n * @returns {MessageFormat} The MessageFormat instance, to allow for chaining\n *\n * @example\n * var mf = new MessageFormat('en');\n * var msg = '{X, plural, zero{no answers} one{an answer} other{# answers}}';\n *\n * mf.compile(msg);\n * // Error: Invalid key `zero` for argument `X`. Valid plural keys for this\n * // locale are `one`, `other`, and explicit keys like `=0`.\n *\n * mf.disablePluralKeyChecks();\n * mf.compile(msg)({ X: 0 });\n * // '0 answers'\n */\nMessageFormat.prototype.disablePluralKeyChecks = function() {\n this.noPluralKeyChecks = true;\n for (var lc in this.pluralFuncs) if (this.pluralFuncs.hasOwnProperty(lc)) {\n this.pluralFuncs[lc].cardinal = [];\n this.pluralFuncs[lc].ordinal = [];\n }\n return this;\n};\n\n\n/** Enable or disable the addition of Unicode control characters to all input\n * to preserve the integrity of the output when mixing LTR and RTL text.\n *\n * @see http://cldr.unicode.org/development/development-process/design-proposals/bidi-handling-of-structured-text\n *\n * @memberof MessageFormat\n * @param {boolean} [enable=true]\n * @returns {MessageFormat} The MessageFormat instance, to allow for chaining\n *\n * @example\n * // upper case stands for RTL characters, output is shown as rendered\n * var mf = new MessageFormat('en');\n *\n * mf.compile('{0} >> {1} >> {2}')(['first', 'SECOND', 'THIRD']);\n * // 'first >> THIRD << SECOND'\n *\n * mf.setBiDiSupport(true);\n * mf.compile('{0} >> {1} >> {2}')(['first', 'SECOND', 'THIRD']);\n * // 'first >> SECOND >> THIRD'\n */\nMessageFormat.prototype.setBiDiSupport = function(enable) {\n this.bidiSupport = !!enable || (typeof enable == 'undefined');\n return this;\n};\n\n\n/** Enable or disable support for the default formatters, which require the\n * `Intl` object. Note that this can't be autodetected, as the environment\n * in which the formatted text is compiled into Javascript functions is not\n * necessarily the same environment in which they will get executed.\n *\n * @see MessageFormat.formatters\n *\n * @memberof MessageFormat\n * @param {boolean} [enable=true]\n * @returns {MessageFormat} The MessageFormat instance, to allow for chaining\n */\nMessageFormat.prototype.setIntlSupport = function(enable) {\n this.intlSupport = !!enable || (typeof enable == 'undefined');\n return this;\n};\n\n\n/** According to the ICU MessageFormat spec, a `#` character directly inside a\n * `plural` or `selectordinal` statement should be replaced by the number\n * matching the surrounding statement. By default, messageformat.js will\n * replace `#` signs with the value of the nearest surrounding `plural` or\n * `selectordinal` statement.\n *\n * Set this to true to follow the stricter ICU MessageFormat spec, and to\n * throw a runtime error if `#` is used with non-numeric input.\n *\n * @memberof MessageFormat\n * @param {boolean} [enable=true]\n * @returns {MessageFormat} The MessageFormat instance, to allow for chaining\n *\n * @example\n * var mf = new MessageFormat('en');\n *\n * var cookieMsg = '#: {X, plural, =0{no cookies} one{a cookie} other{# cookies}}';\n * mf.compile(cookieMsg)({ X: 3 });\n * // '#: 3 cookies'\n *\n * var pastryMsg = '{X, plural, one{{P, select, cookie{a cookie} other{a pie}}} other{{P, select, cookie{# cookies} other{# pies}}}}';\n * mf.compile(pastryMsg)({ X: 3, P: 'pie' });\n * // '3 pies'\n *\n * mf.setStrictNumberSign(true);\n * mf.compile(pastryMsg)({ X: 3, P: 'pie' });\n * // '# pies'\n */\nMessageFormat.prototype.setStrictNumberSign = function(enable) {\n this.strictNumberSign = !!enable || (typeof enable == 'undefined');\n this.runtime.setStrictNumber(this.strictNumberSign);\n return this;\n};\n\n\n/** Compile messages into storable functions\n *\n * If `messages` is a single string including ICU MessageFormat declarations,\n * the result of `compile()` is a function taking a single Object parameter\n * `d` representing each of the input's defined variables.\n *\n * If `messages` is a hierarchical structure of such strings, the output of\n * `compile()` will match that structure, with each string replaced by its\n * corresponding JavaScript function.\n *\n * If the input `messages` -- and therefore the output -- of `compile()` is an\n * object, the output object will have a `toString(global)` method that may be\n * used to store or cache the compiled functions to disk, for later inclusion\n * in any JS environment, without a local MessageFormat instance required. Its\n * `global` parameters sets the name (if any) of the resulting global variable,\n * with special handling for `exports`, `module.exports`, and `export default`.\n * If `global` does not contain a `.`, the output defaults to an UMD pattern.\n *\n * If `locale` is not set, the first locale set in the object's constructor\n * will be used by default; using a key at any depth of `messages` that is a\n * declared locale will set its child elements to use that locale.\n *\n * If `locale` is set, it is used for all messages. If the constructor\n * declared any locales, `locale` needs to be one of them.\n *\n * @memberof MessageFormat\n * @param {string|Object} messages - The input message(s) to be compiled, in ICU MessageFormat\n * @param {string} [locale] - A locale to use for the messages\n * @returns {function|Object} The first match found for the given locale(s)\n *\n * @example\n * var mf = new MessageFormat('en');\n * var cf = mf.compile('A {TYPE} example.');\n *\n * cf({ TYPE: 'simple' })\n * // 'A simple example.'\n *\n * @example\n * var mf = new MessageFormat(['en', 'fi']);\n * var cf = mf.compile({\n * en: { a: 'A {TYPE} example.',\n * b: 'This is the {COUNT, selectordinal, one{#st} two{#nd} few{#rd} other{#th}} example.' },\n * fi: { a: '{TYPE} esimerkki.',\n * b: 'Tämä on {COUNT, selectordinal, other{#.}} esimerkki.' }\n * });\n *\n * cf.en.b({ COUNT: 2 })\n * // 'This is the 2nd example.'\n *\n * cf.fi.b({ COUNT: 2 })\n * // 'Tämä on 2. esimerkki.'\n *\n * @example\n * var fs = require('fs');\n * var mf = new MessageFormat('en').setIntlSupport();\n * var msgSet = {\n * a: 'A {TYPE} example.',\n * b: 'This has {COUNT, plural, one{one member} other{# members}}.',\n * c: 'We have {P, number, percent} code coverage.'\n * };\n * var cfStr = mf.compile(msgSet).toString('module.exports');\n * fs.writeFileSync('messages.js', cfStr);\n * ...\n * var messages = require('./messages');\n *\n * messages.a({ TYPE: 'more complex' })\n * // 'A more complex example.'\n *\n * messages.b({ COUNT: 3 })\n * // 'This has 3 members.'\n */\nMessageFormat.prototype.compile = function(messages, locale) {\n function _stringify(obj, level) {\n if (!level) level = 0;\n if (typeof obj != 'object') return obj;\n var o = [], indent = '';\n for (var i = 0; i < level; ++i) indent += ' ';\n for (var k in obj) o.push('\\n' + indent + ' ' + Compiler.propname(k) + ': ' + _stringify(obj[k], level + 1));\n return '{' + o.join(',') + '\\n' + indent + '}';\n }\n\n var pf;\n if (Object.keys(this.pluralFuncs).length == 0) {\n if (!locale) locale = MessageFormat.defaultLocale;\n pf = {};\n pf[locale] = getPluralFunc(locale, this.noPluralKeyChecks);\n } else if (locale) {\n pf = {};\n pf[locale] = this.pluralFuncs[locale];\n if (!pf[locale]) throw new Error('Locale ' + JSON.stringify(locale) + 'not found in ' + JSON.stringify(this.pluralFuncs) + '!');\n } else {\n pf = this.pluralFuncs;\n locale = Object.keys(pf)[0];\n }\n\n var compiler = new Compiler(this);\n var obj = compiler.compile(messages, locale, pf);\n\n if (typeof messages != 'object') {\n var fn = new Function(\n 'number, plural, select, fmt', Compiler.funcname(locale),\n 'return ' + obj);\n var rt = this.runtime;\n return fn(rt.number, rt.plural, rt.select, this.fmt, pf[locale]);\n }\n\n var rtStr = this.runtime.toString(pf, compiler) + '\\n';\n var objStr = _stringify(obj);\n var result = new Function(rtStr + 'return ' + objStr)();\n if (result.hasOwnProperty('toString')) throw new Error('The top-level message key `toString` is reserved');\n\n result.toString = function(global) {\n switch (global || '') {\n case 'exports':\n var o = [];\n for (var k in obj) o.push(Compiler.propname(k, 'exports') + ' = ' + _stringify(obj[k]));\n return rtStr + o.join(';\\n');\n case 'module.exports':\n return rtStr + 'module.exports = ' + objStr;\n case 'export default':\n return rtStr + 'export default ' + objStr;\n case '':\n return rtStr + 'return ' + objStr;\n default:\n if (global.indexOf('.') > -1) return rtStr + global + ' = ' + objStr;\n return rtStr + [\n '(function (root, G) {',\n ' if (typeof define === \"function\" && define.amd) { define(G); }',\n ' else if (typeof exports === \"object\") { module.exports = G; }',\n ' else { ' + Compiler.propname(global, 'root') + ' = G; }',\n '})(this, ' + objStr + ');'\n ].join('\\n');\n }\n }\n return result;\n}\n\n\nmodule.exports = MessageFormat;\n\n},{\"./compiler\":1,\"./runtime\":3,\"make-plural/umd/pluralCategories\":6,\"make-plural/umd/plurals\":7}],3:[function(require,module,exports){\nvar Compiler = require('./compiler');\n\n\n/** A set of utility functions that are called by the compiled Javascript\n * functions, these are included locally in the output of {@link\n * MessageFormat#compile compile()}.\n *\n * @class\n * @param {MessageFormat} mf - A MessageFormat instance\n */\nfunction Runtime(mf) {\n this.mf = mf;\n this.setStrictNumber(mf.strictNumberSign);\n}\n\nmodule.exports = Runtime;\n\n\n/** Utility function for `#` in plural rules\n *\n * Will throw an Error if `value` has a non-numeric value and `offset` is\n * non-zero or {@link MessageFormat#setStrictNumberSign} is set.\n *\n * @function Runtime#number\n * @param {number} value - The value to operate on\n * @param {string} name - The name of the argument, used for error reporting\n * @param {number} [offset=0] - An optional offset, set by the surrounding context\n * @returns {number|string} The result of applying the offset to the input value\n */\nfunction defaultNumber(value, name, offset) {\n if (!offset) return value;\n if (isNaN(value)) throw new Error('Can\\'t apply offset:' + offset + ' to argument `' + name +\n '` with non-numerical value ' + JSON.stringify(value) + '.');\n return value - offset;\n}\n\n\n/** @private */\nfunction strictNumber(value, name, offset) {\n if (isNaN(value)) throw new Error('Argument `' + name + '` has non-numerical value ' + JSON.stringify(value) + '.');\n return value - (offset || 0);\n}\n\n\n/** Set how strictly the {@link number} method parses its input.\n *\n * According to the ICU MessageFormat spec, `#` can only be used to replace a\n * number input of a `plural` statement. By default, messageformat.js does not\n * throw a runtime error if you use non-numeric argument with a `plural` rule,\n * unless rule also includes a non-zero `offset`.\n *\n * This is called by {@link MessageFormat#setStrictNumberSign} to follow the\n * stricter ICU MessageFormat spec.\n *\n * @param {boolean} [enable=false]\n */\nRuntime.prototype.setStrictNumber = function(enable) {\n this.number = enable ? strictNumber : defaultNumber;\n}\n\n\n/** Utility function for `{N, plural|selectordinal, ...}`\n *\n * @param {number} value - The key to use to find a pluralization rule\n * @param {number} offset - An offset to apply to `value`\n * @param {function} lcfunc - A locale function from `pluralFuncs`\n * @param {Object.} data - The object from which results are looked up\n * @param {?boolean} isOrdinal - If true, use ordinal rather than cardinal rules\n * @returns {string} The result of the pluralization\n */\nRuntime.prototype.plural = function(value, offset, lcfunc, data, isOrdinal) {\n if ({}.hasOwnProperty.call(data, value)) return data[value];\n if (offset) value -= offset;\n var key = lcfunc(value, isOrdinal);\n if (key in data) return data[key];\n return data.other;\n}\n\n\n/** Utility function for `{N, select, ...}`\n *\n * @param {number} value - The key to use to find a selection\n * @param {Object.} data - The object from which results are looked up\n * @returns {string} The result of the select statement\n */\nRuntime.prototype.select = function(value, data) {\n if ({}.hasOwnProperty.call(data, value)) return data[value];\n return data.other;\n}\n\n\n/** @private */\nRuntime.prototype.toString = function(pluralFuncs, compiler) {\n function _stringify(o, level) {\n if (typeof o != 'object') {\n var funcStr = o.toString().replace(/^(function )\\w*/, '$1');\n var indent = /([ \\t]*)\\S.*$/.exec(funcStr);\n return indent ? funcStr.replace(new RegExp('^' + indent[1], 'mg'), '') : funcStr;\n }\n var s = [];\n for (var i in o) {\n if (level == 0) s.push('var ' + i + ' = ' + _stringify(o[i], level + 1) + ';\\n');\n else s.push(Compiler.propname(i) + ': ' + _stringify(o[i], level + 1));\n }\n if (level == 0) return s.join('');\n if (s.length == 0) return '{}';\n var indent = ' '; while (--level) indent += ' ';\n return '{\\n' + s.join(',\\n').replace(/^/gm, indent) + '\\n}';\n }\n\n var obj = {};\n Object.keys(compiler.locales).forEach(function(lc) { obj[Compiler.funcname(lc)] = pluralFuncs[lc]; });\n Object.keys(compiler.runtime).forEach(function(fn) { obj[fn] = this[fn]; }, this);\n var fmtKeys = Object.keys(compiler.formatters);\n var fmt = this.mf.fmt;\n if (fmtKeys.length) obj.fmt = fmtKeys.reduce(function(o, key) { o[key] = fmt[key]; return o; }, {});\n return _stringify(obj, 0);\n}\n\n},{\"./compiler\":1}],4:[function(require,module,exports){\n(function (global){\n'use strict';\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"util/\":13}],5:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],6:[function(require,module,exports){\nvar _cc = [\n {cardinal:[\"other\"],ordinal:[\"other\"]},\n {cardinal:[\"one\",\"other\"],ordinal:[\"other\"]},\n {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"other\"]},\n {cardinal:[\"one\",\"two\",\"other\"],ordinal:[\"other\"]}\n];\n\n(function (root, pluralCategories) {\n if (typeof define === 'function' && define.amd) {\n define(pluralCategories);\n } else if (typeof exports === 'object') {\n module.exports = pluralCategories;\n } else {\n root.pluralCategories = pluralCategories;\n }\n}(this, {\naf: _cc[1],\nak: _cc[1],\nam: _cc[1],\nar: {cardinal:[\"zero\",\"one\",\"two\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nars: {cardinal:[\"zero\",\"one\",\"two\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nas: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"many\",\"other\"]},\nasa: _cc[1],\nast: _cc[1],\naz: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"few\",\"many\",\"other\"]},\nbe: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"few\",\"other\"]},\nbem: _cc[1],\nbez: _cc[1],\nbg: _cc[1],\nbh: _cc[1],\nbm: _cc[0],\nbn: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"many\",\"other\"]},\nbo: _cc[0],\nbr: {cardinal:[\"one\",\"two\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nbrx: _cc[1],\nbs: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"other\"]},\nca: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"other\"]},\nce: _cc[1],\ncgg: _cc[1],\nchr: _cc[1],\nckb: _cc[1],\ncs: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\ncy: {cardinal:[\"zero\",\"one\",\"two\",\"few\",\"many\",\"other\"],ordinal:[\"zero\",\"one\",\"two\",\"few\",\"many\",\"other\"]},\nda: _cc[1],\nde: _cc[1],\ndsb: {cardinal:[\"one\",\"two\",\"few\",\"other\"],ordinal:[\"other\"]},\ndv: _cc[1],\ndz: _cc[0],\nee: _cc[1],\nel: _cc[1],\nen: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"other\"]},\neo: _cc[1],\nes: _cc[1],\net: _cc[1],\neu: _cc[1],\nfa: _cc[1],\nff: _cc[1],\nfi: _cc[1],\nfil: _cc[2],\nfo: _cc[1],\nfr: _cc[2],\nfur: _cc[1],\nfy: _cc[1],\nga: {cardinal:[\"one\",\"two\",\"few\",\"many\",\"other\"],ordinal:[\"one\",\"other\"]},\ngd: {cardinal:[\"one\",\"two\",\"few\",\"other\"],ordinal:[\"other\"]},\ngl: _cc[1],\ngsw: _cc[1],\ngu: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"many\",\"other\"]},\nguw: _cc[1],\ngv: {cardinal:[\"one\",\"two\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nha: _cc[1],\nhaw: _cc[1],\nhe: {cardinal:[\"one\",\"two\",\"many\",\"other\"],ordinal:[\"other\"]},\nhi: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"many\",\"other\"]},\nhr: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"other\"]},\nhsb: {cardinal:[\"one\",\"two\",\"few\",\"other\"],ordinal:[\"other\"]},\nhu: _cc[2],\nhy: _cc[2],\nid: _cc[0],\nig: _cc[0],\nii: _cc[0],\n\"in\": _cc[0],\nis: _cc[1],\nit: {cardinal:[\"one\",\"other\"],ordinal:[\"many\",\"other\"]},\niu: _cc[3],\niw: {cardinal:[\"one\",\"two\",\"many\",\"other\"],ordinal:[\"other\"]},\nja: _cc[0],\njbo: _cc[0],\njgo: _cc[1],\nji: _cc[1],\njmc: _cc[1],\njv: _cc[0],\njw: _cc[0],\nka: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"many\",\"other\"]},\nkab: _cc[1],\nkaj: _cc[1],\nkcg: _cc[1],\nkde: _cc[0],\nkea: _cc[0],\nkk: {cardinal:[\"one\",\"other\"],ordinal:[\"many\",\"other\"]},\nkkj: _cc[1],\nkl: _cc[1],\nkm: _cc[0],\nkn: _cc[1],\nko: _cc[0],\nks: _cc[1],\nksb: _cc[1],\nksh: {cardinal:[\"zero\",\"one\",\"other\"],ordinal:[\"other\"]},\nku: _cc[1],\nkw: _cc[3],\nky: _cc[1],\nlag: {cardinal:[\"zero\",\"one\",\"other\"],ordinal:[\"other\"]},\nlb: _cc[1],\nlg: _cc[1],\nlkt: _cc[0],\nln: _cc[1],\nlo: {cardinal:[\"other\"],ordinal:[\"one\",\"other\"]},\nlt: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nlv: {cardinal:[\"zero\",\"one\",\"other\"],ordinal:[\"other\"]},\nmas: _cc[1],\nmg: _cc[1],\nmgo: _cc[1],\nmk: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"many\",\"other\"]},\nml: _cc[1],\nmn: _cc[1],\nmo: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"one\",\"other\"]},\nmr: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"other\"]},\nms: {cardinal:[\"other\"],ordinal:[\"one\",\"other\"]},\nmt: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nmy: _cc[0],\nnah: _cc[1],\nnaq: _cc[3],\nnb: _cc[1],\nnd: _cc[1],\nne: _cc[2],\nnl: _cc[1],\nnn: _cc[1],\nnnh: _cc[1],\nno: _cc[1],\nnqo: _cc[0],\nnr: _cc[1],\nnso: _cc[1],\nny: _cc[1],\nnyn: _cc[1],\nom: _cc[1],\nor: _cc[1],\nos: _cc[1],\npa: _cc[1],\npap: _cc[1],\npl: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nprg: {cardinal:[\"zero\",\"one\",\"other\"],ordinal:[\"other\"]},\nps: _cc[1],\npt: _cc[1],\n\"pt-PT\": _cc[1],\nrm: _cc[1],\nro: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"one\",\"other\"]},\nrof: _cc[1],\nroot: _cc[0],\nru: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nrwk: _cc[1],\nsah: _cc[0],\nsaq: _cc[1],\nsdh: _cc[1],\nse: _cc[3],\nseh: _cc[1],\nses: _cc[0],\nsg: _cc[0],\nsh: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"other\"]},\nshi: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"other\"]},\nsi: _cc[1],\nsk: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"other\"]},\nsl: {cardinal:[\"one\",\"two\",\"few\",\"other\"],ordinal:[\"other\"]},\nsma: _cc[3],\nsmi: _cc[3],\nsmj: _cc[3],\nsmn: _cc[3],\nsms: _cc[3],\nsn: _cc[1],\nso: _cc[1],\nsq: {cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"many\",\"other\"]},\nsr: {cardinal:[\"one\",\"few\",\"other\"],ordinal:[\"other\"]},\nss: _cc[1],\nssy: _cc[1],\nst: _cc[1],\nsv: _cc[2],\nsw: _cc[1],\nsyr: _cc[1],\nta: _cc[1],\nte: _cc[1],\nteo: _cc[1],\nth: _cc[0],\nti: _cc[1],\ntig: _cc[1],\ntk: _cc[1],\ntl: _cc[2],\ntn: _cc[1],\nto: _cc[0],\ntr: _cc[1],\nts: _cc[1],\ntzm: _cc[1],\nug: _cc[1],\nuk: {cardinal:[\"one\",\"few\",\"many\",\"other\"],ordinal:[\"few\",\"other\"]},\nur: _cc[1],\nuz: _cc[1],\nve: _cc[1],\nvi: {cardinal:[\"other\"],ordinal:[\"one\",\"other\"]},\nvo: _cc[1],\nvun: _cc[1],\nwa: _cc[1],\nwae: _cc[1],\nwo: _cc[0],\nxh: _cc[1],\nxog: _cc[1],\nyi: _cc[1],\nyo: _cc[0],\nyue: _cc[0],\nzh: _cc[0],\nzu: _cc[1]\n}));\n\n},{}],7:[function(require,module,exports){\nvar _cp = [\nfunction(n, ord) {\n if (ord) return 'other';\n return 'other';\n},\nfunction(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one' : 'other';\n},\nfunction(n, ord) {\n if (ord) return 'other';\n return ((n == 0\n || n == 1)) ? 'one' : 'other';\n},\nfunction(n, ord) {\n var s = String(n).split('.'), v0 = !s[1];\n if (ord) return 'other';\n return (n == 1 && v0) ? 'one' : 'other';\n}\n];\n\n(function (root, plurals) {\n if (typeof define === 'function' && define.amd) {\n define(plurals);\n } else if (typeof exports === 'object') {\n module.exports = plurals;\n } else {\n root.plurals = plurals;\n }\n}(this, {\naf: _cp[1],\n\nak: _cp[2],\n\nam: function(n, ord) {\n if (ord) return 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nar: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return (n == 0) ? 'zero'\n : (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : ((n100 >= 3 && n100 <= 10)) ? 'few'\n : ((n100 >= 11 && n100 <= 99)) ? 'many'\n : 'other';\n},\n\nars: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return (n == 0) ? 'zero'\n : (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : ((n100 >= 3 && n100 <= 10)) ? 'few'\n : ((n100 >= 11 && n100 <= 99)) ? 'many'\n : 'other';\n},\n\nas: function(n, ord) {\n if (ord) return ((n == 1 || n == 5 || n == 7 || n == 8 || n == 9\n || n == 10)) ? 'one'\n : ((n == 2\n || n == 3)) ? 'two'\n : (n == 4) ? 'few'\n : (n == 6) ? 'many'\n : 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nasa: _cp[1],\n\nast: _cp[3],\n\naz: function(n, ord) {\n var s = String(n).split('.'), i = s[0], i10 = i.slice(-1),\n i100 = i.slice(-2), i1000 = i.slice(-3);\n if (ord) return ((i10 == 1 || i10 == 2 || i10 == 5 || i10 == 7 || i10 == 8)\n || (i100 == 20 || i100 == 50 || i100 == 70\n || i100 == 80)) ? 'one'\n : ((i10 == 3 || i10 == 4) || (i1000 == 100 || i1000 == 200\n || i1000 == 300 || i1000 == 400 || i1000 == 500 || i1000 == 600 || i1000 == 700\n || i1000 == 800\n || i1000 == 900)) ? 'few'\n : (i == 0 || i10 == 6 || (i100 == 40 || i100 == 60\n || i100 == 90)) ? 'many'\n : 'other';\n return (n == 1) ? 'one' : 'other';\n},\n\nbe: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return ((n10 == 2\n || n10 == 3) && n100 != 12 && n100 != 13) ? 'few' : 'other';\n return (n10 == 1 && n100 != 11) ? 'one'\n : ((n10 >= 2 && n10 <= 4) && (n100 < 12\n || n100 > 14)) ? 'few'\n : (t0 && n10 == 0 || (n10 >= 5 && n10 <= 9)\n || (n100 >= 11 && n100 <= 14)) ? 'many'\n : 'other';\n},\n\nbem: _cp[1],\n\nbez: _cp[1],\n\nbg: _cp[1],\n\nbh: _cp[2],\n\nbm: _cp[0],\n\nbn: function(n, ord) {\n if (ord) return ((n == 1 || n == 5 || n == 7 || n == 8 || n == 9\n || n == 10)) ? 'one'\n : ((n == 2\n || n == 3)) ? 'two'\n : (n == 4) ? 'few'\n : (n == 6) ? 'many'\n : 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nbo: _cp[0],\n\nbr: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2),\n n1000000 = t0 && s[0].slice(-6);\n if (ord) return 'other';\n return (n10 == 1 && n100 != 11 && n100 != 71 && n100 != 91) ? 'one'\n : (n10 == 2 && n100 != 12 && n100 != 72 && n100 != 92) ? 'two'\n : (((n10 == 3 || n10 == 4) || n10 == 9) && (n100 < 10\n || n100 > 19) && (n100 < 70 || n100 > 79) && (n100 < 90\n || n100 > 99)) ? 'few'\n : (n != 0 && t0 && n1000000 == 0) ? 'many'\n : 'other';\n},\n\nbrx: _cp[1],\n\nbs: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return (v0 && i10 == 1 && i100 != 11\n || f10 == 1 && f100 != 11) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14)\n || (f10 >= 2 && f10 <= 4) && (f100 < 12\n || f100 > 14)) ? 'few'\n : 'other';\n},\n\nca: function(n, ord) {\n var s = String(n).split('.'), v0 = !s[1];\n if (ord) return ((n == 1\n || n == 3)) ? 'one'\n : (n == 2) ? 'two'\n : (n == 4) ? 'few'\n : 'other';\n return (n == 1 && v0) ? 'one' : 'other';\n},\n\nce: _cp[1],\n\ncgg: _cp[1],\n\nchr: _cp[1],\n\nckb: _cp[1],\n\ncs: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1];\n if (ord) return 'other';\n return (n == 1 && v0) ? 'one'\n : ((i >= 2 && i <= 4) && v0) ? 'few'\n : (!v0) ? 'many'\n : 'other';\n},\n\ncy: function(n, ord) {\n if (ord) return ((n == 0 || n == 7 || n == 8\n || n == 9)) ? 'zero'\n : (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : ((n == 3\n || n == 4)) ? 'few'\n : ((n == 5\n || n == 6)) ? 'many'\n : 'other';\n return (n == 0) ? 'zero'\n : (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : (n == 3) ? 'few'\n : (n == 6) ? 'many'\n : 'other';\n},\n\nda: function(n, ord) {\n var s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return (n == 1 || !t0 && (i == 0\n || i == 1)) ? 'one' : 'other';\n},\n\nde: _cp[3],\n\ndsb: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i100 = i.slice(-2), f100 = f.slice(-2);\n if (ord) return 'other';\n return (v0 && i100 == 1\n || f100 == 1) ? 'one'\n : (v0 && i100 == 2\n || f100 == 2) ? 'two'\n : (v0 && (i100 == 3 || i100 == 4) || (f100 == 3\n || f100 == 4)) ? 'few'\n : 'other';\n},\n\ndv: _cp[1],\n\ndz: _cp[0],\n\nee: _cp[1],\n\nel: _cp[1],\n\nen: function(n, ord) {\n var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return (n10 == 1 && n100 != 11) ? 'one'\n : (n10 == 2 && n100 != 12) ? 'two'\n : (n10 == 3 && n100 != 13) ? 'few'\n : 'other';\n return (n == 1 && v0) ? 'one' : 'other';\n},\n\neo: _cp[1],\n\nes: _cp[1],\n\net: _cp[3],\n\neu: _cp[1],\n\nfa: function(n, ord) {\n if (ord) return 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nff: function(n, ord) {\n if (ord) return 'other';\n return (n >= 0 && n < 2) ? 'one' : 'other';\n},\n\nfi: _cp[3],\n\nfil: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), f10 = f.slice(-1);\n if (ord) return (n == 1) ? 'one' : 'other';\n return (v0 && (i == 1 || i == 2 || i == 3)\n || v0 && i10 != 4 && i10 != 6 && i10 != 9\n || !v0 && f10 != 4 && f10 != 6 && f10 != 9) ? 'one' : 'other';\n},\n\nfo: _cp[1],\n\nfr: function(n, ord) {\n if (ord) return (n == 1) ? 'one' : 'other';\n return (n >= 0 && n < 2) ? 'one' : 'other';\n},\n\nfur: _cp[1],\n\nfy: _cp[3],\n\nga: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return (n == 1) ? 'one' : 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : ((t0 && n >= 3 && n <= 6)) ? 'few'\n : ((t0 && n >= 7 && n <= 10)) ? 'many'\n : 'other';\n},\n\ngd: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return ((n == 1\n || n == 11)) ? 'one'\n : ((n == 2\n || n == 12)) ? 'two'\n : (((t0 && n >= 3 && n <= 10)\n || (t0 && n >= 13 && n <= 19))) ? 'few'\n : 'other';\n},\n\ngl: _cp[3],\n\ngsw: _cp[1],\n\ngu: function(n, ord) {\n if (ord) return (n == 1) ? 'one'\n : ((n == 2\n || n == 3)) ? 'two'\n : (n == 4) ? 'few'\n : (n == 6) ? 'many'\n : 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nguw: _cp[2],\n\ngv: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1),\n i100 = i.slice(-2);\n if (ord) return 'other';\n return (v0 && i10 == 1) ? 'one'\n : (v0 && i10 == 2) ? 'two'\n : (v0 && (i100 == 0 || i100 == 20 || i100 == 40 || i100 == 60\n || i100 == 80)) ? 'few'\n : (!v0) ? 'many'\n : 'other';\n},\n\nha: _cp[1],\n\nhaw: _cp[1],\n\nhe: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1);\n if (ord) return 'other';\n return (n == 1 && v0) ? 'one'\n : (i == 2 && v0) ? 'two'\n : (v0 && (n < 0\n || n > 10) && t0 && n10 == 0) ? 'many'\n : 'other';\n},\n\nhi: function(n, ord) {\n if (ord) return (n == 1) ? 'one'\n : ((n == 2\n || n == 3)) ? 'two'\n : (n == 4) ? 'few'\n : (n == 6) ? 'many'\n : 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nhr: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return (v0 && i10 == 1 && i100 != 11\n || f10 == 1 && f100 != 11) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14)\n || (f10 >= 2 && f10 <= 4) && (f100 < 12\n || f100 > 14)) ? 'few'\n : 'other';\n},\n\nhsb: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i100 = i.slice(-2), f100 = f.slice(-2);\n if (ord) return 'other';\n return (v0 && i100 == 1\n || f100 == 1) ? 'one'\n : (v0 && i100 == 2\n || f100 == 2) ? 'two'\n : (v0 && (i100 == 3 || i100 == 4) || (f100 == 3\n || f100 == 4)) ? 'few'\n : 'other';\n},\n\nhu: function(n, ord) {\n if (ord) return ((n == 1\n || n == 5)) ? 'one' : 'other';\n return (n == 1) ? 'one' : 'other';\n},\n\nhy: function(n, ord) {\n if (ord) return (n == 1) ? 'one' : 'other';\n return (n >= 0 && n < 2) ? 'one' : 'other';\n},\n\nid: _cp[0],\n\nig: _cp[0],\n\nii: _cp[0],\n\n\"in\": _cp[0],\n\nis: function(n, ord) {\n var s = String(n).split('.'), i = s[0], t0 = Number(s[0]) == n,\n i10 = i.slice(-1), i100 = i.slice(-2);\n if (ord) return 'other';\n return (t0 && i10 == 1 && i100 != 11\n || !t0) ? 'one' : 'other';\n},\n\nit: function(n, ord) {\n var s = String(n).split('.'), v0 = !s[1];\n if (ord) return ((n == 11 || n == 8 || n == 80\n || n == 800)) ? 'many' : 'other';\n return (n == 1 && v0) ? 'one' : 'other';\n},\n\niu: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\niw: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1);\n if (ord) return 'other';\n return (n == 1 && v0) ? 'one'\n : (i == 2 && v0) ? 'two'\n : (v0 && (n < 0\n || n > 10) && t0 && n10 == 0) ? 'many'\n : 'other';\n},\n\nja: _cp[0],\n\njbo: _cp[0],\n\njgo: _cp[1],\n\nji: _cp[3],\n\njmc: _cp[1],\n\njv: _cp[0],\n\njw: _cp[0],\n\nka: function(n, ord) {\n var s = String(n).split('.'), i = s[0], i100 = i.slice(-2);\n if (ord) return (i == 1) ? 'one'\n : (i == 0 || ((i100 >= 2 && i100 <= 20) || i100 == 40 || i100 == 60\n || i100 == 80)) ? 'many'\n : 'other';\n return (n == 1) ? 'one' : 'other';\n},\n\nkab: function(n, ord) {\n if (ord) return 'other';\n return (n >= 0 && n < 2) ? 'one' : 'other';\n},\n\nkaj: _cp[1],\n\nkcg: _cp[1],\n\nkde: _cp[0],\n\nkea: _cp[0],\n\nkk: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1);\n if (ord) return (n10 == 6 || n10 == 9\n || t0 && n10 == 0 && n != 0) ? 'many' : 'other';\n return (n == 1) ? 'one' : 'other';\n},\n\nkkj: _cp[1],\n\nkl: _cp[1],\n\nkm: _cp[0],\n\nkn: function(n, ord) {\n if (ord) return 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nko: _cp[0],\n\nks: _cp[1],\n\nksb: _cp[1],\n\nksh: function(n, ord) {\n if (ord) return 'other';\n return (n == 0) ? 'zero'\n : (n == 1) ? 'one'\n : 'other';\n},\n\nku: _cp[1],\n\nkw: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nky: _cp[1],\n\nlag: function(n, ord) {\n var s = String(n).split('.'), i = s[0];\n if (ord) return 'other';\n return (n == 0) ? 'zero'\n : ((i == 0\n || i == 1) && n != 0) ? 'one'\n : 'other';\n},\n\nlb: _cp[1],\n\nlg: _cp[1],\n\nlkt: _cp[0],\n\nln: _cp[2],\n\nlo: function(n, ord) {\n if (ord) return (n == 1) ? 'one' : 'other';\n return 'other';\n},\n\nlt: function(n, ord) {\n var s = String(n).split('.'), f = s[1] || '', t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return (n10 == 1 && (n100 < 11\n || n100 > 19)) ? 'one'\n : ((n10 >= 2 && n10 <= 9) && (n100 < 11\n || n100 > 19)) ? 'few'\n : (f != 0) ? 'many'\n : 'other';\n},\n\nlv: function(n, ord) {\n var s = String(n).split('.'), f = s[1] || '', v = f.length,\n t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1),\n n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n if (ord) return 'other';\n return (t0 && n10 == 0 || (n100 >= 11 && n100 <= 19)\n || v == 2 && (f100 >= 11 && f100 <= 19)) ? 'zero'\n : (n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11\n || v != 2 && f10 == 1) ? 'one'\n : 'other';\n},\n\nmas: _cp[1],\n\nmg: _cp[2],\n\nmgo: _cp[1],\n\nmk: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1);\n if (ord) return (i10 == 1 && i100 != 11) ? 'one'\n : (i10 == 2 && i100 != 12) ? 'two'\n : ((i10 == 7\n || i10 == 8) && i100 != 17 && i100 != 18) ? 'many'\n : 'other';\n return (v0 && i10 == 1\n || f10 == 1) ? 'one' : 'other';\n},\n\nml: _cp[1],\n\nmn: _cp[1],\n\nmo: function(n, ord) {\n var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n n100 = t0 && s[0].slice(-2);\n if (ord) return (n == 1) ? 'one' : 'other';\n return (n == 1 && v0) ? 'one'\n : (!v0 || n == 0\n || n != 1 && (n100 >= 1 && n100 <= 19)) ? 'few'\n : 'other';\n},\n\nmr: function(n, ord) {\n if (ord) return (n == 1) ? 'one'\n : ((n == 2\n || n == 3)) ? 'two'\n : (n == 4) ? 'few'\n : 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n},\n\nms: function(n, ord) {\n if (ord) return (n == 1) ? 'one' : 'other';\n return 'other';\n},\n\nmt: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n100 = t0 && s[0].slice(-2);\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 0\n || (n100 >= 2 && n100 <= 10)) ? 'few'\n : ((n100 >= 11 && n100 <= 19)) ? 'many'\n : 'other';\n},\n\nmy: _cp[0],\n\nnah: _cp[1],\n\nnaq: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nnb: _cp[1],\n\nnd: _cp[1],\n\nne: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return ((t0 && n >= 1 && n <= 4)) ? 'one' : 'other';\n return (n == 1) ? 'one' : 'other';\n},\n\nnl: _cp[3],\n\nnn: _cp[1],\n\nnnh: _cp[1],\n\nno: _cp[1],\n\nnqo: _cp[0],\n\nnr: _cp[1],\n\nnso: _cp[2],\n\nny: _cp[1],\n\nnyn: _cp[1],\n\nom: _cp[1],\n\nor: _cp[1],\n\nos: _cp[1],\n\npa: _cp[2],\n\npap: _cp[1],\n\npl: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1),\n i100 = i.slice(-2);\n if (ord) return 'other';\n return (n == 1 && v0) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12\n || i100 > 14)) ? 'few'\n : (v0 && i != 1 && (i10 == 0 || i10 == 1)\n || v0 && (i10 >= 5 && i10 <= 9)\n || v0 && (i100 >= 12 && i100 <= 14)) ? 'many'\n : 'other';\n},\n\nprg: function(n, ord) {\n var s = String(n).split('.'), f = s[1] || '', v = f.length,\n t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1),\n n100 = t0 && s[0].slice(-2), f100 = f.slice(-2), f10 = f.slice(-1);\n if (ord) return 'other';\n return (t0 && n10 == 0 || (n100 >= 11 && n100 <= 19)\n || v == 2 && (f100 >= 11 && f100 <= 19)) ? 'zero'\n : (n10 == 1 && n100 != 11 || v == 2 && f10 == 1 && f100 != 11\n || v != 2 && f10 == 1) ? 'one'\n : 'other';\n},\n\nps: _cp[1],\n\npt: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return ((t0 && n >= 0 && n <= 2) && n != 2) ? 'one' : 'other';\n},\n\n\"pt-PT\": _cp[3],\n\nrm: _cp[1],\n\nro: function(n, ord) {\n var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n n100 = t0 && s[0].slice(-2);\n if (ord) return (n == 1) ? 'one' : 'other';\n return (n == 1 && v0) ? 'one'\n : (!v0 || n == 0\n || n != 1 && (n100 >= 1 && n100 <= 19)) ? 'few'\n : 'other';\n},\n\nrof: _cp[1],\n\nroot: _cp[0],\n\nru: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], i10 = i.slice(-1),\n i100 = i.slice(-2);\n if (ord) return 'other';\n return (v0 && i10 == 1 && i100 != 11) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12\n || i100 > 14)) ? 'few'\n : (v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9)\n || v0 && (i100 >= 11 && i100 <= 14)) ? 'many'\n : 'other';\n},\n\nrwk: _cp[1],\n\nsah: _cp[0],\n\nsaq: _cp[1],\n\nsdh: _cp[1],\n\nse: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nseh: _cp[1],\n\nses: _cp[0],\n\nsg: _cp[0],\n\nsh: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return (v0 && i10 == 1 && i100 != 11\n || f10 == 1 && f100 != 11) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14)\n || (f10 >= 2 && f10 <= 4) && (f100 < 12\n || f100 > 14)) ? 'few'\n : 'other';\n},\n\nshi: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return (n >= 0 && n <= 1) ? 'one'\n : ((t0 && n >= 2 && n <= 10)) ? 'few'\n : 'other';\n},\n\nsi: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '';\n if (ord) return 'other';\n return ((n == 0 || n == 1)\n || i == 0 && f == 1) ? 'one' : 'other';\n},\n\nsk: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1];\n if (ord) return 'other';\n return (n == 1 && v0) ? 'one'\n : ((i >= 2 && i <= 4) && v0) ? 'few'\n : (!v0) ? 'many'\n : 'other';\n},\n\nsl: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], i100 = i.slice(-2);\n if (ord) return 'other';\n return (v0 && i100 == 1) ? 'one'\n : (v0 && i100 == 2) ? 'two'\n : (v0 && (i100 == 3 || i100 == 4)\n || !v0) ? 'few'\n : 'other';\n},\n\nsma: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nsmi: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nsmj: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nsmn: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nsms: function(n, ord) {\n if (ord) return 'other';\n return (n == 1) ? 'one'\n : (n == 2) ? 'two'\n : 'other';\n},\n\nsn: _cp[1],\n\nso: _cp[1],\n\nsq: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return (n == 1) ? 'one'\n : (n10 == 4 && n100 != 14) ? 'many'\n : 'other';\n return (n == 1) ? 'one' : 'other';\n},\n\nsr: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), i100 = i.slice(-2), f10 = f.slice(-1), f100 = f.slice(-2);\n if (ord) return 'other';\n return (v0 && i10 == 1 && i100 != 11\n || f10 == 1 && f100 != 11) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12 || i100 > 14)\n || (f10 >= 2 && f10 <= 4) && (f100 < 12\n || f100 > 14)) ? 'few'\n : 'other';\n},\n\nss: _cp[1],\n\nssy: _cp[1],\n\nst: _cp[1],\n\nsv: function(n, ord) {\n var s = String(n).split('.'), v0 = !s[1], t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2);\n if (ord) return ((n10 == 1\n || n10 == 2) && n100 != 11 && n100 != 12) ? 'one' : 'other';\n return (n == 1 && v0) ? 'one' : 'other';\n},\n\nsw: _cp[3],\n\nsyr: _cp[1],\n\nta: _cp[1],\n\nte: _cp[1],\n\nteo: _cp[1],\n\nth: _cp[0],\n\nti: _cp[2],\n\ntig: _cp[1],\n\ntk: _cp[1],\n\ntl: function(n, ord) {\n var s = String(n).split('.'), i = s[0], f = s[1] || '', v0 = !s[1],\n i10 = i.slice(-1), f10 = f.slice(-1);\n if (ord) return (n == 1) ? 'one' : 'other';\n return (v0 && (i == 1 || i == 2 || i == 3)\n || v0 && i10 != 4 && i10 != 6 && i10 != 9\n || !v0 && f10 != 4 && f10 != 6 && f10 != 9) ? 'one' : 'other';\n},\n\ntn: _cp[1],\n\nto: _cp[0],\n\ntr: _cp[1],\n\nts: _cp[1],\n\ntzm: function(n, ord) {\n var s = String(n).split('.'), t0 = Number(s[0]) == n;\n if (ord) return 'other';\n return ((n == 0 || n == 1)\n || (t0 && n >= 11 && n <= 99)) ? 'one' : 'other';\n},\n\nug: _cp[1],\n\nuk: function(n, ord) {\n var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1), n100 = t0 && s[0].slice(-2), i10 = i.slice(-1),\n i100 = i.slice(-2);\n if (ord) return (n10 == 3 && n100 != 13) ? 'few' : 'other';\n return (v0 && i10 == 1 && i100 != 11) ? 'one'\n : (v0 && (i10 >= 2 && i10 <= 4) && (i100 < 12\n || i100 > 14)) ? 'few'\n : (v0 && i10 == 0 || v0 && (i10 >= 5 && i10 <= 9)\n || v0 && (i100 >= 11 && i100 <= 14)) ? 'many'\n : 'other';\n},\n\nur: _cp[3],\n\nuz: _cp[1],\n\nve: _cp[1],\n\nvi: function(n, ord) {\n if (ord) return (n == 1) ? 'one' : 'other';\n return 'other';\n},\n\nvo: _cp[1],\n\nvun: _cp[1],\n\nwa: _cp[2],\n\nwae: _cp[1],\n\nwo: _cp[0],\n\nxh: _cp[1],\n\nxog: _cp[1],\n\nyi: _cp[3],\n\nyo: _cp[0],\n\nyue: _cp[0],\n\nzh: _cp[0],\n\nzu: function(n, ord) {\n if (ord) return 'other';\n return (n >= 0 && n <= 1) ? 'one' : 'other';\n}\n}));\n\n},{}],8:[function(require,module,exports){\n/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n\n\"use strict\";\n\nfunction peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(this, peg$SyntaxError);\n }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n var DESCRIBE_EXPECTATION_FNS = {\n literal: function(expectation) {\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n },\n\n \"class\": function(expectation) {\n var escapedParts = \"\",\n i;\n\n for (i = 0; i < expectation.parts.length; i++) {\n escapedParts += expectation.parts[i] instanceof Array\n ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n : classEscape(expectation.parts[i]);\n }\n\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n },\n\n any: function(expectation) {\n return \"any character\";\n },\n\n end: function(expectation) {\n return \"end of input\";\n },\n\n other: function(expectation) {\n return expectation.description;\n }\n };\n\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function classEscape(s) {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\]/g, '\\\\]')\n .replace(/\\^/g, '\\\\^')\n .replace(/-/g, '\\\\-')\n .replace(/\\0/g, '\\\\0')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x' + hex(ch); });\n }\n\n function describeExpectation(expectation) {\n return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n }\n\n function describeExpected(expected) {\n var descriptions = new Array(expected.length),\n i, j;\n\n for (i = 0; i < expected.length; i++) {\n descriptions[i] = describeExpectation(expected[i]);\n }\n\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \")\n + \", or \"\n + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found) {\n return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n options = options !== void 0 ? options : {};\n\n var peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = \"#\",\n peg$c1 = peg$literalExpectation(\"#\", false),\n peg$c2 = function() { return { type: 'octothorpe' }; },\n peg$c3 = function(str) { return str.join(''); },\n peg$c4 = \"{\",\n peg$c5 = peg$literalExpectation(\"{\", false),\n peg$c6 = \"}\",\n peg$c7 = peg$literalExpectation(\"}\", false),\n peg$c8 = function(arg) {\n return {\n type: 'argument',\n arg: arg\n };\n },\n peg$c9 = \",\",\n peg$c10 = peg$literalExpectation(\",\", false),\n peg$c11 = \"select\",\n peg$c12 = peg$literalExpectation(\"select\", false),\n peg$c13 = function(arg, cases) {\n return {\n type: 'select',\n arg: arg,\n cases: cases\n };\n },\n peg$c14 = \"plural\",\n peg$c15 = peg$literalExpectation(\"plural\", false),\n peg$c16 = \"selectordinal\",\n peg$c17 = peg$literalExpectation(\"selectordinal\", false),\n peg$c18 = function(arg, type, offset, cases) {\n var ls = ((type === 'selectordinal') ? options.ordinal : options.cardinal)\n || ['zero', 'one', 'two', 'few', 'many', 'other'];\n if (ls && ls.length) cases.forEach(function(c) {\n if (isNaN(c.key) && ls.indexOf(c.key) < 0) throw new Error(\n 'Invalid key `' + c.key + '` for argument `' + arg + '`.' +\n ' Valid ' + type + ' keys for this locale are `' + ls.join('`, `') +\n '`, and explicit keys like `=0`.');\n });\n return {\n type: type,\n arg: arg,\n offset: offset || 0,\n cases: cases\n };\n },\n peg$c19 = function(arg, key, params) {\n return {\n type: 'function',\n arg: arg,\n key: key,\n params: params\n };\n },\n peg$c20 = /^[0-9a-zA-Z$_]/,\n peg$c21 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"z\"], [\"A\", \"Z\"], \"$\", \"_\"], false, false),\n peg$c22 = /^[^ \\t\\n\\r,.+={}]/,\n peg$c23 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\", \",\", \".\", \"+\", \"=\", \"{\", \"}\"], true, false),\n peg$c24 = function(key, tokens) { return { key: key, tokens: tokens }; },\n peg$c25 = function(tokens) { return tokens; },\n peg$c26 = \"offset\",\n peg$c27 = peg$literalExpectation(\"offset\", false),\n peg$c28 = \":\",\n peg$c29 = peg$literalExpectation(\":\", false),\n peg$c30 = function(d) { return d; },\n peg$c31 = \"=\",\n peg$c32 = peg$literalExpectation(\"=\", false),\n peg$c33 = function(p) { return options.strictFunctionParams; },\n peg$c34 = function(p) { return p; },\n peg$c35 = function(p) { return p.replace(/^[ \\t\\n\\r]*|[ \\t\\n\\r]*$/g, ''); },\n peg$c36 = \"''\",\n peg$c37 = peg$literalExpectation(\"''\", false),\n peg$c38 = function() { return \"'\"; },\n peg$c39 = /^[^']/,\n peg$c40 = peg$classExpectation([\"'\"], true, false),\n peg$c41 = \"'{\",\n peg$c42 = peg$literalExpectation(\"'{\", false),\n peg$c43 = \"'\",\n peg$c44 = peg$literalExpectation(\"'\", false),\n peg$c45 = function(str) { return '\\u007B'+str.join(''); },\n peg$c46 = \"'}\",\n peg$c47 = peg$literalExpectation(\"'}\", false),\n peg$c48 = function(str) { return '\\u007D'+str.join(''); },\n peg$c49 = /^[^{}#\\\\\\0-\\x08\\x0E-\\x1F\\x7F]/,\n peg$c50 = peg$classExpectation([\"{\", \"}\", \"#\", \"\\\\\", [\"\\0\", \"\\b\"], [\"\\x0E\", \"\\x1F\"], \"\\x7F\"], true, false),\n peg$c51 = \"\\\\\\\\\",\n peg$c52 = peg$literalExpectation(\"\\\\\\\\\", false),\n peg$c53 = function() { return '\\\\'; },\n peg$c54 = \"\\\\#\",\n peg$c55 = peg$literalExpectation(\"\\\\#\", false),\n peg$c56 = function() { return '#'; },\n peg$c57 = \"\\\\{\",\n peg$c58 = peg$literalExpectation(\"\\\\{\", false),\n peg$c59 = function() { return '\\u007B'; },\n peg$c60 = \"\\\\}\",\n peg$c61 = peg$literalExpectation(\"\\\\}\", false),\n peg$c62 = function() { return '\\u007D'; },\n peg$c63 = \"\\\\u\",\n peg$c64 = peg$literalExpectation(\"\\\\u\", false),\n peg$c65 = function(h1, h2, h3, h4) {\n return String.fromCharCode(parseInt('0x' + h1 + h2 + h3 + h4));\n },\n peg$c66 = /^[^',}]/,\n peg$c67 = peg$classExpectation([\"'\", \",\", \"}\"], true, false),\n peg$c68 = /^[^'}]/,\n peg$c69 = peg$classExpectation([\"'\", \"}\"], true, false),\n peg$c70 = /^[0-9]/,\n peg$c71 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n peg$c72 = /^[0-9a-fA-F]/,\n peg$c73 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"], [\"A\", \"F\"]], false, false),\n peg$c74 = /^[ \\t\\n\\r]/,\n peg$c75 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false),\n\n peg$currPos = 0,\n peg$savedPos = 0,\n peg$posDetailsCache = [{ line: 1, column: 1 }],\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildStructuredError(\n [peg$otherExpectation(description)],\n input.substring(peg$savedPos, peg$currPos),\n location\n );\n }\n\n function error(message, location) {\n location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n throw peg$buildSimpleError(message, location);\n }\n\n function peg$literalExpectation(text, ignoreCase) {\n return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n }\n\n function peg$anyExpectation() {\n return { type: \"any\" };\n }\n\n function peg$endExpectation() {\n return { type: \"end\" };\n }\n\n function peg$otherExpectation(description) {\n return { type: \"other\", description: description };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos], p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos),\n endPosDetails = peg$computePosDetails(endPos);\n\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildSimpleError(message, location) {\n return new peg$SyntaxError(message, null, null, location);\n }\n\n function peg$buildStructuredError(expected, found, location) {\n return new peg$SyntaxError(\n peg$SyntaxError.buildMessage(expected, found),\n expected,\n found,\n location\n );\n }\n\n function peg$parsestart() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parsetoken();\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsetoken();\n }\n\n return s0;\n }\n\n function peg$parsetoken() {\n var s0, s1, s2;\n\n s0 = peg$parseargument();\n if (s0 === peg$FAILED) {\n s0 = peg$parseselect();\n if (s0 === peg$FAILED) {\n s0 = peg$parseplural();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefunction();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c0;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c1); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c2();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechar();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechar();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseargument() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c8(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseselect() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c9;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c11) {\n s7 = peg$c11;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c12); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c9;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (s10 !== peg$FAILED) {\n s11 = [];\n s12 = peg$parseselectCase();\n if (s12 !== peg$FAILED) {\n while (s12 !== peg$FAILED) {\n s11.push(s12);\n s12 = peg$parseselectCase();\n }\n } else {\n s11 = peg$FAILED;\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n if (s12 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c6;\n peg$currPos++;\n } else {\n s13 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s13 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c13(s3, s11);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseplural() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c9;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c14) {\n s7 = peg$c14;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c16) {\n s7 = peg$c16;\n peg$currPos += 13;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c9;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n if (s10 !== peg$FAILED) {\n s11 = peg$parseoffset();\n if (s11 === peg$FAILED) {\n s11 = null;\n }\n if (s11 !== peg$FAILED) {\n s12 = [];\n s13 = peg$parsepluralCase();\n if (s13 !== peg$FAILED) {\n while (s13 !== peg$FAILED) {\n s12.push(s13);\n s13 = peg$parsepluralCase();\n }\n } else {\n s12 = peg$FAILED;\n }\n if (s12 !== peg$FAILED) {\n s13 = peg$parse_();\n if (s13 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s14 = peg$c6;\n peg$currPos++;\n } else {\n s14 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s14 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s3, s7, s11, s12);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsefunction() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseid();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c9;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseid();\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n if (s8 !== peg$FAILED) {\n s9 = peg$parsefunctionParams();\n if (s9 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s10 = peg$c6;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c19(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseid() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (peg$c20.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n if (peg$c22.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n if (peg$c22.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n }\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseparamDefault() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparamcharsDefault();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparamcharsDefault();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseparamStrict() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseparamcharsStrict();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseparamcharsStrict();\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseselectCase() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseid();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsecaseTokens();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralCase() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralKey();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsecaseTokens();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsecaseTokens() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c4;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 123) {\n s5 = peg$c4;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n peg$silentFails--;\n if (s5 !== peg$FAILED) {\n peg$currPos = s4;\n s4 = void 0;\n } else {\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 === peg$FAILED) {\n s2 = null;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsetoken();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsetoken();\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c6;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c7); }\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c25(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseoffset() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c26) {\n s2 = peg$c26;\n peg$currPos += 6;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c27); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c28;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsedigits();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c30(s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralKey() {\n var s0, s1, s2;\n\n s0 = peg$parseid();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedigits();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c30(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsefunctionParams() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsefunctionParamsDefault();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsefunctionParamsDefault();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$c33(s1);\n if (s2) {\n s2 = peg$FAILED;\n } else {\n s2 = void 0;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c34(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsefunctionParamsStrict();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsefunctionParamsStrict();\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s2 = peg$c33(s1);\n if (s2) {\n s2 = void 0;\n } else {\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c34(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsefunctionParamsStrict() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c9;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseparamStrict();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c34(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsefunctionParamsDefault() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s2 = peg$c9;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseparamDefault();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c35(s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedoubleapos() {\n var s0, s1;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c36) {\n s1 = peg$c36;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c38();\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseinapos() {\n var s0, s1, s2;\n\n s0 = peg$parsedoubleapos();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsequotedCurly() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c41) {\n s1 = peg$c41;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c42); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseinapos();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseinapos();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c43;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c44); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c45(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c46) {\n s1 = peg$c46;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseinapos();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseinapos();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c43;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c44); }\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c48(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsequotedFunctionParams() {\n var s0;\n\n s0 = peg$parsequotedCurly();\n if (s0 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s0 = peg$c43;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c44); }\n }\n }\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1, s2, s3, s4, s5;\n\n if (peg$c49.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c50); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c51) {\n s1 = peg$c51;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c54) {\n s1 = peg$c54;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c57) {\n s1 = peg$c57;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c58); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c60) {\n s1 = peg$c60;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c61); }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c62();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c63) {\n s1 = peg$c63;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c64); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsehexDigit();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsehexDigit();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsehexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehexDigit();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c65(s2, s3, s4, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseparamcharsCommon() {\n var s0;\n\n s0 = peg$parsedoubleapos();\n if (s0 === peg$FAILED) {\n s0 = peg$parsequotedFunctionParams();\n }\n\n return s0;\n }\n\n function peg$parseparamcharsDefault() {\n var s0, s1, s2;\n\n s0 = peg$parseparamcharsCommon();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseparamcharsStrict() {\n var s0, s1, s2;\n\n s0 = peg$parseparamcharsCommon();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c68.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c68.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c69); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsedigits() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c70.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c71); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c70.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c71); }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsehexDigit() {\n var s0;\n\n if (peg$c72.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n if (peg$c74.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c75); }\n }\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c74.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c75); }\n }\n }\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(\n peg$maxFailExpected,\n peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n peg$maxFailPos < input.length\n ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n );\n }\n}\n\nmodule.exports = {\n SyntaxError: peg$SyntaxError,\n parse: peg$parse\n};\n\n},{}],9:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],10:[function(require,module,exports){\nmodule.exports = require('./reserved-words');\n\n},{\"./reserved-words\":11}],11:[function(require,module,exports){\nvar assert = require('assert');\n\n/**\n * Structure for storing keywords.\n *\n * @typedef {Object.} KeywordsHash\n */\n\n/**\n * ECMAScript dialects.\n *\n * @const\n * @type {Object.} - keys as readable names and values as versions\n */\nvar DIALECTS = {\n es3: 3,\n es5: 5,\n es2015: 6,\n es7: 7,\n\n // aliases\n es6: 6,\n 'default': 5,\n next: 6\n};\n\n/**\n * ECMAScript reserved words.\n *\n * @type {Object.}\n */\nvar KEYWORDS = exports.KEYWORDS = {};\n\n/**\n * Check word for being an reserved word.\n *\n * @param {String} word - word to check\n * @param {String|Number} [dialect] - dialect or version\n * @param {Boolean} [strict] - strict mode\n * @returns {?Boolean}\n */\nexports.check = function check(word, dialect, strict) {\n dialect = dialect || DIALECTS.default;\n var version = DIALECTS[dialect] || dialect;\n\n if (strict && version >= 5) {\n version += '-strict';\n }\n\n assert(KEYWORDS[version], 'Unknown dialect');\n\n return KEYWORDS[version].hasOwnProperty(word);\n};\n\n/**\n * Reserved Words for ES3\n *\n * ECMA-262 3rd: 7.5.1\n * http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf\n *\n * @type {KeywordsHash}\n */\nKEYWORDS['3'] = _hash(\n // Keyword, ECMA-262 3rd: 7.5.2\n 'break else new var',\n 'case finally return void',\n 'catch for switch while',\n 'continue function this with',\n 'default if throw',\n 'delete in try',\n 'do instanceof typeof',\n // FutureReservedWord, ECMA-262 3rd 7.5.3\n 'abstract enum int short',\n 'boolean export interface static',\n 'byte extends long super',\n 'char final native synchronized',\n 'class float package throws',\n 'const goto private transient',\n 'debugger implements protected volatile',\n 'double import public',\n // NullLiteral & BooleanLiteral\n 'null true false'\n);\n\n/**\n * Reserved Words for ES5.\n *\n * http://es5.github.io/#x7.6.1\n *\n * @type {KeywordsHash}\n */\nKEYWORDS['5'] = _hash(\n // Keyword\n 'break do instanceof typeof',\n 'case else new var',\n 'catch finally return void',\n 'continue for switch while',\n 'debugger function this with',\n 'default if throw',\n 'delete in try',\n // FutureReservedWord\n 'class enum extends super',\n 'const export import',\n // NullLiteral & BooleanLiteral\n 'null true false'\n);\n\n/**\n * Reserved Words for ES5 in strict mode.\n *\n * @type {KeywordsHash}\n */\nKEYWORDS['5-strict'] = _hash(\n KEYWORDS['5'],\n // FutureReservedWord, strict mode. http://es5.github.io/#x7.6.1.2\n 'implements let private public yield',\n 'interface package protected static'\n);\n\n/**\n * Reserved Words for ES6.\n *\n * 11.6.2\n * http://www.ecma-international.org/ecma-262/6.0/index.html#sec-reserved-words\n *\n * @type {KeywordsHash}\n */\nKEYWORDS['6'] = _hash(\n // Keywords, ES6 11.6.2.1, http://www.ecma-international.org/ecma-262/6.0/index.html#sec-keywords\n 'break do in typeof',\n 'case else instanceof var',\n 'catch export new void',\n 'class extends return while',\n 'const finally super with',\n 'continue for switch yield',\n 'debugger function this',\n 'default if throw',\n 'delete import try',\n // Future Reserved Words, ES6 11.6.2.2\n // http://www.ecma-international.org/ecma-262/6.0/index.html#sec-future-reserved-words\n 'enum await',\n // NullLiteral & BooleanLiteral\n 'null true false'\n);\n\n/**\n * Reserved Words for ES6 in strict mode.\n *\n * @type {KeywordsHash}\n */\nKEYWORDS['6-strict'] = _hash(\n KEYWORDS['6'],\n // Keywords, ES6 11.6.2.1\n 'let static',\n // Future Reserved Words, ES6 11.6.2.2\n 'implements package protected',\n 'interface private public'\n);\n\n/**\n * Generates hash from strings\n *\n * @private\n * @param {...String|KeywordsHash} keywords - Space-delimited string or previous result of _hash\n * @return {KeywordsHash} - Object with keywords in keys and true in values\n */\nfunction _hash() {\n var set = Array.prototype.map.call(arguments, function(v) {\n return typeof v === 'string' ? v : Object.keys(v).join(' ');\n }).join(' ');\n\n return set.split(/\\s+/)\n .reduce(function(res, keyword) {\n res[keyword] = true;\n return res;\n }, {});\n}\n\n},{\"assert\":4}],12:[function(require,module,exports){\nmodule.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n},{}],13:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./support/isBuffer\":12,\"_process\":9,\"inherits\":5}]},{},[2])(2)\n});","/*!\n * angular-translate - v2.18.1 - 2018-05-19\n * \n * Copyright (c) 2018 The angular-translate team, Pascal Precht; Licensed MIT\n */\n!function(t,e){\"function\"==typeof define&&define.amd?define([\"messageformat\"],function(t){return e(t)}):\"object\"==typeof module&&module.exports?module.exports=e(require(\"messageformat\")):e(t.MessageFormat)}(this,function(r){function i(u,t,e,n){\"use strict\";var a={},c=t.get(e),f=new r(\"en\");return angular.isFunction(n)&&n(f),c||(c=t(e)),c.put(\"en\",f),a.setLocale=function(t){(f=c.get(t))||(f=new r(t),angular.isFunction(n)&&n(f),c.put(t,f))},a.getInterpolationIdentifier=function(){return\"messageformat\"},a.useSanitizeValueStrategy=function(t){return u.useStrategy(t),this},a.interpolate=function(t,e,n,a){e=e||{},e=u.sanitize(e,\"params\",a);var r=c.get(\"mf:\"+t);if(!r){for(var i in e)if(e.hasOwnProperty(i)){var o=parseInt(e[i],10);angular.isNumber(o)&&\"\"+o===e[i]&&(e[i]=o)}r=f.compile(t),c.put(\"mf:\"+t,r)}var s=r(e);return u.sanitize(s,\"text\",a)},a}return angular.module(\"pascalprecht.translate\").constant(\"TRANSLATE_MF_INTERPOLATION_CACHE\",\"$translateMessageFormatInterpolation\").provider(\"$translateMessageFormatInterpolation\",function(){\"use strict\";var a;this.messageFormatConfigurer=function(t){a=t},this.$get=[\"$translateSanitization\",\"$cacheFactory\",\"TRANSLATE_MF_INTERPOLATION_CACHE\",function(t,e,n){return i(t,e,n,a)}]}),i.displayName=\"$translateMessageFormatInterpolation\",\"pascalprecht.translate\"});",null,null,"(function(){\r\n\r\n\t'use strict';\r\n\r\n\tangular.module('jlareau.pnotify', [])\r\n\r\n\t\t.provider('notificationService', [ function() {\r\n\r\n\t\t\tvar settings = {\r\n\t\t\t\tstyling: 'bootstrap3'\r\n\t\t\t};\r\n\r\n\t\t\tvar stacks = {};\r\n\t\t\tvar defaultStack = false;\r\n\r\n\t\t\tvar initHash = function(stackName) {\r\n\r\n\t\t\t\tvar hash = angular.copy(settings);\r\n\r\n\t\t\t\tif ((stackName || (stackName = defaultStack)) && stackName in stacks) {\r\n\r\n\t\t\t\t\thash.stack = stacks[stackName].stack;\r\n\r\n\t\t\t\t\tif (stacks[stackName].addclass) {\r\n\r\n\t\t\t\t\t\thash.addclass = 'addclass' in hash\r\n ? hash.addclass + ' ' + stacks[stackName].addclass\r\n : stacks[stackName].addclass;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn hash;\r\n\r\n\t\t\t};\r\n\r\n\t\t\tthis.setDefaults = function(defaults) {\r\n\r\n\t\t\t\tsettings = defaults;\r\n\t\t\t\treturn this;\r\n\r\n\t\t\t};\r\n\r\n\t\t\tthis.setStack = function(name, addclass, stack) {\r\n\r\n\t\t\t\tif (angular.isObject(addclass)) {\r\n\t\t\t\t\tstack = addclass;\r\n\t\t\t\t\taddclass = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstacks[name] = {\r\n\t\t\t\t\tstack: stack,\r\n\t\t\t\t\taddclass: addclass\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn this;\r\n\r\n\t\t\t};\r\n\r\n\t\t\tthis.setDefaultStack = function(name) {\r\n\r\n\t\t\t\tdefaultStack = name;\r\n\r\n\t\t\t\treturn this;\r\n\r\n\t\t\t};\r\n\r\n\t\t\tthis.$get = [ function() {\r\n\r\n\t\t\t\treturn {\r\n\r\n\t\t\t\t\t/* ========== SETTINGS RELATED METHODS =============*/\r\n\r\n\t\t\t\t\tgetSettings: function() {\r\n\r\n\t\t\t\t\t\treturn settings;\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t/* ============== NOTIFICATION METHODS ==============*/\r\n\r\n\t\t\t\t\tnotice: function(content, stack) {\r\n\r\n\t\t\t\t\t\tvar hash = initHash(stack);\r\n\t\t\t\t\t\thash.type = 'notice';\r\n\t\t\t\t\t\thash.text = content;\r\n\t\t\t\t\t\treturn this.notify(hash);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tinfo: function(content, stack) {\r\n\r\n\t\t\t\t\t\tvar hash = initHash(stack);\r\n\t\t\t\t\t\thash.type = 'info';\r\n\t\t\t\t\t\thash.text = content;\r\n\t\t\t\t\t\treturn this.notify(hash);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tsuccess: function(content, stack) {\r\n\r\n\t\t\t\t\t\tvar hash = initHash(stack);\r\n\t\t\t\t\t\thash.type = 'success';\r\n\t\t\t\t\t\thash.text = content;\r\n\t\t\t\t\t\treturn this.notify(hash);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\terror: function(content, stack) {\r\n\r\n\t\t\t\t\t\tvar hash = initHash(stack);\r\n\t\t\t\t\t\thash.type = 'error';\r\n\t\t\t\t\t\thash.text = content;\r\n\t\t\t\t\t\treturn this.notify(hash);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tnotifyWithDefaults: function(options, stack) {\r\n\r\n\t\t\t\t\t\tvar defaults = initHash(stack);\r\n\t\t\t\t\t\tvar combined = angular.extend(defaults, options);\r\n\t\t\t\t\t\treturn this.notify(combined);\r\n\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tnotify: function(hash) {\r\n\r\n\t\t\t\t\t\treturn new PNotify(hash);\r\n\r\n\t\t\t\t\t},\r\n\r\n removeNotifications: function() {\r\n\r\n return PNotify.removeAll();\r\n \r\n }\r\n\r\n\t\t\t\t};\r\n\r\n\t\t\t}];\r\n\r\n\t\t}])\r\n\r\n\t;\r\n\r\n})();\r\n","angular.module(\"ivpusic.cookie\",[\"ipCookie\"]),angular.module(\"ipCookie\",[\"ng\"]).factory(\"ipCookie\",[\"$document\",function(e){\"use strict\";function i(e){try{return decodeURIComponent(e)}catch(i){}}return function(){function t(t,n,r){var o,s,p,u,a,c,d,x,f;r=r||{};var g=r.decode||i,l=r.encode||encodeURIComponent;if(void 0!==n)return n=\"object\"==typeof n?JSON.stringify(n):n+\"\",\"number\"==typeof r.expires&&(f=r.expires,r.expires=new Date,-1===f?r.expires=new Date(\"Thu, 01 Jan 1970 00:00:00 GMT\"):void 0!==r.expirationUnit?\"hours\"===r.expirationUnit?r.expires.setHours(r.expires.getHours()+f):\"minutes\"===r.expirationUnit?r.expires.setMinutes(r.expires.getMinutes()+f):\"seconds\"===r.expirationUnit?r.expires.setSeconds(r.expires.getSeconds()+f):\"milliseconds\"===r.expirationUnit?r.expires.setMilliseconds(r.expires.getMilliseconds()+f):r.expires.setDate(r.expires.getDate()+f):r.expires.setDate(r.expires.getDate()+f)),e[0].cookie=[l(t),\"=\",l(n),r.expires?\"; expires=\"+r.expires.toUTCString():\"\",r.path?\"; path=\"+r.path:\"\",r.domain?\"; domain=\"+r.domain:\"\",r.secure?\"; secure\":\"\"].join(\"\");for(s=[],x=e[0].cookie,x&&(s=x.split(\"; \")),o={},d=!1,p=0;s.length>p;++p)if(s[p]){if(u=s[p],a=u.indexOf(\"=\"),c=u.substring(0,a),n=g(u.substring(a+1)),angular.isUndefined(n))continue;if(void 0===t||t===c){try{o[c]=JSON.parse(n)}catch(m){o[c]=n}if(t===c)return o[c];d=!0}}return d&&void 0===t?o:void 0}return t.remove=function(e,i){var n=void 0!==t(e);return n&&(i||(i={}),i.expires=-1,t(e,\"\",i)),n},t}()}]);","var webStorageModule=angular.module(\"webStorageModule\",[]);webStorageModule.constant(\"defaultSettings\",{prefix:\"\",order:[\"local\",\"session\",\"memory\"],errorName:\"webStorage.notification.error\"});webStorageModule.factory(\"webStorage\",[\"$rootScope\",\"defaultSettings\",function($rootScope,defaultSettings){\"use strict\";var errorName=defaultSettings.errorName;var hasLocalStorage=testLocalStorage();var hasSessionStorage=testSessionStorage();var order=defaultSettings.order;var prefix=defaultSettings.prefix;var ram={};var webStorage={isSupported:hasLocalStorage||hasSessionStorage,local:{isSupported:hasLocalStorage,add:addToLocal,get:getFromLocal,has:hasInLocal,remove:removeFromLocal,clear:clearLocal},session:{isSupported:hasSessionStorage,add:addToSession,get:getFromSession,has:hasInSession,remove:removeFromSession,clear:clearSession},memory:{isSupported:true,add:addToMemory,get:getFromMemory,has:hasInMemory,remove:removeFromMemory,clear:clearMemory}};webStorage.add=function(key,value,allEngines){allEngines=typeof allEngines!==\"undefined\"?!!allEngines:false;var result=false;var length=order.length;for(var ith=0;iththis.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(idocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var o=this.options.trigger.split(\" \"),n=o.length;n--;){var s=o[n];if(\"click\"==s)this.$element.on(\"click.\"+this.type,this.options.selector,g.proxy(this.toggle,this));else if(\"manual\"!=s){var a=\"hover\"==s?\"mouseenter\":\"focusin\",r=\"hover\"==s?\"mouseleave\":\"focusout\";this.$element.on(a+\".\"+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+\".\"+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusin\"==t.type?\"focus\":\"hover\"]=!0),e.tip().hasClass(\"in\")||\"in\"==e.hoverState)e.hoverState=\"in\";else{if(clearTimeout(e.timeout),e.hoverState=\"in\",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){\"in\"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data(\"bs.\"+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e)),t instanceof g.Event&&(e.inState[\"focusout\"==t.type?\"focus\":\"hover\"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState=\"out\",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){\"out\"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr(\"id\",n),this.$element.attr(\"aria-describedby\",n),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\\s?auto?\\s?/i,r=a.test(s);r&&(s=s.replace(a,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s=\"bottom\"==s&&l.bottom+d>c.bottom?\"top\":\"top\"==s&&l.top-dc.width?\"left\":\"left\"==s&&l.left-ha.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data(\"bs.\"+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data(\"bs.\"+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass(\"in\")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data(\"bs.tooltip\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.tooltip\",e=new m(this,i)),\"string\"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){\"use strict\";var s=function(t,e){this.init(\"popover\",t,e)};if(!n.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");s.VERSION=\"3.4.1\",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'

'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),\"string\"===o&&(i=this.sanitizeHtml(i))),t.find(\".popover-title\").html(e),t.find(\".popover-content\").children().detach().end()[\"string\"===o?\"html\":\"append\"](i)}else t.find(\".popover-title\").text(e),t.find(\".popover-content\").children().detach().end().text(i);t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data(\"bs.popover\"),i=\"object\"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data(\"bs.popover\",e=new s(this,i)),\"string\"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){\"use strict\";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data(\"bs.scrollspy\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.scrollspy\",e=new n(this,i)),\"string\"==typeof o&&e[o]()})}n.VERSION=\"3.4.1\",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o=\"offset\",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o=\"position\",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data(\"target\")||t.attr(\"href\"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(\":visible\")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(n[t+1]===undefined||e .active\"),n=i&&r.support.transition&&(o.length&&o.hasClass(\"fade\")||!!e.find(\"> .fade\").length);function s(){o.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),t.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),n?(t[0].offsetWidth,t.addClass(\"in\")):t.removeClass(\"fade\"),t.parent(\".dropdown-menu\").length&&t.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}o.length&&n?o.one(\"bsTransitionEnd\",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass(\"in\")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),\"show\")};r(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(l){\"use strict\";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on(\"scroll.bs.affix.data-api\",l.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data(\"bs.affix\"),i=\"object\"==typeof o&&o;e||t.data(\"bs.affix\",e=new h(this,i)),\"string\"==typeof o&&e[o]()})}h.VERSION=\"3.4.1\",h.RESET=\"affix affix-top affix-bottom\",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&\"top\"==this.affixed)return n1&&(b.$element.data(p,b.direction),l.currentSlide&&l.currentSlide.$element&&l.currentSlide.$element.data(p,b.direction),a.$currentTransition=!0,n?d.on(\"addClass\",b.$element,function(b,c){\"close\"===c&&(a.$currentTransition=null,d.off(\"addClass\",b))}):b.$element.one(\"$animate:close\",function(){a.$currentTransition=null})),l.currentSlide=b,q=c,g())}function f(a){if(angular.isUndefined(m[a].index))return m[a];{var b;m.length}for(b=0;b0&&(j=c(i,b))}function h(){j&&(c.cancel(j),j=null)}function i(){var b=+a.interval;k&&!isNaN(b)&&b>0&&m.length?a.next():a.pause()}var j,k,l=this,m=l.slides=a.slides=[],n=angular.version.minor>=4,o=\"uib-noTransition\",p=\"uib-slideDirection\",q=-1;l.currentSlide=null;var r=!1;l.select=a.select=function(b,c){var d=a.indexOfSlide(b);void 0===c&&(c=d>l.getCurrentIndex()?\"next\":\"prev\"),b&&b!==l.currentSlide&&!a.$currentTransition&&e(b,d,c)},a.$on(\"$destroy\",function(){r=!0}),l.getCurrentIndex=function(){return l.currentSlide&&angular.isDefined(l.currentSlide.index)?+l.currentSlide.index:q},a.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:m.indexOf(a)},a.next=function(){var b=(l.getCurrentIndex()+1)%m.length;return 0===b&&a.noWrap()?void a.pause():l.select(f(b),\"next\")},a.prev=function(){var b=l.getCurrentIndex()-1<0?m.length-1:l.getCurrentIndex()-1;return a.noWrap()&&b===m.length-1?void a.pause():l.select(f(b),\"prev\")},a.isActive=function(a){return l.currentSlide===a},a.$watch(\"interval\",g),a.$on(\"$destroy\",h),a.play=function(){k||(k=!0,g())},a.pause=function(){a.noPause||(k=!1,h())},l.addSlide=function(b,c){b.$element=c,m.push(b),1===m.length||b.active?(l.select(m[m.length-1]),1==m.length&&a.play()):b.active=!1},l.removeSlide=function(a){angular.isDefined(a.index)&&m.sort(function(a,b){return+a.index>+b.index});var b=m.indexOf(a);m.splice(b,1),m.length>0&&a.active?l.select(b>=m.length?m[b-1]:m[b]):q>b&&q--,0===m.length&&(l.currentSlide=null)},a.$watch(\"noTransition\",function(a){b.data(o,a)})}]).directive(\"carousel\",[function(){return{restrict:\"EA\",transclude:!0,replace:!0,controller:\"CarouselController\",controllerAs:\"carousel\",require:\"carousel\",templateUrl:function(a,b){return b.templateUrl||\"template/carousel/carousel.html\"},scope:{interval:\"=\",noTransition:\"=\",noPause:\"=\",noWrap:\"&\"}}}]).directive(\"slide\",function(){return{require:\"^carousel\",restrict:\"EA\",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||\"template/carousel/slide.html\"},scope:{active:\"=?\",index:\"=?\"},link:function(a,b,c,d){d.addSlide(a,b),a.$on(\"$destroy\",function(){d.removeSlide(a)}),a.$watch(\"active\",function(b){b&&d.select(a)})}}}).animation(\".item\",[\"$injector\",\"$animate\",function(a,b){function c(a,b,c){a.removeClass(b),c&&c()}var d=\"uib-noTransition\",e=\"uib-slideDirection\",f=null;return a.has(\"$animateCss\")&&(f=a.get(\"$animateCss\")),{beforeAddClass:function(a,g,h){if(\"active\"==g&&a.parent()&&!a.parent().data(d)){var i=!1,j=a.data(e),k=\"next\"==j?\"left\":\"right\",l=c.bind(this,a,k+\" \"+j,h);return a.addClass(j),f?f(a,{addClass:k}).start().done(l):b.addClass(a,k).then(function(){i||l(),h()}),function(){i=!0}}h()},beforeRemoveClass:function(a,g,h){if(\"active\"===g&&a.parent()&&!a.parent().data(d)){var i=!1,j=a.data(e),k=\"next\"==j?\"left\":\"right\",l=c.bind(this,a,k,h);return f?f(a,{addClass:k}).start().done(l):b.addClass(a,k).then(function(){i||l(),h()}),function(){i=!0}}h()}}}]),angular.module(\"ui.bootstrap.dateparser\",[]).service(\"dateParser\",[\"$log\",\"$locale\",\"orderByFilter\",function(a,b,c){function d(a){var b=[],d=a.split(\"\");return angular.forEach(g,function(c,e){var f=a.indexOf(e);if(f>-1){a=a.split(\"\"),d[f]=\"(\"+c.regex+\")\",a[f]=\"$\";for(var g=f+1,h=f+e.length;h>g;g++)d[g]=\"\",a[g]=\"$\";a=a.join(\"\"),b.push({index:f,apply:c.apply})}}),{regex:new RegExp(\"^\"+d.join(\"\")+\"$\"),map:c(b,\"index\")}}function e(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var f=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;this.parsers={};var g={yyyy:{regex:\"\\\\d{4}\",apply:function(a){this.year=+a}},yy:{regex:\"\\\\d{2}\",apply:function(a){this.year=+a+2e3}},y:{regex:\"\\\\d{1,4}\",apply:function(a){this.year=+a}},MMMM:{regex:b.DATETIME_FORMATS.MONTH.join(\"|\"),apply:function(a){this.month=b.DATETIME_FORMATS.MONTH.indexOf(a)}},MMM:{regex:b.DATETIME_FORMATS.SHORTMONTH.join(\"|\"),apply:function(a){this.month=b.DATETIME_FORMATS.SHORTMONTH.indexOf(a)}},MM:{regex:\"0[1-9]|1[0-2]\",apply:function(a){this.month=a-1}},M:{regex:\"[1-9]|1[0-2]\",apply:function(a){this.month=a-1}},dd:{regex:\"[0-2][0-9]{1}|3[0-1]{1}\",apply:function(a){this.date=+a}},d:{regex:\"[1-2]?[0-9]{1}|3[0-1]{1}\",apply:function(a){this.date=+a}},EEEE:{regex:b.DATETIME_FORMATS.DAY.join(\"|\")},EEE:{regex:b.DATETIME_FORMATS.SHORTDAY.join(\"|\")},HH:{regex:\"(?:0|1)[0-9]|2[0-3]\",apply:function(a){this.hours=+a}},hh:{regex:\"0[0-9]|1[0-2]\",apply:function(a){this.hours=+a}},H:{regex:\"1?[0-9]|2[0-3]\",apply:function(a){this.hours=+a}},mm:{regex:\"[0-5][0-9]\",apply:function(a){this.minutes=+a}},m:{regex:\"[0-9]|[1-5][0-9]\",apply:function(a){this.minutes=+a}},sss:{regex:\"[0-9][0-9][0-9]\",apply:function(a){this.milliseconds=+a}},ss:{regex:\"[0-5][0-9]\",apply:function(a){this.seconds=+a}},s:{regex:\"[0-9]|[1-5][0-9]\",apply:function(a){this.seconds=+a}},a:{regex:b.DATETIME_FORMATS.AMPMS.join(\"|\"),apply:function(a){12===this.hours&&(this.hours=0),\"PM\"===a&&(this.hours+=12)}}};this.parse=function(c,g,h){if(!angular.isString(c)||!g)return c;g=b.DATETIME_FORMATS[g]||g,g=g.replace(f,\"\\\\$&\"),this.parsers[g]||(this.parsers[g]=d(g));var i=this.parsers[g],j=i.regex,k=i.map,l=c.match(j);if(l&&l.length){var m,n;angular.isDate(h)&&!isNaN(h.getTime())?m={year:h.getFullYear(),month:h.getMonth(),date:h.getDate(),hours:h.getHours(),minutes:h.getMinutes(),seconds:h.getSeconds(),milliseconds:h.getMilliseconds()}:(h&&a.warn(\"dateparser:\",\"baseDate is not a valid date\"),m={year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0});for(var o=1,p=l.length;p>o;o++){var q=k[o-1];q.apply&&q.apply.call(m,l[o])}return e(m.year,m.month,m.date)&&(n=new Date(m.year,m.month,m.date,m.hours,m.minutes,m.seconds,m.milliseconds||0)),n}}}]),angular.module(\"ui.bootstrap.position\",[]).factory(\"$position\",[\"$document\",\"$window\",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return\"static\"===(c(a,\"position\")||\"static\")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop(\"offsetWidth\"),height:g.height||b.prop(\"offsetHeight\"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop(\"offsetWidth\"),height:d.height||c.prop(\"offsetHeight\"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split(\"-\"),j=i[0],k=i[1]||\"center\";e=d?this.offset(a):this.position(a),f=b.prop(\"offsetWidth\"),g=b.prop(\"offsetHeight\");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case\"right\":h={top:m[k](),left:l[j]()};break;case\"left\":h={top:m[k](),left:e.left-f};break;case\"bottom\":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module(\"ui.bootstrap.datepicker\",[\"ui.bootstrap.dateparser\",\"ui.bootstrap.position\"]).value(\"$datepickerSuppressError\",!1).constant(\"datepickerConfig\",{formatDay:\"dd\",formatMonth:\"MMMM\",formatYear:\"yyyy\",formatDayHeader:\"EEE\",formatDayTitle:\"MMMM yyyy\",formatMonthTitle:\"yyyy\",datepickerMode:\"day\",minMode:\"day\",maxMode:\"year\",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller(\"DatepickerController\",[\"$scope\",\"$attrs\",\"$parse\",\"$interpolate\",\"$log\",\"dateFilter\",\"datepickerConfig\",\"$datepickerSuppressError\",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=[\"day\",\"month\",\"year\"],angular.forEach([\"formatDay\",\"formatMonth\",\"formatYear\",\"formatDayHeader\",\"formatDayTitle\",\"formatMonthTitle\",\"showWeeks\",\"startingDay\",\"yearRange\",\"shortcutPropagation\"],function(c,e){i[c]=angular.isDefined(b[c])?6>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):g[c]}),angular.forEach([\"minDate\",\"maxDate\"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=g[d]?new Date(g[d]):null}),angular.forEach([\"minMode\",\"maxMode\"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(c){i[d]=angular.isDefined(c)?c:b[d],a[d]=i[d],(\"minMode\"==d&&i.modes.indexOf(a.datepickerMode)i.modes.indexOf(i[d]))&&(a.datepickerMode=i[d])}):(i[d]=g[d]||null,a[d]=i[d])}),a.datepickerMode=a.datepickerMode||g.datepickerMode,a.uniqueId=\"datepicker-\"+a.$id+\"-\"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:h||e.error('Datepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity(\"dateDisabled\",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:f(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},this.fixTimeZone=function(a){var b=a.getHours();a.setHours(23===b?b+2:0)},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:\"enter\",32:\"space\",33:\"pageup\",34:\"pagedown\",35:\"end\",36:\"home\",37:\"left\",38:\"up\",39:\"right\",40:\"down\"};var k=function(){i.element[0].focus()};a.$on(\"datepicker.focus\",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),\"enter\"===c||\"space\"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||\"up\"!==c&&\"down\"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode(\"up\"===c?1:-1),k())}}]).directive(\"datepicker\",function(){return{restrict:\"EA\",replace:!0,templateUrl:function(a,b){return b.templateUrl||\"template/datepicker/datepicker.html\"},scope:{datepickerMode:\"=?\",dateDisabled:\"&\",customClass:\"&\",shortcutPropagation:\"&?\"},require:[\"datepicker\",\"^ngModel\"],controller:\"DatepickerController\",controllerAs:\"datepicker\",link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}).directive(\"daypicker\",[\"dateFilter\",function(a){return{restrict:\"EA\",replace:!0,templateUrl:\"template/datepicker/day.html\",require:\"^datepicker\",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){for(var c,d=new Array(b),f=new Date(a),g=0;b>g;)c=new Date(f),e.fixTimeZone(c),d[g++]=c,f.setDate(f.getDate()+1);return d}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+\"-\"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,\"EEEE\")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=(11-e.startingDay)%7,p=b.rows.length,q=0;p>q;q++)b.weekNumbers.push(h(b.rows[q][o].date))}},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},e.handleKeyDown=function(a){var b=e.activeDate.getDate();if(\"left\"===a)b-=1;else if(\"up\"===a)b-=7;else if(\"right\"===a)b+=1;else if(\"down\"===a)b+=7;else if(\"pageup\"===a||\"pagedown\"===a){var c=e.activeDate.getMonth()+(\"pageup\"===a?-1:1);e.activeDate.setMonth(c,1),b=Math.min(f(e.activeDate.getFullYear(),e.activeDate.getMonth()),b)}else\"home\"===a?b=1:\"end\"===a&&(b=f(e.activeDate.getFullYear(),e.activeDate.getMonth()));e.activeDate.setDate(b)},e.refreshView()}}}]).directive(\"monthpicker\",[\"dateFilter\",function(a){return{restrict:\"EA\",replace:!0,templateUrl:\"template/datepicker/month.html\",require:\"^datepicker\",link:function(b,c,d,e){e.step={years:1},e.element=c,e._refreshView=function(){for(var c,d=new Array(12),f=e.activeDate.getFullYear(),g=0;12>g;g++)c=new Date(f,g,1),e.fixTimeZone(c),d[g]=angular.extend(e.createDateObject(c,e.formatMonth),{uid:b.uniqueId+\"-\"+g});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(d,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if(\"left\"===a)b-=1;else if(\"up\"===a)b-=3;else if(\"right\"===a)b+=1;else if(\"down\"===a)b+=3;else if(\"pageup\"===a||\"pagedown\"===a){var c=e.activeDate.getFullYear()+(\"pageup\"===a?-1:1);e.activeDate.setFullYear(c)}else\"home\"===a?b=0:\"end\"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive(\"yearpicker\",[\"dateFilter\",function(){return{restrict:\"EA\",replace:!0,templateUrl:\"template/datepicker/year.html\",require:\"^datepicker\",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b,c=new Array(f),g=0,h=e(d.activeDate.getFullYear());f>g;g++)b=new Date(h+g,0,1),d.fixTimeZone(b),c[g]=angular.extend(d.createDateObject(b,d.formatYear),{uid:a.uniqueId+\"-\"+g});a.title=[c[0].label,c[f-1].label].join(\" - \"),a.rows=d.split(c,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();\"left\"===a?b-=1:\"up\"===a?b-=5:\"right\"===a?b+=1:\"down\"===a?b+=5:\"pageup\"===a||\"pagedown\"===a?b+=(\"pageup\"===a?-1:1)*d.step.years:\"home\"===a?b=e(d.activeDate.getFullYear()):\"end\"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant(\"datepickerPopupConfig\",{datepickerPopup:\"yyyy-MM-dd\",datepickerPopupTemplateUrl:\"template/datepicker/popup.html\",datepickerTemplateUrl:\"template/datepicker/datepicker.html\",html5Types:{date:\"yyyy-MM-dd\",\"datetime-local\":\"yyyy-MM-ddTHH:mm:ss.sss\",month:\"yyyy-MM\"},currentText:\"Today\",clearText:\"Clear\",closeText:\"Done\",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0,onOpenFocus:!0}).directive(\"datepickerPopup\",[\"$compile\",\"$parse\",\"$document\",\"$rootScope\",\"$position\",\"dateFilter\",\"dateParser\",\"datepickerPopupConfig\",\"$timeout\",function(a,b,c,d,e,f,g,h,i){return{restrict:\"EA\",require:\"ngModel\",scope:{isOpen:\"=?\",currentText:\"@\",clearText:\"@\",closeText:\"@\",dateDisabled:\"&\",customClass:\"&\"},link:function(j,k,l,m){function n(a){return a.replace(/([A-Z])/g,function(a){return\"-\"+a.toLowerCase()})}function o(a){if(angular.isNumber(a)&&(a=new Date(a)),a){if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=g.parse(a,q,j.date);return isNaN(b)?void 0:b}return void 0}return null}function p(a,b){var c=a||b;if(!l.ngRequired&&!c)return!0;if(angular.isNumber(c)&&(c=new Date(c)),c){if(angular.isDate(c)&&!isNaN(c))return!0;if(angular.isString(c)){var d=g.parse(c,q);return!isNaN(d)}return!1}return!0}var q,r=angular.isDefined(l.closeOnDateSelection)?j.$parent.$eval(l.closeOnDateSelection):h.closeOnDateSelection,s=angular.isDefined(l.datepickerAppendToBody)?j.$parent.$eval(l.datepickerAppendToBody):h.appendToBody,t=angular.isDefined(l.onOpenFocus)?j.$parent.$eval(l.onOpenFocus):h.onOpenFocus,u=angular.isDefined(l.datepickerPopupTemplateUrl)?l.datepickerPopupTemplateUrl:h.datepickerPopupTemplateUrl,v=angular.isDefined(l.datepickerTemplateUrl)?l.datepickerTemplateUrl:h.datepickerTemplateUrl;j.showButtonBar=angular.isDefined(l.showButtonBar)?j.$parent.$eval(l.showButtonBar):h.showButtonBar,j.getText=function(a){return j[a+\"Text\"]||h[a+\"Text\"]};var w=!1;if(h.html5Types[l.type]?(q=h.html5Types[l.type],w=!0):(q=l.datepickerPopup||h.datepickerPopup,l.$observe(\"datepickerPopup\",function(a){var b=a||h.datepickerPopup;if(b!==q&&(q=b,m.$modelValue=null,!q))throw new Error(\"datepickerPopup must have a date format specified.\")})),!q)throw new Error(\"datepickerPopup must have a date format specified.\");if(w&&l.datepickerPopup)throw new Error(\"HTML5 date input types do not support custom formats.\");var x=angular.element(\"
\");x.attr({\"ng-model\":\"date\",\"ng-change\":\"dateSelection(date)\",\"template-url\":u});var y=angular.element(x.children()[0]);if(y.attr(\"template-url\",v),w&&\"month\"==l.type&&(y.attr(\"datepicker-mode\",'\"month\"'),y.attr(\"min-mode\",\"month\")),l.datepickerOptions){var z=j.$parent.$eval(l.datepickerOptions);z&&z.initDate&&(j.initDate=z.initDate,y.attr(\"init-date\",\"initDate\"),delete z.initDate),angular.forEach(z,function(a,b){y.attr(n(b),a)})}j.watchData={},angular.forEach([\"minMode\",\"maxMode\",\"minDate\",\"maxDate\",\"datepickerMode\",\"initDate\",\"shortcutPropagation\"],function(a){if(l[a]){var c=b(l[a]);if(j.$parent.$watch(c,function(b){j.watchData[a]=b}),y.attr(n(a),\"watchData.\"+a),\"datepickerMode\"===a){var d=c.assign;j.$watch(\"watchData.\"+a,function(a,b){angular.isFunction(d)&&a!==b&&d(j.$parent,a)})}}}),l.dateDisabled&&y.attr(\"date-disabled\",\"dateDisabled({ date: date, mode: mode })\"),l.showWeeks&&y.attr(\"show-weeks\",l.showWeeks),l.customClass&&y.attr(\"custom-class\",\"customClass({ date: date, mode: mode })\"),w?m.$formatters.push(function(a){return j.date=a,a}):(m.$$parserName=\"date\",m.$validators.date=p,m.$parsers.unshift(o),m.$formatters.push(function(a){return j.date=a,m.$isEmpty(a)?a:f(a,q)})),j.dateSelection=function(a){angular.isDefined(a)&&(j.date=a);var b=j.date?f(j.date,q):null;k.val(b),m.$setViewValue(b),r&&(j.isOpen=!1,k[0].focus())},m.$viewChangeListeners.push(function(){j.date=g.parse(m.$viewValue,q,j.date)});var A=function(a){j.isOpen&&!k[0].contains(a.target)&&j.$apply(function(){j.isOpen=!1})},B=function(a){27===a.which&&j.isOpen?(a.preventDefault(),a.stopPropagation(),j.$apply(function(){j.isOpen=!1}),k[0].focus()):40!==a.which||j.isOpen||(a.preventDefault(),a.stopPropagation(),j.$apply(function(){j.isOpen=!0}))};k.bind(\"keydown\",B),j.keydown=function(a){27===a.which&&(j.isOpen=!1,k[0].focus())},j.$watch(\"isOpen\",function(a){a?(j.position=s?e.offset(k):e.position(k),j.position.top=j.position.top+k.prop(\"offsetHeight\"),i(function(){t&&j.$broadcast(\"datepicker.focus\"),c.bind(\"click\",A)},0,!1)):c.unbind(\"click\",A)}),j.select=function(a){if(\"today\"===a){var b=new Date;angular.isDate(j.date)?(a=new Date(j.date),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}j.dateSelection(a)},j.close=function(){j.isOpen=!1,k[0].focus()};var C=a(x)(j);x.remove(),s?c.find(\"body\").append(C):k.after(C),j.$on(\"$destroy\",function(){j.isOpen===!0&&(d.$$phase||j.$apply(function(){j.isOpen=!1})),C.remove(),k.unbind(\"keydown\",B),c.unbind(\"click\",A)})}}}]).directive(\"datepickerPopupWrap\",function(){return{restrict:\"EA\",replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||\"template/datepicker/popup.html\"}}}),angular.module(\"ui.bootstrap.dropdown\",[\"ui.bootstrap.position\"]).constant(\"dropdownConfig\",{openClass:\"open\"}).service(\"dropdownService\",[\"$document\",\"$rootScope\",function(a,b){var c=null;this.open=function(b){c||(a.bind(\"click\",d),a.bind(\"keydown\",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind(\"click\",d),a.unbind(\"keydown\",e))};var d=function(a){if(c&&(!a||\"disabled\"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getDropdownElement();a&&\"outsideClick\"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which?(c.focusToggleElement(),d()):c.isKeynavEnabled()&&/(38|40)/.test(a.which)&&c.isOpen&&(a.preventDefault(),a.stopPropagation(),c.focusDropdownEntry(a.which))}}]).controller(\"DropdownController\",[\"$scope\",\"$attrs\",\"$parse\",\"dropdownConfig\",\"dropdownService\",\"$animate\",\"$position\",\"$document\",\"$compile\",\"$templateRequest\",function(a,b,c,d,e,f,g,h,i,j){var k,l,m=this,n=a.$new(),o=d.openClass,p=angular.noop,q=b.onToggle?c(b.onToggle):angular.noop,r=!1,s=!1;this.init=function(d){m.$element=d,b.isOpen&&(l=c(b.isOpen),p=l.assign,a.$watch(l,function(a){n.isOpen=!!a})),r=angular.isDefined(b.dropdownAppendToBody),s=angular.isDefined(b.keyboardNav),r&&m.dropdownMenu&&(h.find(\"body\").append(m.dropdownMenu),d.on(\"$destroy\",function(){m.dropdownMenu.remove()}))},this.toggle=function(a){return n.isOpen=arguments.length?!!a:!n.isOpen},this.isOpen=function(){return n.isOpen},n.getToggleElement=function(){return m.toggleElement},n.getAutoClose=function(){return b.autoClose||\"always\"},n.getElement=function(){return m.$element},n.isKeynavEnabled=function(){return s},n.focusDropdownEntry=function(a){var b=m.dropdownMenu?angular.element(m.dropdownMenu).find(\"a\"):angular.element(m.$element).find(\"ul\").eq(0).find(\"a\");switch(a){case 40:m.selectedOption=angular.isNumber(m.selectedOption)?m.selectedOption===b.length-1?m.selectedOption:m.selectedOption+1:0;break;case 38:if(!angular.isNumber(m.selectedOption))return;m.selectedOption=0===m.selectedOption?0:m.selectedOption-1}b[m.selectedOption].focus()},n.getDropdownElement=function(){return m.dropdownMenu},n.focusToggleElement=function(){m.toggleElement&&m.toggleElement[0].focus()},n.$watch(\"isOpen\",function(b,c){if(r&&m.dropdownMenu){var d=g.positionElements(m.$element,m.dropdownMenu,\"bottom-left\",!0),h={top:d.top+\"px\",display:b?\"block\":\"none\"},l=m.dropdownMenu.hasClass(\"dropdown-menu-right\");l?(h.left=\"auto\",h.right=window.innerWidth-(d.left+m.$element.prop(\"offsetWidth\"))+\"px\"):(h.left=d.left+\"px\",h.right=\"auto\"),m.dropdownMenu.css(h)}if(f[b?\"addClass\":\"removeClass\"](m.$element,o).then(function(){angular.isDefined(b)&&b!==c&&q(a,{open:!!b})}),b)m.dropdownMenuTemplateUrl&&j(m.dropdownMenuTemplateUrl).then(function(a){k=n.$new(),i(a.trim())(k,function(a){var b=a;m.dropdownMenu.replaceWith(b),m.dropdownMenu=b})}),n.focusToggleElement(),e.open(n);else{if(m.dropdownMenuTemplateUrl){k&&k.$destroy();var s=angular.element('
    ');m.dropdownMenu.replaceWith(s),m.dropdownMenu=s}e.close(n),m.selectedOption=null}angular.isFunction(p)&&p(a,b)}),a.$on(\"$locationChangeSuccess\",function(){\"disabled\"!==n.getAutoClose()&&(n.isOpen=!1)}),a.$on(\"$destroy\",function(){n.$destroy()})}]).directive(\"dropdown\",function(){return{controller:\"DropdownController\",link:function(a,b,c,d){d.init(b),b.addClass(\"dropdown\")}}}).directive(\"dropdownMenu\",function(){return{restrict:\"AC\",require:\"?^dropdown\",link:function(a,b,c,d){if(d){var e=c.templateUrl;e&&(d.dropdownMenuTemplateUrl=e),d.dropdownMenu||(d.dropdownMenu=b)}}}}).directive(\"keyboardNav\",function(){return{restrict:\"A\",require:\"?^dropdown\",link:function(a,b,c,d){b.bind(\"keydown\",function(a){if(-1!==[38,40].indexOf(a.which)){a.preventDefault(),a.stopPropagation();var b=d.dropdownMenu.find(\"a\");switch(a.which){case 40:d.selectedOption=angular.isNumber(d.selectedOption)?d.selectedOption===b.length-1?d.selectedOption:d.selectedOption+1:0;break;case 38:d.selectedOption=0===d.selectedOption?0:d.selectedOption-1}b[d.selectedOption].focus()}})}}}).directive(\"dropdownToggle\",function(){\nreturn{require:\"?^dropdown\",link:function(a,b,c,d){if(d){b.addClass(\"dropdown-toggle\"),d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass(\"disabled\")||c.disabled||a.$apply(function(){d.toggle()})};b.bind(\"click\",e),b.attr({\"aria-haspopup\":!0,\"aria-expanded\":!1}),a.$watch(d.isOpen,function(a){b.attr(\"aria-expanded\",!!a)}),a.$on(\"$destroy\",function(){b.unbind(\"click\",e)})}}}}),angular.module(\"ui.bootstrap.modal\",[]).factory(\"$$stackedMap\",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0)}),k(),b&&b.focus?b.focus():d.focus()}function k(){if(o&&-1==i()){var a=p;l(o,p,function(){a=null}),o=void 0,p=void 0}}function l(b,c,d){function e(){e.done||(e.done=!0,n?n(b,{event:\"leave\"}).start().then(function(){b.remove()}):a.leave(b),c.$destroy(),d&&d())}var g,h=null,i=function(){return g||(g=f.defer(),h=g.promise),function(){g.resolve()}};return c.$broadcast(t.NOW_CLOSING_EVENT,i),f.when(h).then(e)}function m(a,b,c){return!a.value.modalScope.$broadcast(\"modal.closing\",b,c).defaultPrevented}var n=null;g.has(\"$animateCss\")&&(n=g.get(\"$animateCss\"));var o,p,q,r=\"modal-open\",s=h.createNew(),t={NOW_CLOSING_EVENT:\"modal.stack.now-closing\"},u=0,v=\"a[href], area[href], input:not([disabled]), button:not([disabled]),select:not([disabled]), textarea:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable=true]\";return e.$watch(i,function(a){p&&(p.index=a)}),c.bind(\"keydown\",function(a){if(a.isDefaultPrevented())return a;var b=s.top();if(b&&b.value.keyboard)switch(a.which){case 27:a.preventDefault(),e.$apply(function(){t.dismiss(b.key,\"escape key press\")});break;case 9:t.loadFocusElementList(b);var c=!1;a.shiftKey?t.isFocusInFirstItem(a)&&(c=t.focusLastFocusableElement()):t.isFocusInLastItem(a)&&(c=t.focusFirstFocusableElement()),c&&(a.preventDefault(),a.stopPropagation())}}),t.open=function(a,b){var f=c[0].activeElement;s.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard,openedClass:b.openedClass});var g=c.find(\"body\").eq(0),h=i();if(h>=0&&!o){p=e.$new(!0),p.index=h;var j=angular.element('
    ');j.attr(\"backdrop-class\",b.backdropClass),b.animation&&j.attr(\"modal-animation\",\"true\"),o=d(j)(p),g.append(o)}var k=angular.element('
    ');k.attr({\"template-url\":b.windowTemplateUrl,\"window-class\":b.windowClass,size:b.size,index:s.length()-1,animate:\"animate\"}).html(b.content),b.animation&&k.attr(\"modal-animation\",\"true\");var l=d(k)(b.scope);s.top().value.modalDomEl=l,s.top().value.modalOpener=f,g.append(l),g.addClass(b.openedClass||r),t.clearFocusListCache()},t.close=function(a,b){var c=s.get(a);return c&&m(c,b,!0)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.resolve(b),j(a,c.value.modalOpener),!0):!c},t.dismiss=function(a,b){var c=s.get(a);return c&&m(c,b,!1)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.reject(b),j(a,c.value.modalOpener),!0):!c},t.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},t.getTop=function(){return s.top()},t.modalRendered=function(a){var b=s.get(a);b&&b.value.renderDeferred.resolve()},t.focusFirstFocusableElement=function(){return q.length>0?(q[0].focus(),!0):!1},t.focusLastFocusableElement=function(){return q.length>0?(q[q.length-1].focus(),!0):!1},t.isFocusInFirstItem=function(a){return q.length>0?(a.target||a.srcElement)==q[0]:!1},t.isFocusInLastItem=function(a){return q.length>0?(a.target||a.srcElement)==q[q.length-1]:!1},t.clearFocusListCache=function(){q=[],u=0},t.loadFocusElementList=function(a){if((void 0===q||!q.length0)&&a){var b=a.value.modalDomEl;b&&b.length&&(q=b[0].querySelectorAll(v))}},t}]).provider(\"$modal\",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:[\"$injector\",\"$rootScope\",\"$q\",\"$templateRequest\",\"$controller\",\"$modalStack\",function(b,c,d,e,f,g){function h(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function i(a){var c=[];return angular.forEach(a,function(a){angular.isFunction(a)||angular.isArray(a)?c.push(d.when(b.invoke(a))):angular.isString(a)&&c.push(d.when(b.get(a)))}),c}var j={};return j.open=function(b){var e=d.defer(),j=d.defer(),k=d.defer(),l={result:e.promise,opened:j.promise,rendered:k.promise,close:function(a){return g.close(l,a)},dismiss:function(a){return g.dismiss(l,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error(\"One of template or templateUrl options is required.\");var m=d.all([h(b)].concat(i(b.resolve)));return m.then(function(a){var d=(b.scope||c).$new();d.$close=l.close,d.$dismiss=l.dismiss,d.$on(\"$destroy\",function(){d.$$uibDestructionScheduled||d.$dismiss(\"$uibUnscheduledDestruction\")});var h,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=l,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),h=f(b.controller,i),b.controllerAs&&(b.bindToController&&angular.extend(h,d),d[b.controllerAs]=h)),g.open(l,{scope:d,deferred:e,renderDeferred:k,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size,openedClass:b.openedClass})},function(a){e.reject(a)}),m.then(function(){j.resolve(!0)},function(a){j.reject(a)}),l},j}]};return a}),angular.module(\"ui.bootstrap.pagination\",[]).controller(\"PaginationController\",[\"$scope\",\"$attrs\",\"$parse\",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch(\"totalItems\",function(){a.totalPages=d.calculateTotalPages()}),a.$watch(\"totalPages\",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){c&&c.preventDefault();var d=!a.ngDisabled||!c;d&&a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+\"Text\"]||d.config[b+\"Text\"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant(\"paginationConfig\",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:\"First\",previousText:\"Previous\",nextText:\"Next\",lastText:\"Last\",rotate:!0}).directive(\"pagination\",[\"$parse\",\"paginationConfig\",function(a,b){return{restrict:\"EA\",scope:{totalItems:\"=\",firstText:\"@\",previousText:\"@\",nextText:\"@\",lastText:\"@\",ngDisabled:\"=\"},require:[\"pagination\",\"?ngModel\"],controller:\"PaginationController\",controllerAs:\"pagination\",templateUrl:function(a,b){return b.templateUrl||\"template/pagination/pagination.html\"},replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,\"...\",!1);c.unshift(j)}if(b>e){var m=g(e+1,\"...\",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant(\"pagerConfig\",{itemsPerPage:10,previousText:\"« Previous\",nextText:\"Next »\",align:!0}).directive(\"pager\",[\"pagerConfig\",function(a){return{restrict:\"EA\",scope:{totalItems:\"=\",previousText:\"@\",nextText:\"@\"},require:[\"pager\",\"?ngModel\"],controller:\"PaginationController\",templateUrl:\"template/pagination/pager.html\",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module(\"ui.bootstrap.tooltip\",[\"ui.bootstrap.position\",\"ui.bootstrap.bindHtml\"]).provider(\"$tooltip\",function(){function a(a){var b=/[A-Z]/g,c=\"-\";return a.replace(b,function(a,b){return(b?c:\"\")+a.toLowerCase()})}var b={placement:\"top\",animation:!0,popupDelay:0,useContentExp:!1},c={mouseenter:\"mouseleave\",click:\"click\",focus:\"blur\"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=[\"$window\",\"$compile\",\"$timeout\",\"$document\",\"$position\",\"$interpolate\",\"$rootScope\",function(e,f,g,h,i,j,k){return function(e,l,m,n){function o(a){var b=(a||n.trigger||m).split(\" \"),d=b.map(function(a){return c[a]||a});return{show:b,hide:d}}n=angular.extend({},b,d,n);var p=a(e),q=j.startSymbol(),r=j.endSymbol(),s=\"
    ';return{restrict:\"EA\",compile:function(){var a=f(s);return function(b,c,d){function f(){F.isOpen?m():j()}function j(){(!E||b.$eval(d[l+\"Enable\"]))&&(t(),F.popupDelay?B||(B=g(p,F.popupDelay,!1),B.then(function(a){a()})):p()())}function m(){q(),k.$$phase||k.$digest()}function p(){return B=null,A&&(g.cancel(A),A=null),(n.useContentExp?F.contentExp():F.content)?(r(),y.css({top:0,left:0,display:\"block\"}),H(),F.isOpen=!0,F.$apply(),H):angular.noop}function q(){F.isOpen=!1,g.cancel(B),B=null,F.animation?A||(A=g(s,500)):s()}function r(){y&&s(),z=F.$new(),y=a(z,function(a){C?h.find(\"body\").append(a):c.after(a)}),n.useContentExp&&(z.$watch(\"contentExp()\",function(a){!a&&F.isOpen&&q()}),z.$watch(function(){G||(G=!0,z.$$postDigest(function(){G=!1,I()}))}))}function s(){A=null,y&&(y.remove(),y=null),z&&(z.$destroy(),z=null)}function t(){u(),v(),w()}function u(){F.popupClass=d[l+\"Class\"]}function v(){var a=d[l+\"Placement\"];F.placement=angular.isDefined(a)?a:n.placement}function w(){var a=d[l+\"PopupDelay\"],b=parseInt(a,10);F.popupDelay=isNaN(b)?n.popupDelay:b}function x(){var a=d[l+\"Trigger\"];J(),D=o(a),D.show.forEach(function(a,b){a===D.hide[b]?c.bind(a,f):a&&(c.bind(a,j),c.bind(D.hide[b],m))})}var y,z,A,B,C=angular.isDefined(n.appendToBody)?n.appendToBody:!1,D=o(void 0),E=angular.isDefined(d[l+\"Enable\"]),F=b.$new(!0),G=!1,H=function(){if(y){var a=i.positionElements(c,y,F.placement,C);a.top+=\"px\",a.left+=\"px\",y.css(a)}},I=function(){g(H,0,!1)};F.origScope=b,F.isOpen=!1,F.contentExp=function(){return b.$eval(d[e])},n.useContentExp||d.$observe(e,function(a){F.content=a,!a&&F.isOpen?q():I()}),d.$observe(\"disabled\",function(a){B&&a&&g.cancel(B),a&&F.isOpen&&q()}),d.$observe(l+\"Title\",function(a){F.title=a,I()}),d.$observe(l+\"Placement\",function(){F.isOpen&&g(function(){v(),p()()},0,!1)});var J=function(){D.show.forEach(function(a){c.unbind(a,j)}),D.hide.forEach(function(a){c.unbind(a,m)})};x();var K=b.$eval(d[l+\"Animation\"]);F.animation=angular.isDefined(K)?!!K:n.animation;var L=b.$eval(d[l+\"AppendToBody\"]);C=angular.isDefined(L)?L:C,C&&b.$on(\"$locationChangeSuccess\",function(){F.isOpen&&q()}),b.$on(\"$destroy\",function(){g.cancel(A),g.cancel(B),J(),s(),F=null})}}}}}]}).directive(\"tooltipTemplateTransclude\",[\"$animate\",\"$sce\",\"$compile\",\"$templateRequest\",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit(\"$includeContentLoaded\",b)}},function(){g===l&&(m(),e.$emit(\"$includeContentError\",b))}),e.$emit(\"$includeContentRequested\",b)):m()}),e.$on(\"$destroy\",m)}}}]).directive(\"tooltipClasses\",function(){return{restrict:\"A\",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive(\"tooltipPopup\",function(){return{restrict:\"EA\",replace:!0,scope:{content:\"@\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\"},templateUrl:\"template/tooltip/tooltip-popup.html\"}}).directive(\"tooltip\",[\"$tooltip\",function(a){return a(\"tooltip\",\"tooltip\",\"mouseenter\")}]).directive(\"tooltipTemplatePopup\",function(){return{restrict:\"EA\",replace:!0,scope:{contentExp:\"&\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\",originScope:\"&\"},templateUrl:\"template/tooltip/tooltip-template-popup.html\"}}).directive(\"tooltipTemplate\",[\"$tooltip\",function(a){return a(\"tooltipTemplate\",\"tooltip\",\"mouseenter\",{useContentExp:!0})}]).directive(\"tooltipHtmlPopup\",function(){return{restrict:\"EA\",replace:!0,scope:{contentExp:\"&\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\"},templateUrl:\"template/tooltip/tooltip-html-popup.html\"}}).directive(\"tooltipHtml\",[\"$tooltip\",function(a){return a(\"tooltipHtml\",\"tooltip\",\"mouseenter\",{useContentExp:!0})}]).directive(\"tooltipHtmlUnsafePopup\",function(){return{restrict:\"EA\",replace:!0,scope:{content:\"@\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\"},templateUrl:\"template/tooltip/tooltip-html-unsafe-popup.html\"}}).value(\"tooltipHtmlUnsafeSuppressDeprecated\",!1).directive(\"tooltipHtmlUnsafe\",[\"$tooltip\",\"tooltipHtmlUnsafeSuppressDeprecated\",\"$log\",function(a,b,c){return b||c.warn(\"tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead.\"),a(\"tooltipHtmlUnsafe\",\"tooltip\",\"mouseenter\")}]),angular.module(\"ui.bootstrap.popover\",[\"ui.bootstrap.tooltip\"]).directive(\"popoverTemplatePopup\",function(){return{restrict:\"EA\",replace:!0,scope:{title:\"@\",contentExp:\"&\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\",originScope:\"&\"},templateUrl:\"template/popover/popover-template.html\"}}).directive(\"popoverTemplate\",[\"$tooltip\",function(a){return a(\"popoverTemplate\",\"popover\",\"click\",{useContentExp:!0})}]).directive(\"popoverHtmlPopup\",function(){return{restrict:\"EA\",replace:!0,scope:{contentExp:\"&\",title:\"@\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\"},templateUrl:\"template/popover/popover-html.html\"}}).directive(\"popoverHtml\",[\"$tooltip\",function(a){return a(\"popoverHtml\",\"popover\",\"click\",{useContentExp:!0})}]).directive(\"popoverPopup\",function(){return{restrict:\"EA\",replace:!0,scope:{title:\"@\",content:\"@\",placement:\"@\",popupClass:\"@\",animation:\"&\",isOpen:\"&\"},templateUrl:\"template/popover/popover.html\"}}).directive(\"popover\",[\"$tooltip\",function(a){return a(\"popover\",\"popover\",\"click\")}]),angular.module(\"ui.bootstrap.progressbar\",[]).constant(\"progressConfig\",{animate:!0,max:100}).controller(\"ProgressController\",[\"$scope\",\"$attrs\",\"progressConfig\",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c){e||c.css({transition:\"none\"}),this.bars.push(b),b.max=a.max,b.$watch(\"value\",function(){b.recalculatePercentage()}),b.recalculatePercentage=function(){b.percent=+(100*b.value/b.max).toFixed(2);var a=0;d.bars.forEach(function(b){a+=b.percent}),a>100&&(b.percent-=a-100)},b.$on(\"$destroy\",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)},a.$watch(\"max\",function(){d.bars.forEach(function(b){b.max=a.max,b.recalculatePercentage()})})}]).directive(\"progress\",function(){return{restrict:\"EA\",replace:!0,transclude:!0,controller:\"ProgressController\",require:\"progress\",scope:{max:\"=?\"},templateUrl:\"template/progressbar/progress.html\"}}).directive(\"bar\",function(){return{restrict:\"EA\",replace:!0,transclude:!0,require:\"^progress\",scope:{value:\"=\",type:\"@\"},templateUrl:\"template/progressbar/bar.html\",link:function(a,b,c,d){d.addBar(a,b)}}}).directive(\"progressbar\",function(){return{restrict:\"EA\",replace:!0,transclude:!0,controller:\"ProgressController\",scope:{value:\"=\",max:\"=?\",type:\"@\"},templateUrl:\"template/progressbar/progressbar.html\",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module(\"ui.bootstrap.rating\",[]).constant(\"ratingConfig\",{max:5,stateOn:null,stateOff:null,titles:[\"one\",\"two\",\"three\",\"four\",\"five\"]}).controller(\"RatingController\",[\"$scope\",\"$attrs\",\"ratingConfig\",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.titles)?a.$parent.$eval(b.titles):c.titles;this.titles=angular.isArray(f)&&f.length>0?f:c.titles;var g=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(g)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff,title:this.getTitle(b)},a[b]);return a},this.getTitle=function(a){return a>=this.titles.length?a+1:this.titles[a]},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(d.$viewValue===b?0:b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive(\"rating\",function(){return{restrict:\"EA\",require:[\"rating\",\"ngModel\"],scope:{readonly:\"=?\",onHover:\"&\",onLeave:\"&\"},controller:\"RatingController\",templateUrl:\"template/rating/rating.html\",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module(\"ui.bootstrap.tabs\",[]).controller(\"TabsetController\",[\"$scope\",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on(\"$destroy\",function(){d=!0})}]).directive(\"tabset\",function(){return{restrict:\"EA\",transclude:!0,replace:!0,scope:{type:\"@\"},controller:\"TabsetController\",templateUrl:\"template/tabs/tabset.html\",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive(\"tab\",[\"$parse\",\"$log\",function(a,b){return{require:\"^tabset\",restrict:\"EA\",replace:!0,templateUrl:\"template/tabs/tab.html\",transclude:!0,scope:{active:\"=?\",heading:\"@\",onSelect:\"&select\",onDeselect:\"&deselect\"},controller:function(){},link:function(c,d,e,f,g){c.$watch(\"active\",function(a){a&&f.select(c)}),c.disabled=!1,e.disable&&c.$parent.$watch(a(e.disable),function(a){c.disabled=!!a}),e.disabled&&(b.warn('Use of \"disabled\" attribute has been deprecated, please use \"disable\"'),c.$parent.$watch(a(e.disabled),function(a){c.disabled=!!a})),c.select=function(){c.disabled||(c.active=!0)},f.addTab(c),c.$on(\"$destroy\",function(){f.removeTab(c)}),c.$transcludeFn=g}}}]).directive(\"tabHeadingTransclude\",[function(){return{restrict:\"A\",require:\"^tab\",link:function(a,b){a.$watch(\"headingElement\",function(a){a&&(b.html(\"\"),b.append(a))})}}}]).directive(\"tabContentTransclude\",function(){function a(a){return a.tagName&&(a.hasAttribute(\"tab-heading\")||a.hasAttribute(\"data-tab-heading\")||\"tab-heading\"===a.tagName.toLowerCase()||\"data-tab-heading\"===a.tagName.toLowerCase())}return{restrict:\"A\",require:\"^tabset\",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module(\"ui.bootstrap.timepicker\",[]).constant(\"timepickerConfig\",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0,showSpinners:!0}).controller(\"TimepickerController\",[\"$scope\",\"$attrs\",\"$parse\",\"$log\",\"$locale\",\"timepickerConfig\",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===q[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?\"0\"+a:a.toString()}function j(a){k(),p.$setViewValue(new Date(o)),l(a)}function k(){p.$setValidity(\"time\",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=o.getHours(),d=o.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours=\"h\"===b?c:i(c),\"m\"!==b&&(a.minutes=i(d)),a.meridian=o.getHours()<12?q[0]:q[1]}function m(a,b){var c=new Date(a.getTime()+6e4*b),d=new Date(a);return d.setHours(c.getHours(),c.getMinutes()),d}function n(a){o=m(o,a),j()}var o=new Date,p={$setViewValue:angular.noop},q=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){p=c,p.$render=this.render,p.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g);var i=angular.isDefined(b.arrowkeys)?a.$parent.$eval(b.arrowkeys):f.arrowkeys;i&&this.setupArrowkeyEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var r=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){r=parseInt(a,10)});var s=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){s=parseInt(a,10)});var t;a.$parent.$watch(c(b.min),function(a){var b=new Date(a);t=isNaN(b)?void 0:b});var u;a.$parent.$watch(c(b.max),function(a){var b=new Date(a);u=isNaN(b)?void 0:b}),a.noIncrementHours=function(){var a=m(o,60*r);return a>u||o>a&&t>a},a.noDecrementHours=function(){var a=m(o,60*-r);return t>a||a>o&&a>u},a.noIncrementMinutes=function(){var a=m(o,s);return a>u||o>a&&t>a},a.noDecrementMinutes=function(){var a=m(o,-s);return t>a||a>o&&a>u},a.noToggleMeridian=function(){return o.getHours()<13?m(o,720)>u:m(o,-720)0};b.bind(\"mousewheel wheel\",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind(\"mousewheel wheel\",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind(\"keydown\",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind(\"keydown\",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){p.$setViewValue(null),p.$setValidity(\"time\",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(o.setHours(a),t>o||o>u?d(!0):j(\"h\")):d(!0)},b.bind(\"blur\",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(o.setMinutes(a),t>o||o>u?d(void 0,!0):j(\"m\")):d(void 0,!0)},c.bind(\"blur\",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var b=p.$viewValue;isNaN(b)?(p.$setValidity(\"time\",!1),d.error('Timepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(b&&(o=b),t>o||o>u?(p.$setValidity(\"time\",!1),a.invalidHours=!0,a.invalidMinutes=!0):k(),l())},a.showSpinners=angular.isDefined(b.showSpinners)?a.$parent.$eval(b.showSpinners):f.showSpinners,a.incrementHours=function(){a.noIncrementHours()||n(60*r)},a.decrementHours=function(){a.noDecrementHours()||n(60*-r)},a.incrementMinutes=function(){a.noIncrementMinutes()||n(s)},a.decrementMinutes=function(){a.noDecrementMinutes()||n(-s)},a.toggleMeridian=function(){a.noToggleMeridian()||n(720*(o.getHours()<12?1:-1))}}]).directive(\"timepicker\",function(){return{restrict:\"EA\",require:[\"timepicker\",\"?^ngModel\"],controller:\"TimepickerController\",replace:!0,scope:{},templateUrl:\"template/timepicker/timepicker.html\",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find(\"input\"))}}}),angular.module(\"ui.bootstrap.transition\",[]).value(\"$transitionSuppressDeprecated\",!1).factory(\"$transition\",[\"$q\",\"$timeout\",\"$rootScope\",\"$log\",\"$transitionSuppressDeprecated\",function(a,b,c,d,e){function f(a){for(var b in a)if(void 0!==h.style[b])return a[b]}e||d.warn(\"$transition is now deprecated. Use $animate from ngAnimate instead.\");var g=function(d,e,f){f=f||{};var h=a.defer(),i=g[f.animation?\"animationEndEventName\":\"transitionEndEventName\"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(e)?d.addClass(e):angular.isFunction(e)?e(d):angular.isObject(e)&&d.css(e),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject(\"Transition cancelled\")},h.promise},h=document.createElement(\"trans\"),i={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd\",transition:\"transitionend\"},j={WebkitTransition:\"webkitAnimationEnd\",MozTransition:\"animationend\",OTransition:\"oAnimationEnd\",transition:\"animationend\"};return g.transitionEndEventName=f(i),g.animationEndEventName=f(j),g}]),angular.module(\"ui.bootstrap.typeahead\",[\"ui.bootstrap.position\",\"ui.bootstrap.bindHtml\"]).factory(\"typeaheadParser\",[\"$parse\",function(a){var b=/^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w\\d]*))\\s+in\\s+([\\s\\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of \"_modelValue_ (as _label_)? for _item_ in _collection_\" but got \"'+c+'\".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive(\"typeahead\",[\"$compile\",\"$parse\",\"$q\",\"$timeout\",\"$document\",\"$window\",\"$rootScope\",\"$position\",\"typeaheadParser\",function(a,b,c,d,e,f,g,h,i){var j=[9,13,27,38,40],k=200;return{require:\"ngModel\",link:function(l,m,n,o){function p(){G.moveInProgress||(G.moveInProgress=!0,G.$digest()),N&&d.cancel(N),N=d(function(){G.matches.length&&q(),G.moveInProgress=!1,G.$digest()},k)}function q(){G.position=B?h.offset(m):h.position(m),G.position.top+=m.prop(\"offsetHeight\")}var r=l.$eval(n.typeaheadMinLength);r||0===r||(r=1);var s,t,u=l.$eval(n.typeaheadWaitMs)||0,v=l.$eval(n.typeaheadEditable)!==!1,w=b(n.typeaheadLoading).assign||angular.noop,x=b(n.typeaheadOnSelect),y=angular.isDefined(n.typeaheadSelectOnBlur)?l.$eval(n.typeaheadSelectOnBlur):!1,z=b(n.typeaheadNoResults).assign||angular.noop,A=n.typeaheadInputFormatter?b(n.typeaheadInputFormatter):void 0,B=n.typeaheadAppendToBody?l.$eval(n.typeaheadAppendToBody):!1,C=l.$eval(n.typeaheadFocusFirst)!==!1,D=n.typeaheadSelectOnExact?l.$eval(n.typeaheadSelectOnExact):!1,E=b(n.ngModel).assign,F=i.parse(n.typeahead),G=l.$new();l.$on(\"$destroy\",function(){G.$destroy()});var H=\"typeahead-\"+G.$id+\"-\"+Math.floor(1e4*Math.random());m.attr({\"aria-autocomplete\":\"list\",\"aria-expanded\":!1,\"aria-owns\":H});var I=angular.element(\"
    \");I.attr({id:H,matches:\"matches\",active:\"activeIdx\",select:\"select(activeIdx)\",\"move-in-progress\":\"moveInProgress\",query:\"query\",position:\"position\"}),angular.isDefined(n.typeaheadTemplateUrl)&&I.attr(\"template-url\",n.typeaheadTemplateUrl);var J=function(){G.matches=[],G.activeIdx=-1,m.attr(\"aria-expanded\",!1)},K=function(a){return H+\"-option-\"+a};G.$watch(\"activeIdx\",function(a){0>a?m.removeAttr(\"aria-activedescendant\"):m.attr(\"aria-activedescendant\",K(a))});var L=function(a,b){return G.matches.length>b&&a?a.toUpperCase()===G.matches[b].label.toUpperCase():!1},M=function(a){var b={$viewValue:a};w(l,!0),z(l,!1),c.when(F.source(l,b)).then(function(c){var d=a===o.$viewValue;if(d&&s)if(c&&c.length>0){G.activeIdx=C?0:-1,z(l,!1),G.matches.length=0;for(var e=0;e=r?u>0?(Q(),P(a)):M(a):(w(l,!1),Q(),J()),v?a:a?void o.$setValidity(\"editable\",!1):(o.$setValidity(\"editable\",!0),null)}),o.$formatters.push(function(a){var b,c,d={};return v||o.$setValidity(\"editable\",!0),A?(d.$model=a,A(l,d)):(d[F.itemName]=a,b=F.viewMapper(l,d),d[F.itemName]=void 0,c=F.viewMapper(l,d),b!==c?b:a)}),G.select=function(a){var b,c,e={};t=!0,e[F.itemName]=c=G.matches[a].model,b=F.modelMapper(l,e),E(l,b),o.$setValidity(\"editable\",!0),o.$setValidity(\"parse\",!0),x(l,{$item:c,$model:b,$label:F.viewMapper(l,e)}),J(),d(function(){m[0].focus()},0,!1)},m.bind(\"keydown\",function(a){if(0!==G.matches.length&&-1!==j.indexOf(a.which)){if(-1===G.activeIdx&&(9===a.which||13===a.which))return J(),void G.$digest();a.preventDefault(),40===a.which?(G.activeIdx=(G.activeIdx+1)%G.matches.length,G.$digest()):38===a.which?(G.activeIdx=(G.activeIdx>0?G.activeIdx:G.matches.length)-1,G.$digest()):13===a.which||9===a.which?G.$apply(function(){G.select(G.activeIdx)}):27===a.which&&(a.stopPropagation(),J(),G.$digest())}}),m.bind(\"blur\",function(){y&&G.matches.length&&-1!==G.activeIdx&&!t&&(t=!0,G.$apply(function(){G.select(G.activeIdx)})),s=!1,t=!1});var R=function(a){m[0]!==a.target&&3!==a.which&&0!==G.matches.length&&(J(),g.$$phase||G.$digest())};e.bind(\"click\",R),l.$on(\"$destroy\",function(){e.unbind(\"click\",R),B&&S.remove(),I.remove()});var S=a(I)(G);B?e.find(\"body\").append(S):m.after(S)}}}]).directive(\"typeaheadPopup\",function(){return{restrict:\"EA\",scope:{matches:\"=\",query:\"=\",active:\"=\",position:\"&\",moveInProgress:\"=\",select:\"&\"},replace:!0,templateUrl:\"template/typeahead/typeahead-popup.html\",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive(\"typeaheadMatch\",[\"$templateRequest\",\"$compile\",\"$parse\",function(a,b,c){return{restrict:\"EA\",scope:{index:\"=\",match:\"=\",query:\"=\"},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||\"template/typeahead/typeahead-match.html\";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter(\"typeaheadHighlight\",function(){function a(a){return a.replace(/([.?*+^$[\\]\\\\(){}|-])/g,\"\\\\$1\")}return function(b,c){return c?(\"\"+b).replace(new RegExp(a(c),\"gi\"),\"$&\"):b}}),angular.module(\"template/accordion/accordion-group.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/accordion/accordion-group.html\",'
    \\n
    \\n

    \\n {{heading}}\\n

    \\n
    \\n
    \\n\t
    \\n
    \\n
    \\n')}]),angular.module(\"template/accordion/accordion.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/accordion/accordion.html\",'
    ')}]),angular.module(\"template/alert/alert.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/alert/alert.html\",'
    \\n \\n
    \\n
    \\n')}]),angular.module(\"template/carousel/carousel.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/carousel/carousel.html\",'
    \\n
      1\">\\n
    1. \\n
    \\n
    \\n 1\">\\n 1\">\\n
    \\n')}]),angular.module(\"template/carousel/slide.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/carousel/slide.html\",'
    \\n')}]),angular.module(\"template/datepicker/datepicker.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/datepicker/datepicker.html\",'
    \\n \\n \\n \\n
    ')}]),angular.module(\"template/datepicker/day.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/datepicker/day.html\",'\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    {{::label.abbr}}
    {{ weekNumbers[$index] }}\\n \\n
    \\n')}]),angular.module(\"template/datepicker/month.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/datepicker/month.html\",'\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n')}]),angular.module(\"template/datepicker/popup.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/datepicker/popup.html\",'
      \\n\t
    • \\n\t
    • \\n\t\t\\n\t\t\t\\n\t\t\t\\n\t\t\\n\t\t\\n\t
    • \\n
    \\n')}]),angular.module(\"template/datepicker/year.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/datepicker/year.html\",'\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n')}]),angular.module(\"template/modal/backdrop.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/modal/backdrop.html\",'
    \\n')}]),angular.module(\"template/modal/window.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/modal/window.html\",'
    \\n
    \\n
    \\n')}]),angular.module(\"template/pagination/pager.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/pagination/pager.html\",'')}]),angular.module(\"template/pagination/pagination.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/pagination/pagination.html\",'\\n')}]),angular.module(\"template/tooltip/tooltip-html-popup.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/tooltip/tooltip-html-popup.html\",'
    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/tooltip/tooltip-html-unsafe-popup.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/tooltip/tooltip-html-unsafe-popup.html\",'
    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/tooltip/tooltip-popup.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/tooltip/tooltip-popup.html\",'
    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/tooltip/tooltip-template-popup.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/tooltip/tooltip-template-popup.html\",'
    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/popover/popover-html.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/popover/popover-html.html\",'
    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/popover/popover-template.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/popover/popover-template.html\",'
    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/popover/popover.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/popover/popover.html\",'
    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n
    \\n')}]),angular.module(\"template/progressbar/bar.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/progressbar/bar.html\",'
    \\n')}]),angular.module(\"template/progressbar/progress.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/progressbar/progress.html\",'
    ')}]),angular.module(\"template/progressbar/progressbar.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/progressbar/progressbar.html\",'
    \\n
    \\n
    \\n')}]),angular.module(\"template/rating/rating.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/rating/rating.html\",'\\n ({{ $index < value ? \\'*\\' : \\' \\' }})\\n \\n\\n')}]),angular.module(\"template/tabs/tab.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/tabs/tab.html\",'
  • \\n {{heading}}\\n
  • \\n')}]),angular.module(\"template/tabs/tabset.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/tabs/tabset.html\",'
    \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n')}]),angular.module(\"template/timepicker/timepicker.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/timepicker/timepicker.html\",'\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
       
      \\n \\n :\\n \\n
       
      \\n')}]),angular.module(\"template/typeahead/typeahead-match.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/typeahead/typeahead-match.html\",'\\n')}]),angular.module(\"template/typeahead/typeahead-popup.html\",[]).run([\"$templateCache\",function(a){a.put(\"template/typeahead/typeahead-popup.html\",'
        \\n
      • \\n
        \\n
      • \\n
      \\n')}]),!angular.$$csp()&&angular.element(document).find(\"head\").prepend('');","/**\n * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.\n *\n * @version v3.3.4\n * @homepage https://bttstrp.github.io/bootstrap-switch\n * @author Mattia Larentis (http://larentis.eu)\n * @license Apache-2.0\n */\n\n(function(a,b){if('function'==typeof define&&define.amd)define(['jquery'],b);else if('undefined'!=typeof exports)b(require('jquery'));else{b(a.jquery),a.bootstrapSwitch={exports:{}}.exports}})(this,function(a){'use strict';function c(j,k){if(!(j instanceof k))throw new TypeError('Cannot call a class as a function')}var d=function(j){return j&&j.__esModule?j:{default:j}}(a),e=Object.assign||function(j){for(var l,k=1;k',{class:function(){var o=[];return o.push(l.options.state?'on':'off'),l.options.size&&o.push(l.options.size),l.options.disabled&&o.push('disabled'),l.options.readonly&&o.push('readonly'),l.options.indeterminate&&o.push('indeterminate'),l.options.inverse&&o.push('inverse'),l.$element.attr('id')&&o.push('id-'+l.$element.attr('id')),o.map(l._getClass.bind(l)).concat([l.options.baseClass],l._getClasses(l.options.wrapperClass)).join(' ')}}),this.$container=g('
      ',{class:this._getClass('container')}),this.$on=g('',{html:this.options.onText,class:this._getClass('handle-on')+' '+this._getClass(this.options.onColor)}),this.$off=g('',{html:this.options.offText,class:this._getClass('handle-off')+' '+this._getClass(this.options.offColor)}),this.$label=g('',{html:this.options.labelText,class:this._getClass('label')}),this.$element.on('init.bootstrapSwitch',this.options.onInit.bind(this,k)),this.$element.on('switchChange.bootstrapSwitch',function(){for(var n=arguments.length,o=Array(n),p=0;p-(l._handleWidth/2);l._dragEnd=!1,l.state(l.options.inverse?!p:p)}else l.state(!l.options.state);l._dragStart=!1}},'mouseleave.bootstrapSwitch':function(){l.$label.trigger('mouseup.bootstrapSwitch')}})}},{key:'_externalLabelHandler',value:function(){var l=this,m=this.$element.closest('label');m.on('click',function(n){n.preventDefault(),n.stopImmediatePropagation(),n.target===m[0]&&l.toggleState()})}},{key:'_formHandler',value:function(){var l=this.$element.closest('form');l.data('bootstrap-switch')||l.on('reset.bootstrapSwitch',function(){window.setTimeout(function(){l.find('input').filter(function(){return g(this).data('bootstrap-switch')}).each(function(){return g(this).bootstrapSwitch('state',this.checked)})},1)}).data('bootstrap-switch',!0)}},{key:'_getClass',value:function(l){return this.options.baseClass+'-'+l}},{key:'_getClasses',value:function(l){return g.isArray(l)?l.map(this._getClass.bind(this)):[this._getClass(l)]}}]),j}();g.fn.bootstrapSwitch=function(j){for(var l=arguments.length,m=Array(1\":void 0},switchWrapper:function(a){return a||\"wrapper\"},switchInverse:i,switchReadonly:i},c=b[a]||k;return c(e[a])},m=function(a,b,c){if(g){var d=l(c);a.bootstrapSwitch(b,d)}},n=function(){m(d,\"disabled\",\"switchActive\")},o=function(){if(!g){var a=f.$modelValue===h();g=!g,d.bootstrapSwitch({radioAllOff:l(\"switchRadioOff\"),disabled:l(\"switchActive\"),state:a,onText:l(\"switchOnText\"),offText:l(\"switchOffText\"),onColor:l(\"switchOnColor\"),offColor:l(\"switchOffColor\"),animate:l(\"switchAnimate\"),size:l(\"switchSize\"),labelText:l(e.switchLabel?\"switchLabel\":\"switchIcon\"),wrapperClass:l(\"switchWrapper\"),handleWidth:l(\"switchHandleWidth\"),labelWidth:l(\"switchLabelWidth\"),inverse:l(\"switchInverse\"),readonly:l(\"switchReadonly\")}),f.$setViewValue(\"radio\"===e.type?f.$modelValue:a)}},p=function(){function a(){return f.$modelValue}e.$observe(\"switchActive\",function(a){var c=j(a);c?n(c):b(function(){n(c)})}),c.$watch(a,function(a){o(),void 0!==a?d.bootstrapSwitch(\"state\",a===h(),!1):d.bootstrapSwitch(\"toggleIndeterminate\",!0,!1)},!0);var g={switchRadioOff:\"radioAllOff\",switchOnText:\"onText\",switchOffText:\"offText\",switchOnColor:\"onColor\",switchOffColor:\"offColor\",switchAnimate:\"animate\",switchSize:\"size\",switchLabel:\"labelText\",switchIcon:\"labelText\",switchWrapper:\"wrapperClass\",switchHandleWidth:\"handleWidth\",switchLabelWidth:\"labelWidth\",switchInverse:\"inverse\",switchReadonly:\"readonly\"},i=function(a,b){return function(){e.$observe(a,function(){m(d,b[a],a)})}};for(var k in g)e.$observe(k,i(k,g))},q=function(){\"radio\"===e.type?d.on(\"change.bootstrapSwitch\",function(a){f.$modelValue===f.$viewValue&&a.target.checked!==$(a.target).bootstrapSwitch(\"state\")&&(a.target.checked?f.$setViewValue(h()):h()===f.$viewValue&&f.$setViewValue(void 0))}):d.on(\"switchChange.bootstrapSwitch\",function(a){f.$setViewValue(a.target.checked)})};q(),p(),c.$on(\"$destroy\",function(){d.bootstrapSwitch(\"destroy\")})}}}]).directive(\"bsSwitch\",function(){return{restrict:\"E\",require:\"ngModel\",template:\"\",replace:!0}})}();","/*\n jQuery UI Sortable plugin wrapper\n\n @param [ui-sortable] {object} Options to pass to $.fn.sortable() merged onto ui.config\n */\nangular\n .module('ui.sortable', [])\n .value('uiSortableConfig', {\n // the default for jquery-ui sortable is \"> *\", we need to restrict this to\n // ng-repeat items\n // if the user uses\n items: '> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]'\n })\n .directive('uiSortable', [\n 'uiSortableConfig',\n '$timeout',\n '$log',\n function(uiSortableConfig, $timeout, $log) {\n return {\n require: '?ngModel',\n scope: {\n ngModel: '=',\n uiSortable: '=',\n ////Expression bindings from html.\n create: '&uiSortableCreate',\n // helper:'&uiSortableHelper',\n start: '&uiSortableStart',\n activate: '&uiSortableActivate',\n // sort:'&uiSortableSort',\n // change:'&uiSortableChange',\n // over:'&uiSortableOver',\n // out:'&uiSortableOut',\n beforeStop: '&uiSortableBeforeStop',\n update: '&uiSortableUpdate',\n remove: '&uiSortableRemove',\n receive: '&uiSortableReceive',\n deactivate: '&uiSortableDeactivate',\n stop: '&uiSortableStop'\n },\n link: function(scope, element, attrs, ngModel) {\n var savedNodes;\n var helper;\n\n function combineCallbacks(first, second) {\n var firstIsFunc = typeof first === 'function';\n var secondIsFunc = typeof second === 'function';\n if (firstIsFunc && secondIsFunc) {\n return function() {\n first.apply(this, arguments);\n second.apply(this, arguments);\n };\n } else if (secondIsFunc) {\n return second;\n }\n return first;\n }\n\n function getSortableWidgetInstance(element) {\n // this is a fix to support jquery-ui prior to v1.11.x\n // otherwise we should be using `element.sortable('instance')`\n var data = element.data('ui-sortable');\n if (\n data &&\n typeof data === 'object' &&\n data.widgetFullName === 'ui-sortable'\n ) {\n return data;\n }\n return null;\n }\n\n function setItemChildrenWidth(item) {\n item.children().each(function() {\n var $el = angular.element(this);\n\n // Preserve the with of the element\n $el.width($el.width());\n });\n }\n\n function dummyHelper(e, item) {\n return item;\n }\n\n function patchSortableOption(key, value) {\n if (callbacks[key]) {\n if (key === 'stop') {\n // call apply after stop\n value = combineCallbacks(value, function() {\n scope.$apply();\n });\n\n value = combineCallbacks(value, afterStop);\n }\n // wrap the callback\n value = combineCallbacks(callbacks[key], value);\n } else if (wrappers[key]) {\n value = wrappers[key](value);\n }\n\n // patch the options that need to have values set\n if (!value && (key === 'items' || key === 'ui-model-items')) {\n value = uiSortableConfig.items;\n }\n\n return value;\n }\n\n function patchUISortableOptions(\n newOpts,\n oldOpts,\n sortableWidgetInstance\n ) {\n function addDummyOptionKey(value, key) {\n if (!(key in opts)) {\n // add the key in the opts object so that\n // the patch function detects and handles it\n opts[key] = null;\n }\n }\n // for this directive to work we have to attach some callbacks\n angular.forEach(callbacks, addDummyOptionKey);\n\n // only initialize it in case we have to\n // update some options of the sortable\n var optsDiff = null;\n\n if (oldOpts) {\n // reset deleted options to default\n var defaultOptions;\n angular.forEach(oldOpts, function(oldValue, key) {\n if (!newOpts || !(key in newOpts)) {\n if (key in directiveOpts) {\n if (key === 'ui-floating') {\n opts[key] = 'auto';\n } else {\n opts[key] = patchSortableOption(key, undefined);\n }\n return;\n }\n\n if (!defaultOptions) {\n defaultOptions = angular.element.ui.sortable().options;\n }\n var defaultValue = defaultOptions[key];\n defaultValue = patchSortableOption(key, defaultValue);\n\n if (!optsDiff) {\n optsDiff = {};\n }\n optsDiff[key] = defaultValue;\n opts[key] = defaultValue;\n }\n });\n }\n\n newOpts = angular.extend({}, newOpts);\n // update changed options\n // handle the custom option of the directive first\n angular.forEach(newOpts, function(value, key) {\n if (key in directiveOpts) {\n if (\n key === 'ui-floating' &&\n (value === false || value === true) &&\n sortableWidgetInstance\n ) {\n sortableWidgetInstance.floating = value;\n }\n\n if (\n key === 'ui-preserve-size' &&\n (value === false || value === true)\n ) {\n var userProvidedHelper = opts.helper;\n newOpts.helper = function(e, item) {\n if (opts['ui-preserve-size'] === true) {\n setItemChildrenWidth(item);\n }\n return (userProvidedHelper || dummyHelper).apply(\n this,\n arguments\n );\n };\n }\n\n opts[key] = patchSortableOption(key, value);\n }\n });\n\n // handle the normal option of the directive\n angular.forEach(newOpts, function(value, key) {\n if (key in directiveOpts) {\n // the custom option of the directive are already handled\n return;\n }\n\n value = patchSortableOption(key, value);\n\n if (!optsDiff) {\n optsDiff = {};\n }\n optsDiff[key] = value;\n opts[key] = value;\n });\n\n return optsDiff;\n }\n\n function getPlaceholderElement(element) {\n var placeholder = element.sortable('option', 'placeholder');\n\n // placeholder.element will be a function if the placeholder, has\n // been created (placeholder will be an object). If it hasn't\n // been created, either placeholder will be false if no\n // placeholder class was given or placeholder.element will be\n // undefined if a class was given (placeholder will be a string)\n if (\n placeholder &&\n placeholder.element &&\n typeof placeholder.element === 'function'\n ) {\n var result = placeholder.element();\n // workaround for jquery ui 1.9.x,\n // not returning jquery collection\n result = angular.element(result);\n return result;\n }\n return null;\n }\n\n function getPlaceholderExcludesludes(element, placeholder) {\n // exact match with the placeholder's class attribute to handle\n // the case that multiple connected sortables exist and\n // the placeholder option equals the class of sortable items\n var notCssSelector = opts['ui-model-items'].replace(/[^,]*>/g, '');\n var excludes = element.find(\n '[class=\"' +\n placeholder.attr('class') +\n '\"]:not(' +\n notCssSelector +\n ')'\n );\n return excludes;\n }\n\n function hasSortingHelper(element, ui) {\n var helperOption = element.sortable('option', 'helper');\n return (\n helperOption === 'clone' ||\n (typeof helperOption === 'function' &&\n ui.item.sortable.isCustomHelperUsed())\n );\n }\n\n function getSortingHelper(element, ui /*, savedNodes*/) {\n var result = null;\n if (\n hasSortingHelper(element, ui) &&\n element.sortable('option', 'appendTo') === 'parent'\n ) {\n // The .ui-sortable-helper element (that's the default class name)\n result = helper;\n }\n return result;\n }\n\n // thanks jquery-ui\n function isFloating(item) {\n return (\n /left|right/.test(item.css('float')) ||\n /inline|table-cell/.test(item.css('display'))\n );\n }\n\n function getElementContext(elementScopes, element) {\n for (var i = 0; i < elementScopes.length; i++) {\n var c = elementScopes[i];\n if (c.element[0] === element[0]) {\n return c;\n }\n }\n }\n\n function afterStop(e, ui) {\n ui.item.sortable._destroy();\n }\n\n // return the index of ui.item among the items\n // we can't just do ui.item.index() because there it might have siblings\n // which are not items\n function getItemIndex(item) {\n return item\n .parent()\n .find(opts['ui-model-items'])\n .index(item);\n }\n\n var opts = {};\n\n // directive specific options\n var directiveOpts = {\n 'ui-floating': undefined,\n 'ui-model-items': uiSortableConfig.items,\n 'ui-preserve-size': undefined\n };\n\n var callbacks = {\n create: null,\n start: null,\n activate: null,\n // sort: null,\n // change: null,\n // over: null,\n // out: null,\n beforeStop: null,\n update: null,\n remove: null,\n receive: null,\n deactivate: null,\n stop: null\n };\n\n var wrappers = {\n helper: null\n };\n\n angular.extend(\n opts,\n directiveOpts,\n uiSortableConfig,\n scope.uiSortable\n );\n\n if (!angular.element.fn || !angular.element.fn.jquery) {\n $log.error(\n 'ui.sortable: jQuery should be included before AngularJS!'\n );\n return;\n }\n\n function wireUp() {\n // When we add or remove elements, we need the sortable to 'refresh'\n // so it can find the new/removed elements.\n scope.$watchCollection('ngModel', function() {\n // Timeout to let ng-repeat modify the DOM\n $timeout(\n function() {\n // ensure that the jquery-ui-sortable widget instance\n // is still bound to the directive's element\n if (!!getSortableWidgetInstance(element)) {\n element.sortable('refresh');\n }\n },\n 0,\n false\n );\n });\n\n callbacks.start = function(e, ui) {\n if (opts['ui-floating'] === 'auto') {\n // since the drag has started, the element will be\n // absolutely positioned, so we check its siblings\n var siblings = ui.item.siblings();\n var sortableWidgetInstance = getSortableWidgetInstance(\n angular.element(e.target)\n );\n sortableWidgetInstance.floating = isFloating(siblings);\n }\n\n // Save the starting position of dragged item\n var index = getItemIndex(ui.item);\n ui.item.sortable = {\n model: ngModel.$modelValue[index],\n index: index,\n source: element,\n sourceList: ui.item.parent(),\n sourceModel: ngModel.$modelValue,\n cancel: function() {\n ui.item.sortable._isCanceled = true;\n },\n isCanceled: function() {\n return ui.item.sortable._isCanceled;\n },\n isCustomHelperUsed: function() {\n return !!ui.item.sortable._isCustomHelperUsed;\n },\n _isCanceled: false,\n _isCustomHelperUsed: ui.item.sortable._isCustomHelperUsed,\n _destroy: function() {\n angular.forEach(ui.item.sortable, function(value, key) {\n ui.item.sortable[key] = undefined;\n });\n },\n _connectedSortables: [],\n _getElementContext: function(element) {\n return getElementContext(this._connectedSortables, element);\n }\n };\n };\n\n callbacks.activate = function(e, ui) {\n var isSourceContext = ui.item.sortable.source === element;\n var savedNodesOrigin = isSourceContext\n ? ui.item.sortable.sourceList\n : element;\n var elementContext = {\n element: element,\n scope: scope,\n isSourceContext: isSourceContext,\n savedNodesOrigin: savedNodesOrigin\n };\n // save the directive's scope so that it is accessible from ui.item.sortable\n ui.item.sortable._connectedSortables.push(elementContext);\n\n // We need to make a copy of the current element's contents so\n // we can restore it after sortable has messed it up.\n // This is inside activate (instead of start) in order to save\n // both lists when dragging between connected lists.\n savedNodes = savedNodesOrigin.contents();\n helper = ui.helper;\n\n // If this list has a placeholder (the connected lists won't),\n // don't inlcude it in saved nodes.\n var placeholder = getPlaceholderElement(element);\n if (placeholder && placeholder.length) {\n var excludes = getPlaceholderExcludesludes(\n element,\n placeholder\n );\n savedNodes = savedNodes.not(excludes);\n }\n };\n\n callbacks.update = function(e, ui) {\n // Save current drop position but only if this is not a second\n // update that happens when moving between lists because then\n // the value will be overwritten with the old value\n if (!ui.item.sortable.received) {\n ui.item.sortable.dropindex = getItemIndex(ui.item);\n var droptarget = ui.item\n .parent()\n .closest(\n '[ui-sortable], [data-ui-sortable], [x-ui-sortable]'\n );\n ui.item.sortable.droptarget = droptarget;\n ui.item.sortable.droptargetList = ui.item.parent();\n\n var droptargetContext = ui.item.sortable._getElementContext(\n droptarget\n );\n ui.item.sortable.droptargetModel =\n droptargetContext.scope.ngModel;\n\n // Cancel the sort (let ng-repeat do the sort for us)\n // Don't cancel if this is the received list because it has\n // already been canceled in the other list, and trying to cancel\n // here will mess up the DOM.\n element.sortable('cancel');\n }\n\n // Put the nodes back exactly the way they started (this is very\n // important because ng-repeat uses comment elements to delineate\n // the start and stop of repeat sections and sortable doesn't\n // respect their order (even if we cancel, the order of the\n // comments are still messed up).\n var sortingHelper =\n !ui.item.sortable.received &&\n getSortingHelper(element, ui, savedNodes);\n if (sortingHelper && sortingHelper.length) {\n // Restore all the savedNodes except from the sorting helper element.\n // That way it will be garbage collected.\n savedNodes = savedNodes.not(sortingHelper);\n }\n var elementContext = ui.item.sortable._getElementContext(element);\n savedNodes.appendTo(elementContext.savedNodesOrigin);\n\n // If this is the target connected list then\n // it's safe to clear the restored nodes since:\n // update is currently running and\n // stop is not called for the target list.\n if (ui.item.sortable.received) {\n savedNodes = null;\n }\n\n // If received is true (an item was dropped in from another list)\n // then we add the new item to this list otherwise wait until the\n // stop event where we will know if it was a sort or item was\n // moved here from another list\n if (ui.item.sortable.received && !ui.item.sortable.isCanceled()) {\n scope.$apply(function() {\n ngModel.$modelValue.splice(\n ui.item.sortable.dropindex,\n 0,\n ui.item.sortable.moved\n );\n });\n scope.$emit('ui-sortable:moved', ui);\n }\n };\n\n callbacks.stop = function(e, ui) {\n // If the received flag hasn't be set on the item, this is a\n // normal sort, if dropindex is set, the item was moved, so move\n // the items in the list.\n var wasMoved =\n 'dropindex' in ui.item.sortable &&\n !ui.item.sortable.isCanceled();\n\n if (wasMoved && !ui.item.sortable.received) {\n scope.$apply(function() {\n ngModel.$modelValue.splice(\n ui.item.sortable.dropindex,\n 0,\n ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0]\n );\n });\n scope.$emit('ui-sortable:moved', ui);\n } else if (\n !wasMoved &&\n !angular.equals(\n element.contents().toArray(),\n savedNodes.toArray()\n )\n ) {\n // if the item was not moved\n // and the DOM element order has changed,\n // then restore the elements\n // so that the ngRepeat's comment are correct.\n\n var sortingHelper = getSortingHelper(element, ui, savedNodes);\n if (sortingHelper && sortingHelper.length) {\n // Restore all the savedNodes except from the sorting helper element.\n // That way it will be garbage collected.\n savedNodes = savedNodes.not(sortingHelper);\n }\n var elementContext = ui.item.sortable._getElementContext(\n element\n );\n savedNodes.appendTo(elementContext.savedNodesOrigin);\n }\n\n // It's now safe to clear the savedNodes and helper\n // since stop is the last callback.\n savedNodes = null;\n helper = null;\n };\n\n callbacks.receive = function(e, ui) {\n // An item was dropped here from another list, set a flag on the\n // item.\n ui.item.sortable.received = true;\n };\n\n callbacks.remove = function(e, ui) {\n // Workaround for a problem observed in nested connected lists.\n // There should be an 'update' event before 'remove' when moving\n // elements. If the event did not fire, cancel sorting.\n if (!('dropindex' in ui.item.sortable)) {\n element.sortable('cancel');\n ui.item.sortable.cancel();\n }\n\n // Remove the item from this list's model and copy data into item,\n // so the next list can retrive it\n if (!ui.item.sortable.isCanceled()) {\n scope.$apply(function() {\n ui.item.sortable.moved = ngModel.$modelValue.splice(\n ui.item.sortable.index,\n 1\n )[0];\n });\n }\n };\n\n // setup attribute handlers\n angular.forEach(callbacks, function(value, key) {\n callbacks[key] = combineCallbacks(callbacks[key], function() {\n var attrHandler = scope[key];\n var attrHandlerFn;\n if (\n typeof attrHandler === 'function' &&\n (\n 'uiSortable' +\n key.substring(0, 1).toUpperCase() +\n key.substring(1)\n ).length &&\n typeof (attrHandlerFn = attrHandler()) === 'function'\n ) {\n attrHandlerFn.apply(this, arguments);\n }\n });\n });\n\n wrappers.helper = function(inner) {\n if (inner && typeof inner === 'function') {\n return function(e, item) {\n var oldItemSortable = item.sortable;\n var index = getItemIndex(item);\n\n item.sortable = {\n model: ngModel.$modelValue[index],\n index: index,\n source: element,\n sourceList: item.parent(),\n sourceModel: ngModel.$modelValue,\n _restore: function() {\n angular.forEach(item.sortable, function(value, key) {\n item.sortable[key] = undefined;\n });\n\n item.sortable = oldItemSortable;\n }\n };\n\n var innerResult = inner.apply(this, arguments);\n item.sortable._restore();\n item.sortable._isCustomHelperUsed = item !== innerResult;\n return innerResult;\n };\n }\n return inner;\n };\n\n scope.$watchCollection(\n 'uiSortable',\n function(newOpts, oldOpts) {\n // ensure that the jquery-ui-sortable widget instance\n // is still bound to the directive's element\n var sortableWidgetInstance = getSortableWidgetInstance(element);\n if (!!sortableWidgetInstance) {\n var optsDiff = patchUISortableOptions(\n newOpts,\n oldOpts,\n sortableWidgetInstance\n );\n\n if (optsDiff) {\n element.sortable('option', optsDiff);\n }\n }\n },\n true\n );\n\n patchUISortableOptions(opts);\n }\n\n function init() {\n if (ngModel) {\n wireUp();\n } else {\n $log.info('ui.sortable: ngModel not provided!', element);\n }\n\n // Create sortable\n element.sortable(opts);\n }\n\n function initIfEnabled() {\n if (scope.uiSortable && scope.uiSortable.disabled) {\n return false;\n }\n\n init();\n\n // Stop Watcher\n initIfEnabled.cancelWatcher();\n initIfEnabled.cancelWatcher = angular.noop;\n\n return true;\n }\n\n initIfEnabled.cancelWatcher = angular.noop;\n\n if (!initIfEnabled()) {\n initIfEnabled.cancelWatcher = scope.$watch(\n 'uiSortable.disabled',\n initIfEnabled\n );\n }\n }\n };\n }\n ]);\n","/*\n * The MIT License\n *\n * Copyright (c) 2015, Sebastian Sdorra\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\nangular.module('adf', ['adf.provider', 'ui.bootstrap'])\n .value('adfTemplatePath', '../src/templates/')\n .value('rowTemplate', '')\n .value('columnTemplate', '')\n .value('adfVersion', '<>');\n","/*\n* The MIT License\n*\n* Copyright (c) 2015, Sebastian Sdorra\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in\n* all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\n\n/* global angular */\nangular.module('adf')\n .directive('adfDashboardColumn', function ($log, $compile, adfTemplatePath, rowTemplate, dashboard) {\n 'use strict';\n\n /**\n * moves a widget in between a column\n */\n function moveWidgetInColumn($scope, column, evt){\n var widgets = column.widgets;\n // move widget and apply to scope\n $scope.$apply(function(){\n widgets.splice(evt.newIndex, 0, widgets.splice(evt.oldIndex, 1)[0]);\n });\n }\n\n /**\n * finds a widget by its id in the column\n */\n function findWidget(column, index){\n var widget = null;\n for (var i=0; i 0 ){\n var w = source.widgets.shift();\n while (w){\n target.widgets.push(w);\n w = source.widgets.shift();\n }\n }\n }\n\n /**\n * Copy widget from old columns to the new model\n * @param object root the model\n * @param array of columns\n * @param counter\n */\n function fillStructure(root, columns, counter) {\n counter = counter || 0;\n\n if (angular.isDefined(root.rows)) {\n angular.forEach(root.rows, function (row) {\n angular.forEach(row.columns, function (column) {\n // if the widgets prop doesn't exist, create a new array for it.\n // this allows ui.sortable to do it's thing without error\n if (!column.widgets) {\n column.widgets = [];\n }\n\n // if a column exist at the counter index, copy over the column\n if (angular.isDefined(columns[counter])) {\n // do not add widgets to a column, which uses nested rows\n if (!angular.isDefined(column.rows)){\n copyWidgets(columns[counter], column);\n counter++;\n }\n }\n\n // run fillStructure again for any sub rows/columns\n counter = fillStructure(column, columns, counter);\n });\n });\n }\n return counter;\n }\n\n /**\n * Read Columns: recursively searches an object for the 'columns' property\n * @param object model\n * @param array an array of existing columns; used when recursion happens\n */\n function readColumns(root, columns) {\n columns = columns || [];\n\n if (angular.isDefined(root.rows)) {\n angular.forEach(root.rows, function (row) {\n angular.forEach(row.columns, function (col) {\n columns.push(col);\n // keep reading columns until we can't any more\n readColumns(col, columns);\n });\n });\n }\n\n return columns;\n }\n\n function changeStructure(model, structure){\n var columns = readColumns(model);\n var counter = 0;\n\n model.rows = angular.copy(structure.rows);\n\n while ( counter < columns.length ){\n counter = fillStructure(model, columns, counter);\n }\n }\n\n function createConfiguration(type){\n var cfg = {};\n var config = dashboard.widgets[type].config;\n if (config){\n cfg = angular.copy(config);\n }\n return cfg;\n }\n\n /**\n * Find first widget column in model.\n *\n * @param dashboard model\n */\n function findFirstWidgetColumn(model){\n var column = null;\n if (!angular.isArray(model.rows)){\n $log.error('model does not have any rows');\n return null;\n }\n for (var i=0; i=}` - An optional map of dependencies which should\n * be injected into the controller. If any of these dependencies are promises, the widget\n * will wait for them all to be resolved or one to be rejected before the controller is\n * instantiated.\n * If all the promises are resolved successfully, the values of the resolved promises are\n * injected.\n *\n * The map object is:\n * - `key` – `{string}`: a name of a dependency to be injected into the controller.\n * - `factory` - `{string|function}`: If `string` then it is an alias for a service.\n * Otherwise if function, then it is {@link http://docs.angularjs.org/api/AUTO.$injector#invoke injected}\n * and the return value is treated as the dependency. If the result is a promise, it is\n * resolved before its value is injected into the controller.\n * - `edit` - `{object}` - Edit modus of the widget.\n * - `controller` - `{string=|function()=}` - Same as above, but for the edit mode of the widget.\n * - `controllerAs` - `{string=}` - Same as above, but for the edit mode of the widget.\n * - `template` - `{string=|function()=}` - Same as above, but for the edit mode of the widget.\n * - `templateUrl` - `{string=}` - Same as above, but for the edit mode of the widget.\n * - `resolve` - `{Object.=}` - Same as above, but for the edit mode of the widget.\n * - `reload` - {boolean} - true if the widget should be reloaded, after the edit mode is closed.\n * Default is true.\n *\n * @returns {Object} self\n */\n this.widget = function(name, widget){\n var w = angular.extend({reload: false, frameless: false}, widget);\n if ( w.edit ){\n var edit = {reload: true};\n angular.extend(edit, w.edit);\n w.edit = edit;\n }\n widgets[name] = w;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#widgetsPath\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Sets the path to the directory which contains the widgets. The widgets\n * path is used for widgets with a templateUrl which contains the\n * placeholder {widgetsPath}. The placeholder is replaced with the\n * configured value, before the template is loaded, but the template is\n * cached with the unmodified templateUrl (e.g.: {widgetPath}/src/widgets).\n * The default value of widgetPaths is ''.\n *\n *\n * @param {string} path to the directory which contains the widgets\n *\n * @returns {Object} self\n */\n this.widgetsPath = function(path){\n widgetsPath = path;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#structure\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Registers a new structure.\n *\n * @param {string} name of the structure\n * @param {object} structure to be registered.\n *\n * Object properties:\n *\n * - `rows` - `{Array.}` - Rows of the dashboard structure.\n * - `styleClass` - `{string}` - CSS Class of the row.\n * - `columns` - `{Array.}` - Columns of the row.\n * - `styleClass` - `{string}` - CSS Class of the column.\n *\n * @returns {Object} self\n */\n this.structure = function(name, structure){\n structures[name] = structure;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#messageTemplate\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Changes the template for messages.\n *\n * @param {string} template for messages.\n *\n * @returns {Object} self\n */\n this.messageTemplate = function(template){\n messageTemplate = template;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#loadingTemplate\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Changes the template which is displayed as\n * long as the widget resources are not resolved.\n *\n * @param {string} template loading template\n *\n * @returns {Object} self\n */\n this.loadingTemplate = function(template){\n loadingTemplate = template;\n return this;\n };\n\n /**\n * @ngdoc service\n * @name adf.dashboard\n * @description\n *\n * The dashboard holds all options, structures and widgets.\n *\n * @property {Array.} widgets Array of registered widgets.\n * @property {string} widgetsPath Default path for widgets.\n * @property {Array.} structures Array of registered structures.\n * @property {string} messageTemplate Template for messages.\n * @property {string} loadingTemplate Template for widget loading.\n *\n * @returns {Object} self\n */\n this.$get = function(){\n var cid = 0;\n\n return {\n widgets: widgets,\n widgetsPath: widgetsPath,\n structures: structures,\n messageTemplate: messageTemplate,\n loadingTemplate: loadingTemplate,\n\n /**\n * @ngdoc method\n * @name adf.dashboard#id\n * @methodOf adf.dashboard\n * @description\n *\n * Creates an ongoing numeric id. The method is used to create ids for\n * columns and widgets in the dashboard.\n */\n id: function(){\n return ++cid;\n }\n };\n };\n\n });\n","/*\n* The MIT License\n*\n* Copyright (c) 2015, Sebastian Sdorra\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in\n* all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\n\n/* global angular */\nangular.module('adf')\n .directive('adfDashboardRow', function ($compile, adfTemplatePath, columnTemplate) {\n 'use strict';\n\n return {\n restrict: 'E',\n replace: true,\n scope: {\n row: '=',\n adfModel: '=',\n editMode: '=',\n options: '='\n },\n templateUrl: adfTemplatePath + 'dashboard-row.html',\n link: function($scope, $element) {\n if (angular.isDefined($scope.row.columns) && angular.isArray($scope.row.columns)) {\n $compile(columnTemplate)($scope, function(cloned) {\n $element.append(cloned);\n });\n }\n }\n };\n });\n","/*\n * The MIT License\n *\n * Copyright (c) 2015, Sebastian Sdorra\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\nangular.module('adf')\n .directive('adfWidgetContent', function($log, $q, $sce, $http, $templateCache,\n $compile, $controller, $injector, dashboard) {\n\n function parseUrl(url) {\n var parsedUrl = url;\n if (url.indexOf('{widgetsPath}') >= 0) {\n parsedUrl = url.replace('{widgetsPath}', dashboard.widgetsPath)\n .replace('//', '/');\n if (parsedUrl.indexOf('/') === 0) {\n parsedUrl = parsedUrl.substring(1);\n }\n }\n return parsedUrl;\n }\n\n function getTemplate(widget) {\n var deferred = $q.defer();\n\n if (widget.template) {\n deferred.resolve(widget.template);\n } else if (widget.templateUrl) {\n // try to fetch template from cache\n var tpl = $templateCache.get(widget.templateUrl);\n if (tpl) {\n deferred.resolve(tpl);\n } else {\n var url = $sce.getTrustedResourceUrl(parseUrl(widget.templateUrl));\n $http.get(url)\n .success(function(response) {\n // put response to cache, with unmodified url as key\n $templateCache.put(widget.templateUrl, response);\n deferred.resolve(response);\n })\n .error(function() {\n deferred.reject('could not load template');\n });\n }\n }\n\n return deferred.promise;\n }\n\n function compileWidget($scope, $element, currentScope) {\n var model = $scope.model;\n var content = $scope.content;\n\n // display loading template\n $element.html(dashboard.loadingTemplate);\n\n // create new scope\n var templateScope = $scope.$new();\n\n // pass config object to scope\n if (!model.config) {\n model.config = {};\n }\n\n templateScope.config = model.config;\n\n // local injections\n var base = {\n $scope: templateScope,\n widget: model,\n config: model.config\n };\n\n // get resolve promises from content object\n var resolvers = {};\n resolvers.$tpl = getTemplate(content);\n if (content.resolve) {\n angular.forEach(content.resolve, function(promise, key) {\n if (angular.isString(promise)) {\n resolvers[key] = $injector.get(promise);\n } else {\n resolvers[key] = $injector.invoke(promise, promise, base);\n }\n });\n }\n\n // resolve all resolvers\n $q.all(resolvers).then(function(locals) {\n angular.extend(locals, base);\n\n // compile & render template\n var template = locals.$tpl;\n $element.html(template);\n if (content.controller) {\n var templateCtrl = $controller(content.controller, locals);\n if (content.controllerAs) {\n templateScope[content.controllerAs] = templateCtrl;\n }\n $element.children().data('$ngControllerController', templateCtrl);\n }\n $compile($element.contents())(templateScope);\n }, function(reason) {\n // handle promise rejection\n var msg = 'Could not resolve all promises';\n if (reason) {\n msg += ': ' + reason;\n }\n $log.warn(msg);\n $element.html(dashboard.messageTemplate.replace(/{}/g, msg));\n });\n\n // destroy old scope\n if (currentScope) {\n currentScope.$destroy();\n }\n\n return templateScope;\n }\n\n return {\n replace: true,\n restrict: 'EA',\n transclude: false,\n scope: {\n model: '=',\n content: '='\n },\n link: function($scope, $element) {\n var currentScope = compileWidget($scope, $element, null);\n $scope.$on('widgetConfigChanged', function() {\n currentScope = compileWidget($scope, $element, currentScope);\n });\n $scope.$on('widgetReload', function() {\n currentScope = compileWidget($scope, $element, currentScope);\n });\n }\n };\n\n });\n","/*\n * The MIT License\n *\n * Copyright (c) 2015, Sebastian Sdorra\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n'use strict';\n\nangular.module('adf')\n .directive('adfWidget', function($log, $modal, dashboard, adfTemplatePath) {\n\n function preLink($scope) {\n var definition = $scope.definition;\n if (definition) {\n var w = dashboard.widgets[definition.type];\n if (w) {\n // pass title\n if (!definition.title) {\n definition.title = w.title;\n }\n\n if (!definition.titleTemplateUrl) {\n definition.titleTemplateUrl = adfTemplatePath + 'widget-title.html';\n if (w.titleTemplateUrl) {\n definition.titleTemplateUrl = w.titleTemplateUrl;\n }\n }\n\n if (!definition.titleTemplateUrl) {\n definition.frameless = w.frameless;\n }\n\n // set id for sortable\n if (!definition.wid) {\n definition.wid = dashboard.id();\n }\n\n // pass copy of widget to scope\n $scope.widget = angular.copy(w);\n\n // create config object\n var config = definition.config;\n if (config) {\n if (angular.isString(config)) {\n config = angular.fromJson(config);\n }\n } else {\n config = {};\n }\n\n // pass config to scope\n $scope.config = config;\n\n // collapse exposed $scope.widgetState property\n if (!$scope.widgetState) {\n $scope.widgetState = {};\n $scope.widgetState.isCollapsed = false;\n }\n\n } else {\n $log.warn('could not find widget ' + definition.type);\n }\n } else {\n $log.debug('definition not specified, widget was probably removed');\n }\n }\n\n function postLink($scope, $element) {\n var definition = $scope.definition;\n if (definition) {\n // bind close function\n\n var deleteWidget = function() {\n var column = $scope.col;\n if (column) {\n var index = column.widgets.indexOf(definition);\n if (index >= 0) {\n column.widgets.splice(index, 1);\n }\n }\n $element.remove();\n };\n\n $scope.remove = function() {\n if ($scope.options.enableConfirmDelete) {\n var deleteScope = $scope.$new();\n var deleteTemplateUrl = adfTemplatePath + 'widget-delete.html';\n if (definition.deleteTemplateUrl) {\n deleteTemplateUrl = definition.deleteTemplateUrl;\n }\n var opts = {\n scope: deleteScope,\n templateUrl: deleteTemplateUrl,\n backdrop: 'static'\n };\n var instance = $modal.open(opts);\n\n deleteScope.closeDialog = function() {\n instance.close();\n deleteScope.$destroy();\n };\n deleteScope.deleteDialog = function() {\n deleteWidget();\n deleteScope.closeDialog();\n };\n } else {\n deleteWidget();\n }\n };\n\n // bind reload function\n $scope.reload = function() {\n $scope.$broadcast('widgetReload');\n };\n\n // bind edit function\n $scope.edit = function() {\n var editScope = $scope.$new();\n editScope.definition = angular.copy(definition);\n\n var adfEditTemplatePath = adfTemplatePath + 'widget-edit.html';\n if (definition.editTemplateUrl) {\n adfEditTemplatePath = definition.editTemplateUrl;\n }\n\n var opts = {\n scope: editScope,\n templateUrl: adfEditTemplatePath,\n backdrop: 'static'\n };\n\n var instance = $modal.open(opts);\n editScope.closeDialog = function() {\n instance.close();\n editScope.$destroy();\n\n var widget = $scope.widget;\n if (widget.edit && widget.edit.reload) {\n // reload content after edit dialog is closed\n $scope.$broadcast('widgetConfigChanged');\n }\n };\n editScope.saveDialog = function() {\n definition.title = editScope.definition.title;\n angular.extend(definition.config, editScope.definition.config);\n editScope.closeDialog();\n };\n };\n } else {\n $log.debug('widget not found');\n }\n }\n\n return {\n replace: true,\n restrict: 'EA',\n transclude: false,\n templateUrl: adfTemplatePath + 'widget.html',\n scope: {\n definition: '=',\n col: '=column',\n editMode: '=',\n options: '=',\n widgetState: '='\n },\n controller: function($scope) {\n\n $scope.$on('adfDashboardCollapseExapand', function(event, args) {\n $scope.widgetState.isCollapsed = args.collapseExpandStatus;\n });\n\n $scope.openFullScreen = function() {\n var definition = $scope.definition;\n var fullScreenScope = $scope.$new();\n var opts = {\n scope: fullScreenScope,\n templateUrl: adfTemplatePath + 'widget-fullscreen.html',\n size: definition.modalSize || 'lg', // 'sm', 'lg'\n backdrop: 'static',\n windowClass: (definition.fullScreen) ? 'dashboard-modal widget-fullscreen' : 'dashboard-modal'\n };\n\n var instance = $modal.open(opts);\n fullScreenScope.closeDialog = function() {\n instance.close();\n fullScreenScope.$destroy();\n };\n };\n },\n compile: function() {\n\n /**\n * use pre link, because link of widget-content\n * is executed before post link widget\n */\n return {\n pre: preLink,\n post: postLink\n };\n }\n };\n\n });\n","angular.module(\"adf\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"../src/templates/dashboard-column.html\",\"
      \");\n$templateCache.put(\"../src/templates/dashboard-edit.html\",\" \");\n$templateCache.put(\"../src/templates/dashboard-row.html\",\"
      \");\n$templateCache.put(\"../src/templates/dashboard-title.html\",\"

      {{model.title}}

      \");\n$templateCache.put(\"../src/templates/dashboard.html\",\"
      \");\n$templateCache.put(\"../src/templates/widget-add.html\",\" \");\n$templateCache.put(\"../src/templates/widget-delete.html\",\" \");\n$templateCache.put(\"../src/templates/widget-edit.html\",\" \");\n$templateCache.put(\"../src/templates/widget-fullscreen.html\",\" \");\n$templateCache.put(\"../src/templates/widget-title.html\",\"

      {{definition.title}}

      \");\n$templateCache.put(\"../src/templates/widget.html\",\"
      \");}]);","(function(window, undefined) {'use strict';\n/*\n * The MIT License\n *\n * Copyright (c) 2015, Sebastian Sdorra\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nangular.module('adf', ['adf.provider', 'ui.bootstrap'])\n .value('adfTemplatePath', '../src/templates/')\n .value('rowTemplate', '')\n .value('columnTemplate', '')\n .value('adfVersion', '0.11.0-SNAPSHOT');\n\n/*\n* The MIT License\n*\n* Copyright (c) 2015, Sebastian Sdorra\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in\n* all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\n\n/* global angular */\nangular.module('adf')\n .directive('adfDashboardColumn', function ($log, $compile, adfTemplatePath, rowTemplate, dashboard) {\n \n\n /**\n * moves a widget in between a column\n */\n function moveWidgetInColumn($scope, column, evt){\n var widgets = column.widgets;\n // move widget and apply to scope\n $scope.$apply(function(){\n widgets.splice(evt.newIndex, 0, widgets.splice(evt.oldIndex, 1)[0]);\n });\n }\n\n /**\n * finds a widget by its id in the column\n */\n function findWidget(column, index){\n var widget = null;\n for (var i=0; i 0 ){\n var w = source.widgets.shift();\n while (w){\n target.widgets.push(w);\n w = source.widgets.shift();\n }\n }\n }\n\n /**\n * Copy widget from old columns to the new model\n * @param object root the model\n * @param array of columns\n * @param counter\n */\n function fillStructure(root, columns, counter) {\n counter = counter || 0;\n\n if (angular.isDefined(root.rows)) {\n angular.forEach(root.rows, function (row) {\n angular.forEach(row.columns, function (column) {\n // if the widgets prop doesn't exist, create a new array for it.\n // this allows ui.sortable to do it's thing without error\n if (!column.widgets) {\n column.widgets = [];\n }\n\n // if a column exist at the counter index, copy over the column\n if (angular.isDefined(columns[counter])) {\n // do not add widgets to a column, which uses nested rows\n if (!angular.isDefined(column.rows)){\n copyWidgets(columns[counter], column);\n counter++;\n }\n }\n\n // run fillStructure again for any sub rows/columns\n counter = fillStructure(column, columns, counter);\n });\n });\n }\n return counter;\n }\n\n /**\n * Read Columns: recursively searches an object for the 'columns' property\n * @param object model\n * @param array an array of existing columns; used when recursion happens\n */\n function readColumns(root, columns) {\n columns = columns || [];\n\n if (angular.isDefined(root.rows)) {\n angular.forEach(root.rows, function (row) {\n angular.forEach(row.columns, function (col) {\n columns.push(col);\n // keep reading columns until we can't any more\n readColumns(col, columns);\n });\n });\n }\n\n return columns;\n }\n\n function changeStructure(model, structure){\n var columns = readColumns(model);\n var counter = 0;\n\n model.rows = angular.copy(structure.rows);\n\n while ( counter < columns.length ){\n counter = fillStructure(model, columns, counter);\n }\n }\n\n function createConfiguration(type){\n var cfg = {};\n var config = dashboard.widgets[type].config;\n if (config){\n cfg = angular.copy(config);\n }\n return cfg;\n }\n\n /**\n * Find first widget column in model.\n *\n * @param dashboard model\n */\n function findFirstWidgetColumn(model){\n var column = null;\n if (!angular.isArray(model.rows)){\n $log.error('model does not have any rows');\n return null;\n }\n for (var i=0; i=}` - An optional map of dependencies which should\n * be injected into the controller. If any of these dependencies are promises, the widget\n * will wait for them all to be resolved or one to be rejected before the controller is\n * instantiated.\n * If all the promises are resolved successfully, the values of the resolved promises are\n * injected.\n *\n * The map object is:\n * - `key` – `{string}`: a name of a dependency to be injected into the controller.\n * - `factory` - `{string|function}`: If `string` then it is an alias for a service.\n * Otherwise if function, then it is {@link http://docs.angularjs.org/api/AUTO.$injector#invoke injected}\n * and the return value is treated as the dependency. If the result is a promise, it is\n * resolved before its value is injected into the controller.\n * - `edit` - `{object}` - Edit modus of the widget.\n * - `controller` - `{string=|function()=}` - Same as above, but for the edit mode of the widget.\n * - `controllerAs` - `{string=}` - Same as above, but for the edit mode of the widget.\n * - `template` - `{string=|function()=}` - Same as above, but for the edit mode of the widget.\n * - `templateUrl` - `{string=}` - Same as above, but for the edit mode of the widget.\n * - `resolve` - `{Object.=}` - Same as above, but for the edit mode of the widget.\n * - `reload` - {boolean} - true if the widget should be reloaded, after the edit mode is closed.\n * Default is true.\n *\n * @returns {Object} self\n */\n this.widget = function(name, widget){\n var w = angular.extend({reload: false, frameless: false}, widget);\n if ( w.edit ){\n var edit = {reload: true};\n angular.extend(edit, w.edit);\n w.edit = edit;\n }\n widgets[name] = w;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#widgetsPath\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Sets the path to the directory which contains the widgets. The widgets\n * path is used for widgets with a templateUrl which contains the\n * placeholder {widgetsPath}. The placeholder is replaced with the\n * configured value, before the template is loaded, but the template is\n * cached with the unmodified templateUrl (e.g.: {widgetPath}/src/widgets).\n * The default value of widgetPaths is ''.\n *\n *\n * @param {string} path to the directory which contains the widgets\n *\n * @returns {Object} self\n */\n this.widgetsPath = function(path){\n widgetsPath = path;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#structure\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Registers a new structure.\n *\n * @param {string} name of the structure\n * @param {object} structure to be registered.\n *\n * Object properties:\n *\n * - `rows` - `{Array.}` - Rows of the dashboard structure.\n * - `styleClass` - `{string}` - CSS Class of the row.\n * - `columns` - `{Array.}` - Columns of the row.\n * - `styleClass` - `{string}` - CSS Class of the column.\n *\n * @returns {Object} self\n */\n this.structure = function(name, structure){\n structures[name] = structure;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#messageTemplate\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Changes the template for messages.\n *\n * @param {string} template for messages.\n *\n * @returns {Object} self\n */\n this.messageTemplate = function(template){\n messageTemplate = template;\n return this;\n };\n\n /**\n * @ngdoc method\n * @name adf.dashboardProvider#loadingTemplate\n * @methodOf adf.dashboardProvider\n * @description\n *\n * Changes the template which is displayed as\n * long as the widget resources are not resolved.\n *\n * @param {string} template loading template\n *\n * @returns {Object} self\n */\n this.loadingTemplate = function(template){\n loadingTemplate = template;\n return this;\n };\n\n /**\n * @ngdoc service\n * @name adf.dashboard\n * @description\n *\n * The dashboard holds all options, structures and widgets.\n *\n * @property {Array.} widgets Array of registered widgets.\n * @property {string} widgetsPath Default path for widgets.\n * @property {Array.} structures Array of registered structures.\n * @property {string} messageTemplate Template for messages.\n * @property {string} loadingTemplate Template for widget loading.\n *\n * @returns {Object} self\n */\n this.$get = function(){\n var cid = 0;\n\n return {\n widgets: widgets,\n widgetsPath: widgetsPath,\n structures: structures,\n messageTemplate: messageTemplate,\n loadingTemplate: loadingTemplate,\n\n /**\n * @ngdoc method\n * @name adf.dashboard#id\n * @methodOf adf.dashboard\n * @description\n *\n * Creates an ongoing numeric id. The method is used to create ids for\n * columns and widgets in the dashboard.\n */\n id: function(){\n return ++cid;\n }\n };\n };\n\n });\n\n/*\n* The MIT License\n*\n* Copyright (c) 2015, Sebastian Sdorra\n*\n* Permission is hereby granted, free of charge, to any person obtaining a copy\n* of this software and associated documentation files (the \"Software\"), to deal\n* in the Software without restriction, including without limitation the rights\n* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the Software is\n* furnished to do so, subject to the following conditions:\n*\n* The above copyright notice and this permission notice shall be included in\n* all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n* SOFTWARE.\n*/\n\n\n/* global angular */\nangular.module('adf')\n .directive('adfDashboardRow', function ($compile, adfTemplatePath, columnTemplate) {\n \n\n return {\n restrict: 'E',\n replace: true,\n scope: {\n row: '=',\n adfModel: '=',\n editMode: '=',\n options: '='\n },\n templateUrl: adfTemplatePath + 'dashboard-row.html',\n link: function($scope, $element) {\n if (angular.isDefined($scope.row.columns) && angular.isArray($scope.row.columns)) {\n $compile(columnTemplate)($scope, function(cloned) {\n $element.append(cloned);\n });\n }\n }\n };\n });\n\n/*\n * The MIT License\n *\n * Copyright (c) 2015, Sebastian Sdorra\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nangular.module('adf')\n .directive('adfWidgetContent', function($log, $q, $sce, $http, $templateCache,\n $compile, $controller, $injector, dashboard) {\n\n function parseUrl(url) {\n var parsedUrl = url;\n if (url.indexOf('{widgetsPath}') >= 0) {\n parsedUrl = url.replace('{widgetsPath}', dashboard.widgetsPath)\n .replace('//', '/');\n if (parsedUrl.indexOf('/') === 0) {\n parsedUrl = parsedUrl.substring(1);\n }\n }\n return parsedUrl;\n }\n\n function getTemplate(widget) {\n var deferred = $q.defer();\n\n if (widget.template) {\n deferred.resolve(widget.template);\n } else if (widget.templateUrl) {\n // try to fetch template from cache\n var tpl = $templateCache.get(widget.templateUrl);\n if (tpl) {\n deferred.resolve(tpl);\n } else {\n var url = $sce.getTrustedResourceUrl(parseUrl(widget.templateUrl));\n $http.get(url)\n .success(function(response) {\n // put response to cache, with unmodified url as key\n $templateCache.put(widget.templateUrl, response);\n deferred.resolve(response);\n })\n .error(function() {\n deferred.reject('could not load template');\n });\n }\n }\n\n return deferred.promise;\n }\n\n function compileWidget($scope, $element, currentScope) {\n var model = $scope.model;\n var content = $scope.content;\n\n // display loading template\n $element.html(dashboard.loadingTemplate);\n\n // create new scope\n var templateScope = $scope.$new();\n\n // pass config object to scope\n if (!model.config) {\n model.config = {};\n }\n\n templateScope.config = model.config;\n\n // local injections\n var base = {\n $scope: templateScope,\n widget: model,\n config: model.config\n };\n\n // get resolve promises from content object\n var resolvers = {};\n resolvers.$tpl = getTemplate(content);\n if (content.resolve) {\n angular.forEach(content.resolve, function(promise, key) {\n if (angular.isString(promise)) {\n resolvers[key] = $injector.get(promise);\n } else {\n resolvers[key] = $injector.invoke(promise, promise, base);\n }\n });\n }\n\n // resolve all resolvers\n $q.all(resolvers).then(function(locals) {\n angular.extend(locals, base);\n\n // compile & render template\n var template = locals.$tpl;\n $element.html(template);\n if (content.controller) {\n var templateCtrl = $controller(content.controller, locals);\n if (content.controllerAs) {\n templateScope[content.controllerAs] = templateCtrl;\n }\n $element.children().data('$ngControllerController', templateCtrl);\n }\n $compile($element.contents())(templateScope);\n }, function(reason) {\n // handle promise rejection\n var msg = 'Could not resolve all promises';\n if (reason) {\n msg += ': ' + reason;\n }\n $log.warn(msg);\n $element.html(dashboard.messageTemplate.replace(/{}/g, msg));\n });\n\n // destroy old scope\n if (currentScope) {\n currentScope.$destroy();\n }\n\n return templateScope;\n }\n\n return {\n replace: true,\n restrict: 'EA',\n transclude: false,\n scope: {\n model: '=',\n content: '='\n },\n link: function($scope, $element) {\n var currentScope = compileWidget($scope, $element, null);\n $scope.$on('widgetConfigChanged', function() {\n currentScope = compileWidget($scope, $element, currentScope);\n });\n $scope.$on('widgetReload', function() {\n currentScope = compileWidget($scope, $element, currentScope);\n });\n }\n };\n\n });\n\n/*\n * The MIT License\n *\n * Copyright (c) 2015, Sebastian Sdorra\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\n\nangular.module('adf')\n .directive('adfWidget', function($log, $modal, dashboard, adfTemplatePath) {\n\n function preLink($scope) {\n var definition = $scope.definition;\n if (definition) {\n var w = dashboard.widgets[definition.type];\n if (w) {\n // pass title\n if (!definition.title) {\n definition.title = w.title;\n }\n\n if (!definition.titleTemplateUrl) {\n definition.titleTemplateUrl = adfTemplatePath + 'widget-title.html';\n if (w.titleTemplateUrl) {\n definition.titleTemplateUrl = w.titleTemplateUrl;\n }\n }\n\n if (!definition.titleTemplateUrl) {\n definition.frameless = w.frameless;\n }\n\n // set id for sortable\n if (!definition.wid) {\n definition.wid = dashboard.id();\n }\n\n // pass copy of widget to scope\n $scope.widget = angular.copy(w);\n\n // create config object\n var config = definition.config;\n if (config) {\n if (angular.isString(config)) {\n config = angular.fromJson(config);\n }\n } else {\n config = {};\n }\n\n // pass config to scope\n $scope.config = config;\n\n // collapse exposed $scope.widgetState property\n if (!$scope.widgetState) {\n $scope.widgetState = {};\n $scope.widgetState.isCollapsed = false;\n }\n\n } else {\n $log.warn('could not find widget ' + definition.type);\n }\n } else {\n $log.debug('definition not specified, widget was probably removed');\n }\n }\n\n function postLink($scope, $element) {\n var definition = $scope.definition;\n if (definition) {\n // bind close function\n\n var deleteWidget = function() {\n var column = $scope.col;\n if (column) {\n var index = column.widgets.indexOf(definition);\n if (index >= 0) {\n column.widgets.splice(index, 1);\n }\n }\n $element.remove();\n };\n\n $scope.remove = function() {\n if ($scope.options.enableConfirmDelete) {\n var deleteScope = $scope.$new();\n var deleteTemplateUrl = adfTemplatePath + 'widget-delete.html';\n if (definition.deleteTemplateUrl) {\n deleteTemplateUrl = definition.deleteTemplateUrl;\n }\n var opts = {\n scope: deleteScope,\n templateUrl: deleteTemplateUrl,\n backdrop: 'static'\n };\n var instance = $modal.open(opts);\n\n deleteScope.closeDialog = function() {\n instance.close();\n deleteScope.$destroy();\n };\n deleteScope.deleteDialog = function() {\n deleteWidget();\n deleteScope.closeDialog();\n };\n } else {\n deleteWidget();\n }\n };\n\n // bind reload function\n $scope.reload = function() {\n $scope.$broadcast('widgetReload');\n };\n\n // bind edit function\n $scope.edit = function() {\n var editScope = $scope.$new();\n editScope.definition = angular.copy(definition);\n\n var adfEditTemplatePath = adfTemplatePath + 'widget-edit.html';\n if (definition.editTemplateUrl) {\n adfEditTemplatePath = definition.editTemplateUrl;\n }\n\n var opts = {\n scope: editScope,\n templateUrl: adfEditTemplatePath,\n backdrop: 'static'\n };\n\n var instance = $modal.open(opts);\n editScope.closeDialog = function() {\n instance.close();\n editScope.$destroy();\n\n var widget = $scope.widget;\n if (widget.edit && widget.edit.reload) {\n // reload content after edit dialog is closed\n $scope.$broadcast('widgetConfigChanged');\n }\n };\n editScope.saveDialog = function() {\n definition.title = editScope.definition.title;\n angular.extend(definition.config, editScope.definition.config);\n editScope.closeDialog();\n };\n };\n } else {\n $log.debug('widget not found');\n }\n }\n\n return {\n replace: true,\n restrict: 'EA',\n transclude: false,\n templateUrl: adfTemplatePath + 'widget.html',\n scope: {\n definition: '=',\n col: '=column',\n editMode: '=',\n options: '=',\n widgetState: '='\n },\n controller: function($scope) {\n\n $scope.$on('adfDashboardCollapseExapand', function(event, args) {\n $scope.widgetState.isCollapsed = args.collapseExpandStatus;\n });\n\n $scope.openFullScreen = function() {\n var definition = $scope.definition;\n var fullScreenScope = $scope.$new();\n var opts = {\n scope: fullScreenScope,\n templateUrl: adfTemplatePath + 'widget-fullscreen.html',\n size: definition.modalSize || 'lg', // 'sm', 'lg'\n backdrop: 'static',\n windowClass: (definition.fullScreen) ? 'dashboard-modal widget-fullscreen' : 'dashboard-modal'\n };\n\n var instance = $modal.open(opts);\n fullScreenScope.closeDialog = function() {\n instance.close();\n fullScreenScope.$destroy();\n };\n };\n },\n compile: function() {\n\n /**\n * use pre link, because link of widget-content\n * is executed before post link widget\n */\n return {\n pre: preLink,\n post: postLink\n };\n }\n };\n\n });\n\nangular.module(\"adf\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"../src/templates/dashboard-column.html\",\"
      \");\n$templateCache.put(\"../src/templates/dashboard-edit.html\",\" \");\n$templateCache.put(\"../src/templates/dashboard-row.html\",\"
      \");\n$templateCache.put(\"../src/templates/dashboard-title.html\",\"

      {{model.title}}

      \");\n$templateCache.put(\"../src/templates/dashboard.html\",\"
      \");\n$templateCache.put(\"../src/templates/widget-add.html\",\" \");\n$templateCache.put(\"../src/templates/widget-delete.html\",\" \");\n$templateCache.put(\"../src/templates/widget-edit.html\",\" \");\n$templateCache.put(\"../src/templates/widget-fullscreen.html\",\" \");\n$templateCache.put(\"../src/templates/widget-title.html\",\"

      {{definition.title}}

      \");\n$templateCache.put(\"../src/templates/widget.html\",\"
      \");}]);})(window);","/*! jQuery UI - v1.11.4 - 2015-03-13\r\n* http://jqueryui.com\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)})(function(t){function e(e,i){var r,o,u,s=e.nodeName.toLowerCase();return\"area\"===s?(r=e.parentNode,o=r.name,e.href&&o&&\"map\"===r.nodeName.toLowerCase()?(u=t(\"img[usemap='#\"+o+\"']\")[0],!!u&&n(u)):!1):(/^(input|select|textarea|button|object)$/.test(s)?!e.disabled:\"a\"===s?e.href||i:i)&&n(e)}function n(e){return t.expr.filters.visible(e)&&!t(e).parents().addBack().filter(function(){return\"hidden\"===t.css(this,\"visibility\")}).length}t.ui=t.ui||{},t.extend(t.ui,{version:\"1.11.4\",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),t.fn.extend({scrollParent:function(e){var n=this.css(\"position\"),i=\"absolute\"===n,r=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return i&&\"static\"===e.css(\"position\")?!1:r.test(e.css(\"overflow\")+e.css(\"overflow-y\")+e.css(\"overflow-x\"))}).eq(0);return\"fixed\"!==n&&o.length?o:t(this[0].ownerDocument||document)},uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id=\"ui-id-\"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\\d+$/.test(this.id)&&t(this).removeAttr(\"id\")})}}),t.extend(t.expr[\":\"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(n){return!!t.data(n,e)}}):function(e,n,i){return!!t.data(e,i[3])},focusable:function(n){return e(n,!isNaN(t.attr(n,\"tabindex\")))},tabbable:function(n){var i=t.attr(n,\"tabindex\"),r=isNaN(i);return(r||i>=0)&&e(n,!r)}}),t(\"\").outerWidth(1).jquery||t.each([\"Width\",\"Height\"],function(e,n){function i(e,n,i,o){return t.each(r,function(){n-=parseFloat(t.css(e,\"padding\"+this))||0,i&&(n-=parseFloat(t.css(e,\"border\"+this+\"Width\"))||0),o&&(n-=parseFloat(t.css(e,\"margin\"+this))||0)}),n}var r=\"Width\"===n?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],o=n.toLowerCase(),u={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn[\"inner\"+n]=function(e){return void 0===e?u[\"inner\"+n].call(this):this.each(function(){t(this).css(o,i(this,e)+\"px\")})},t.fn[\"outer\"+n]=function(e,r){return\"number\"!=typeof e?u[\"outer\"+n].call(this,e):this.each(function(){t(this).css(o,i(this,e,!0,r)+\"px\")})}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t(\"\").data(\"a-b\",\"a\").removeData(\"a-b\").data(\"a-b\")&&(t.fn.removeData=function(e){return function(n){return arguments.length?e.call(this,t.camelCase(n)):e.call(this)}}(t.fn.removeData)),t.ui.ie=!!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase()),t.fn.extend({focus:function(e){return function(n,i){return\"number\"==typeof n?this.each(function(){var e=this;setTimeout(function(){t(e).focus(),i&&i.call(e)},n)}):e.apply(this,arguments)}}(t.fn.focus),disableSelection:function(){var t=\"onselectstart\"in document.createElement(\"div\")?\"selectstart\":\"mousedown\";return function(){return this.bind(t+\".ui-disableSelection\",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.unbind(\".ui-disableSelection\")},zIndex:function(e){if(void 0!==e)return this.css(\"zIndex\",e);if(this.length)for(var n,i,r=t(this[0]);r.length&&r[0]!==document;){if(n=r.css(\"position\"),(\"absolute\"===n||\"relative\"===n||\"fixed\"===n)&&(i=parseInt(r.css(\"zIndex\"),10),!isNaN(i)&&0!==i))return i;r=r.parent()}return 0}}),t.ui.plugin={add:function(e,n,i){var r,o=t.ui[e].prototype;for(r in i)o.plugins[r]=o.plugins[r]||[],o.plugins[r].push([n,i[r]])},call:function(t,e,n,i){var r,o=t.plugins[e];if(o&&(i||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(r=0;o.length>r;r++)t.options[o[r][0]]&&o[r][1].apply(t.element,n)}}});","/*! jQuery UI - v1.11.4 - 2015-03-13\r\n* http://jqueryui.com\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\"],t):t(jQuery)})(function(t){var e=0,i=Array.prototype.slice;return t.cleanData=function(e){return function(i){var n,s,o;for(o=0;null!=(s=i[o]);o++)try{n=t._data(s,\"events\"),n&&n.remove&&t(s).triggerHandler(\"remove\")}catch(r){}e(i)}}(t.cleanData),t.widget=function(e,i,n){var s,o,r,a,u={},d=e.split(\".\")[0];return e=e.split(\".\")[1],s=d+\"-\"+e,n||(n=i,i=t.Widget),t.expr[\":\"][s.toLowerCase()]=function(e){return!!t.data(e,s)},t[d]=t[d]||{},o=t[d][e],r=t[d][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new r(t,e)},t.extend(r,o,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(n,function(e,n){return t.isFunction(n)?(u[e]=function(){var t=function(){return i.prototype[e].apply(this,arguments)},s=function(t){return i.prototype[e].apply(this,t)};return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=s,e=n.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(u[e]=n,void 0)}),r.prototype=t.widget.extend(a,{widgetEventPrefix:o?a.widgetEventPrefix||e:e},u,{constructor:r,namespace:d,widgetName:e,widgetFullName:s}),o?(t.each(o._childConstructors,function(e,i){var n=i.prototype;t.widget(n.namespace+\".\"+n.widgetName,r,i._proto)}),delete o._childConstructors):i._childConstructors.push(r),t.widget.bridge(e,r),r},t.widget.extend=function(e){for(var n,s,o=i.call(arguments,1),r=0,a=o.length;a>r;r++)for(n in o[r])s=o[r][n],o[r].hasOwnProperty(n)&&void 0!==s&&(e[n]=t.isPlainObject(s)?t.isPlainObject(e[n])?t.widget.extend({},e[n],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,n){var s=n.prototype.widgetFullName||e;t.fn[e]=function(o){var r=\"string\"==typeof o,a=i.call(arguments,1),u=this;return r?this.each(function(){var i,n=t.data(this,s);return\"instance\"===o?(u=n,!1):n?t.isFunction(n[o])&&\"_\"!==o.charAt(0)?(i=n[o].apply(n,a),i!==n&&void 0!==i?(u=i&&i.jquery?u.pushStack(i.get()):i,!1):void 0):t.error(\"no such method '\"+o+\"' for \"+e+\" widget instance\"):t.error(\"cannot call methods on \"+e+\" prior to initialization; \"+\"attempted to call method '\"+o+\"'\")}):(a.length&&(o=t.widget.extend.apply(null,[o].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(o||{}),e._init&&e._init()):t.data(this,s,new n(o,this))})),u}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",defaultElement:\"
      \",options:{disabled:!1,create:null},_createWidget:function(i,n){n=t(n||this.defaultElement||this)[0],this.element=t(n),this.uuid=e++,this.eventNamespace=\".\"+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),n!==this&&(t.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===n&&this.destroy()}}),this.document=t(n.style?n.ownerDocument:n.document||n),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this._trigger(\"create\",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr(\"aria-disabled\").removeClass(this.widgetFullName+\"-disabled \"+\"ui-state-disabled\"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass(\"ui-state-hover\"),this.focusable.removeClass(\"ui-state-focus\")},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var n,s,o,r=e;if(0===arguments.length)return t.widget.extend({},this.options);if(\"string\"==typeof e)if(r={},n=e.split(\".\"),e=n.shift(),n.length){for(s=r[e]=t.widget.extend({},this.options[e]),o=0;n.length-1>o;o++)s[n[o]]=s[n[o]]||{},s=s[n[o]];if(e=n.pop(),1===arguments.length)return void 0===s[e]?null:s[e];s[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];r[e]=i}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,\"disabled\"===t&&(this.widget().toggleClass(this.widgetFullName+\"-disabled\",!!e),e&&(this.hoverable.removeClass(\"ui-state-hover\"),this.focusable.removeClass(\"ui-state-focus\"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(e,i,n){var s,o=this;\"boolean\"!=typeof e&&(n=i,i=e,e=!1),n?(i=s=t(i),this.bindings=this.bindings.add(i)):(n=i,i=this.element,s=this.widget()),t.each(n,function(n,r){function a(){return e||o.options.disabled!==!0&&!t(this).hasClass(\"ui-state-disabled\")?(\"string\"==typeof r?o[r]:r).apply(o,arguments):void 0}\"string\"!=typeof r&&(a.guid=r.guid=r.guid||a.guid||t.guid++);var u=n.match(/^([\\w:-]*)\\s*(.*)$/),d=u[1]+o.eventNamespace,c=u[2];c?s.delegate(c,d,a):i.bind(d,a)})},_off:function(e,i){i=(i||\"\").split(\" \").join(this.eventNamespace+\" \")+this.eventNamespace,e.unbind(i).undelegate(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return(\"string\"==typeof t?n[t]:t).apply(n,arguments)}var n=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass(\"ui-state-hover\")},mouseleave:function(e){t(e.currentTarget).removeClass(\"ui-state-hover\")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass(\"ui-state-focus\")},focusout:function(e){t(e.currentTarget).removeClass(\"ui-state-focus\")}})},_trigger:function(e,i,n){var s,o,r=this.options[e];if(n=n||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(s in o)s in i||(i[s]=o[s]);return this.element.trigger(i,n),!(t.isFunction(r)&&r.apply(this.element[0],[i].concat(n))===!1||i.isDefaultPrevented())}},t.each({show:\"fadeIn\",hide:\"fadeOut\"},function(e,i){t.Widget.prototype[\"_\"+e]=function(n,s,o){\"string\"==typeof s&&(s={effect:s});var r,a=s?s===!0||\"number\"==typeof s?i:s.effect||i:e;s=s||{},\"number\"==typeof s&&(s={duration:s}),r=!t.isEmptyObject(s),s.complete=o,s.delay&&n.delay(s.delay),r&&t.effects&&t.effects.effect[a]?n[e](s):a!==e&&n[a]?n[a](s.duration,s.easing,o):n.queue(function(i){t(this)[e](),o&&o.call(n[0]),i()})}}),t.widget});","/*! jQuery UI - v1.11.4 - 2015-03-13\r\n* http://jqueryui.com\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\",\"./widget\"],t):t(jQuery)})(function(t){var e=!1;return t(document).mouseup(function(){e=!1}),t.widget(\"ui.mouse\",{version:\"1.11.4\",options:{cancel:\"input,textarea,button,select,option\",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.bind(\"mousedown.\"+this.widgetName,function(t){return e._mouseDown(t)}).bind(\"click.\"+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+\".preventClickEvent\")?(t.removeData(i.target,e.widgetName+\".preventClickEvent\"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName),this._mouseMoveDelegate&&this.document.unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!e){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var n=this,s=1===i.which,o=\"string\"==typeof this.options.cancel&&i.target.nodeName?t(i.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){n.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===t.data(i.target,this.widgetName+\".preventClickEvent\")&&t.removeData(i.target,this.widgetName+\".preventClickEvent\"),this._mouseMoveDelegate=function(t){return n._mouseMove(t)},this._mouseUpDelegate=function(t){return n._mouseUp(t)},this.document.bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),i.preventDefault(),e=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(i){return this.document.unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,i.target===this._mouseDownEvent.target&&t.data(i.target,this.widgetName+\".preventClickEvent\",!0),this._mouseStop(i)),e=!1,!1},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})});","/*! jQuery UI - v1.11.4 - 2015-03-13\r\n* http://jqueryui.com\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\",\"./core\",\"./mouse\",\"./widget\"],t):t(jQuery)})(function(t){return t.widget(\"ui.resizable\",t.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"resize\",options:{alsoResize:!1,animate:!1,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:\"e,s,se\",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseInt(t,10)||0},_isNumber:function(t){return!isNaN(parseInt(t,10))},_hasScroll:function(e,i){if(\"hidden\"===t(e).css(\"overflow\"))return!1;var s=i&&\"left\"===i?\"scrollLeft\":\"scrollTop\",o=!1;return e[s]>0?!0:(e[s]=1,o=e[s]>0,e[s]=0,o)},_create:function(){var e,i,s,o,n,r=this,a=this.options;if(this.element.addClass(\"ui-resizable\"),t.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||\"ui-resizable-helper\":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t(\"
      \").css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")})),this.element=this.element.parent().data(\"ui-resizable\",this.element.resizable(\"instance\")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css(\"resize\"),this.originalElement.css(\"resize\",\"none\"),this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"})),this.originalElement.css({margin:this.originalElement.css(\"margin\")}),this._proportionallyResize()),this.handles=a.handles||(t(\".ui-resizable-handle\",this.element).length?{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"}:\"e,s,se\"),this._handles=t(),this.handles.constructor===String)for(\"all\"===this.handles&&(this.handles=\"n,e,s,w,se,sw,ne,nw\"),e=this.handles.split(\",\"),this.handles={},i=0;e.length>i;i++)s=t.trim(e[i]),n=\"ui-resizable-\"+s,o=t(\"
      \"),o.css({zIndex:a.zIndex}),\"se\"===s&&o.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\"),this.handles[s]=\".ui-resizable-\"+s,this.element.append(o);this._renderAxis=function(e){var i,s,o,n;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),n=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),o=[\"padding\",/ne|nw|n/.test(i)?\"Top\":/se|sw|s/.test(i)?\"Bottom\":/^e$/.test(i)?\"Right\":\"Left\"].join(\"\"),e.css(o,n),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(\".ui-resizable-handle\")),this._handles.disableSelection(),this._handles.mouseover(function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:\"se\")}),a.autoHide&&(this._handles.hide(),t(this.element).addClass(\"ui-resizable-autohide\").mouseenter(function(){a.disabled||(t(this).removeClass(\"ui-resizable-autohide\"),r._handles.show())}).mouseleave(function(){a.disabled||r.resizing||(t(this).addClass(\"ui-resizable-autohide\"),r._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").removeData(\"ui-resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")}).insertAfter(e),e.remove()),this.originalElement.css(\"resize\",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(e){var i,s,o=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(o=!0);return!this.options.disabled&&o},_mouseStart:function(e){var i,s,o,n=this.options,r=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css(\"left\")),s=this._num(this.helper.css(\"top\")),n.containment&&(i+=t(n.containment).scrollLeft()||0,s+=t(n.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:r.width(),height:r.height()},this.originalSize=this._helper?{width:r.outerWidth(),height:r.outerHeight()}:{width:r.width(),height:r.height()},this.sizeDiff={width:r.outerWidth()-r.width(),height:r.outerHeight()-r.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio=\"number\"==typeof n.aspectRatio?n.aspectRatio:this.originalSize.width/this.originalSize.height||1,o=t(\".ui-resizable-\"+this.axis).css(\"cursor\"),t(\"body\").css(\"cursor\",\"auto\"===o?this.axis+\"-resize\":o),r.addClass(\"ui-resizable-resizing\"),this._propagate(\"start\",e),!0},_mouseDrag:function(e){var i,s,o=this.originalMousePosition,n=this.axis,r=e.pageX-o.left||0,a=e.pageY-o.top||0,h=this._change[n];return this._updatePrevProperties(),h?(i=h.apply(this,[e,r,a]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate(\"resize\",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger(\"resize\",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,o,n,r,a,h,l=this.options,p=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&this._hasScroll(i[0],\"left\")?0:p.sizeDiff.height,n=s?0:p.sizeDiff.width,r={width:p.helper.width()-n,height:p.helper.height()-o},a=parseInt(p.element.css(\"left\"),10)+(p.position.left-p.originalPosition.left)||null,h=parseInt(p.element.css(\"top\"),10)+(p.position.top-p.originalPosition.top)||null,l.animate||this.element.css(t.extend(r,{top:h,left:a})),p.helper.height(p.size.height),p.helper.width(p.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t(\"body\").css(\"cursor\",\"auto\"),this.element.removeClass(\"ui-resizable-resizing\"),this._propagate(\"stop\",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+\"px\"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+\"px\"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+\"px\"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+\"px\"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,o,n,r=this.options;n={minWidth:this._isNumber(r.minWidth)?r.minWidth:0,maxWidth:this._isNumber(r.maxWidth)?r.maxWidth:1/0,minHeight:this._isNumber(r.minHeight)?r.minHeight:0,maxHeight:this._isNumber(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,s=n.minWidth/this.aspectRatio,i=n.maxHeight*this.aspectRatio,o=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),s>n.minHeight&&(n.minHeight=s),n.maxWidth>i&&(n.maxWidth=i),n.maxHeight>o&&(n.maxHeight=o)),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),\"sw\"===s&&(t.left=e.left+(i.width-t.width),t.top=null),\"nw\"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,r=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),p=/nw|ne|n/.test(i);return n&&(t.width=e.minWidth),r&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),o&&(t.height=e.maxHeight),n&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),r&&p&&(t.top=h-e.minHeight),o&&p&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css(\"borderTopWidth\"),t.css(\"borderRightWidth\"),t.css(\"borderBottomWidth\"),t.css(\"borderLeftWidth\")],o=[t.css(\"paddingTop\"),t.css(\"paddingRight\"),t.css(\"paddingBottom\"),t.css(\"paddingLeft\")];4>e;e++)i[e]=parseInt(s[e],10)||0,i[e]+=parseInt(o[e],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t(\"
      \"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:\"absolute\",left:this.elementOffset.left+\"px\",top:this.elementOffset.top+\"px\",zIndex:++i.zIndex}),this.helper.appendTo(\"body\").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,o=this.originalPosition;return{top:o.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),\"resize\"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add(\"resizable\",\"animate\",{stop:function(e){var i=t(this).resizable(\"instance\"),s=i.options,o=i._proportionallyResizeElements,n=o.length&&/textarea/i.test(o[0].nodeName),r=n&&i._hasScroll(o[0],\"left\")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,h={width:i.size.width-a,height:i.size.height-r},l=parseInt(i.element.css(\"left\"),10)+(i.position.left-i.originalPosition.left)||null,p=parseInt(i.element.css(\"top\"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,p&&l?{top:p,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css(\"width\"),10),height:parseInt(i.element.css(\"height\"),10),top:parseInt(i.element.css(\"top\"),10),left:parseInt(i.element.css(\"left\"),10)};o&&o.length&&t(o[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate(\"resize\",e)}})}}),t.ui.plugin.add(\"resizable\",\"containment\",{start:function(){var e,i,s,o,n,r,a,h=t(this).resizable(\"instance\"),l=h.options,p=h.element,d=l.containment,c=d instanceof t?d.get(0):/parent/.test(d)?p.parent().get(0):d;c&&(h.containerElement=t(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(c),i=[],t([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(t,s){i[t]=h._num(e.css(\"padding\"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,o=h.containerSize.height,n=h.containerSize.width,r=h._hasScroll(c,\"left\")?c.scrollWidth:n,a=h._hasScroll(c)?c.scrollHeight:o,h.parentData={element:c,left:s.left,top:s.top,width:r,height:a}))},resize:function(e){var i,s,o,n,r=t(this).resizable(\"instance\"),a=r.options,h=r.containerOffset,l=r.position,p=r._aspectRatio||e.shiftKey,d={top:0,left:0},c=r.containerElement,u=!0;c[0]!==document&&/static/.test(c.css(\"position\"))&&(d=h),l.left<(r._helper?h.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-h.left:r.position.left-d.left),p&&(r.size.height=r.size.width/r.aspectRatio,u=!1),r.position.left=a.helper?h.left:0),l.top<(r._helper?h.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-h.top:r.position.top),p&&(r.size.width=r.size.height*r.aspectRatio,u=!1),r.position.top=r._helper?h.top:0),o=r.containerElement.get(0)===r.element.parent().get(0),n=/relative|absolute/.test(r.containerElement.css(\"position\")),o&&n?(r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top):(r.offset.left=r.element.offset().left,r.offset.top=r.element.offset().top),i=Math.abs(r.sizeDiff.width+(r._helper?r.offset.left-d.left:r.offset.left-h.left)),s=Math.abs(r.sizeDiff.height+(r._helper?r.offset.top-d.top:r.offset.top-h.top)),i+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-i,p&&(r.size.height=r.size.width/r.aspectRatio,u=!1)),s+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-s,p&&(r.size.width=r.size.height*r.aspectRatio,u=!1)),u||(r.position.left=r.prevPosition.left,r.position.top=r.prevPosition.top,r.size.width=r.prevSize.width,r.size.height=r.prevSize.height)},stop:function(){var e=t(this).resizable(\"instance\"),i=e.options,s=e.containerOffset,o=e.containerPosition,n=e.containerElement,r=t(e.helper),a=r.offset(),h=r.outerWidth()-e.sizeDiff.width,l=r.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(n.css(\"position\"))&&t(this).css({left:a.left-o.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(n.css(\"position\"))&&t(this).css({left:a.left-o.left-s.left,width:h,height:l})}}),t.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(){var e=t(this).resizable(\"instance\"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data(\"ui-resizable-alsoresize\",{width:parseInt(e.width(),10),height:parseInt(e.height(),10),left:parseInt(e.css(\"left\"),10),top:parseInt(e.css(\"top\"),10)})})},resize:function(e,i){var s=t(this).resizable(\"instance\"),o=s.options,n=s.originalSize,r=s.originalPosition,a={height:s.size.height-n.height||0,width:s.size.width-n.width||0,top:s.position.top-r.top||0,left:s.position.left-r.left||0};t(o.alsoResize).each(function(){var e=t(this),s=t(this).data(\"ui-resizable-alsoresize\"),o={},n=e.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];t.each(n,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&i>=0&&(o[e]=i||null)}),e.css(o)})},stop:function(){t(this).removeData(\"resizable-alsoresize\")}}),t.ui.plugin.add(\"resizable\",\"ghost\",{start:function(){var e=t(this).resizable(\"instance\"),i=e.options,s=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:\"block\",position:\"relative\",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(\"string\"==typeof i.ghost?i.ghost:\"\"),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable(\"instance\");e.ghost&&e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable(\"instance\");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add(\"resizable\",\"grid\",{resize:function(){var e,i=t(this).resizable(\"instance\"),s=i.options,o=i.size,n=i.originalSize,r=i.originalPosition,a=i.axis,h=\"number\"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,p=h[1]||1,d=Math.round((o.width-n.width)/l)*l,c=Math.round((o.height-n.height)/p)*p,u=n.width+d,f=n.height+c,g=s.maxWidth&&u>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>u,_=s.minHeight&&s.minHeight>f;s.grid=h,v&&(u+=l),_&&(f+=p),g&&(u-=l),m&&(f-=p),/^(se|s|e)$/.test(a)?(i.size.width=u,i.size.height=f):/^(ne)$/.test(a)?(i.size.width=u,i.size.height=f,i.position.top=r.top-c):/^(sw)$/.test(a)?(i.size.width=u,i.size.height=f,i.position.left=r.left-d):((0>=f-p||0>=u-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-p>0?(i.size.height=f,i.position.top=r.top-c):(f=p-e.height,i.size.height=f,i.position.top=r.top+n.height-f),u-l>0?(i.size.width=u,i.position.left=r.left-d):(u=l-e.width,i.size.width=u,i.position.left=r.left+n.width-u))}}),t.ui.resizable});","/*! jQuery UI - v1.11.4 - 2015-03-13\r\n* http://jqueryui.com\r\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\r\n(function(t){\"function\"==typeof define&&define.amd?define([\"jquery\",\"./core\",\"./mouse\",\"./widget\"],t):t(jQuery)})(function(t){return t.widget(\"ui.sortable\",t.ui.mouse,{version:\"1.11.4\",widgetEventPrefix:\"sort\",ready:!1,options:{appendTo:\"parent\",axis:!1,connectWith:!1,containment:!1,cursor:\"auto\",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:\"original\",items:\"> *\",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:\"default\",tolerance:\"intersect\",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css(\"float\"))||/inline|table-cell/.test(t.css(\"display\"))},_create:function(){this.containerCache={},this.element.addClass(\"ui-sortable\"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),\"handle\"===t&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(\".ui-sortable-handle\").removeClass(\"ui-sortable-handle\"),t.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass(\"ui-sortable-handle\")})},_destroy:function(){this.element.removeClass(\"ui-sortable ui-sortable-disabled\").find(\".ui-sortable-handle\").removeClass(\"ui-sortable-handle\"),this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+\"-item\");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||\"static\"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+\"-item\")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+\"-item\")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find(\"*\").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,r=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css(\"position\",\"absolute\"),this.cssPosition=this.helper.css(\"position\"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,r.cursorAt&&this._adjustOffsetFromHelper(r.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),r.containment&&this._setContainment(),r.cursor&&\"auto\"!==r.cursor&&(o=this.document.find(\"body\"),this.storedCursor=o.css(\"cursor\"),o.css(\"cursor\",r.cursor),this.storedStylesheet=t(\"\").appendTo(o)),r.opacity&&(this.helper.css(\"opacity\")&&(this._storedOpacity=this.helper.css(\"opacity\")),this.helper.css(\"opacity\",r.opacity)),r.zIndex&&(this.helper.css(\"zIndex\")&&(this._storedZIndex=this.helper.css(\"zIndex\")),this.helper.css(\"zIndex\",r.zIndex)),this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger(\"start\",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger(\"activate\",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!r.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this.helper.addClass(\"ui-sortable-helper\"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,r=this.options,h=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo(\"absolute\"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&\"HTML\"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?\"next\":\"prev\"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&(\"semi-dynamic\"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?\"down\":\"up\",\"pointer\"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger(\"change\",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger(\"sort\",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,r={};o&&\"x\"!==o||(r.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&\"y\"!==o||(r.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(r,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),\"original\"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\"):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger(\"deactivate\",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger(\"out\",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),\"original\"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||\"id\")||\"\").match(e.expression||/(.+)[\\-=_](.+)/);i&&s.push((e.key||i[1]+\"[]\")+\"=\"+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+\"=\"),s.join(\"&\")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||\"id\")||\"\")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,r=o+t.width,h=t.top,a=h+t.height,l=this.offset.click.top,c=this.offset.click.left,p=\"x\"===this.options.axis||s+l>h&&a>s+l,d=\"y\"===this.options.axis||e+c>o&&r>e+c,u=p&&d;return\"pointer\"===this.options.tolerance||this.options.forcePointerForContainers||\"pointer\"!==this.options.tolerance&&this.helperProportions[this.floating?\"width\":\"height\"]>t[this.floating?\"width\":\"height\"]?u:e+this.helperProportions.width/2>o&&r>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>h&&a>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e=\"x\"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),i=\"y\"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),s=e&&i,n=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return s?this.floating?o&&\"right\"===o||\"down\"===n?2:1:n&&(\"down\"===n?2:1):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?\"right\"===n&&i||\"left\"===n&&!i:s&&(\"down\"===s&&e||\"up\"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?\"down\":\"up\")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?\"right\":\"left\")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){h.push(this)}var s,n,o,r,h=[],a=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)r=t.data(o[n],this.widgetFullName),r&&r!==this&&!r.options.disabled&&a.push([t.isFunction(r.options.items)?r.options.items.call(r.element):t(r.options.items,r.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),r]);for(a.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(\".ui-sortable-helper\").not(\".ui-sortable-placeholder\"),this]),s=a.length-1;s>=0;s--)a[s][0].each(i);return t(h)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(\":data(\"+this.widgetName+\"-item)\");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,r,h,a,l,c=this.items,p=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(p.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=p.length-1;i>=0;i--)for(r=p[i][1],h=p[i][0],s=0,l=h.length;l>s;s++)a=t(h[s]),a.data(this.widgetName+\"-item\",r),c.push({item:a,instance:r,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?\"x\"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t(\"<\"+s+\">\",e.document[0]).addClass(i||e.currentItem[0].className+\" ui-sortable-placeholder\").removeClass(\"ui-sortable-helper\");return\"tbody\"===s?e._createTrPlaceholder(e.currentItem.find(\"tr\").eq(0),t(\"\",e.document[0]).appendTo(n)):\"tr\"===s?e._createTrPlaceholder(e.currentItem,n):\"img\"===s&&n.attr(\"src\",e.currentItem.attr(\"src\")),i||n.css(\"visibility\",\"hidden\"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css(\"paddingTop\")||0,10)-parseInt(e.currentItem.css(\"paddingBottom\")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css(\"paddingLeft\")||0,10)-parseInt(e.currentItem.css(\"paddingRight\")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t(\" \",s.document[0]).attr(\"colspan\",t(this).attr(\"colspan\")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,r,h,a,l,c,p,d=null,u=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],u=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger(\"out\",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[u].containerCache.over||(this.containers[u]._trigger(\"over\",e,this._uiHash(this)),this.containers[u].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),r=c?\"left\":\"top\",h=c?\"width\":\"height\",p=c?\"clientX\":\"clientY\",s=this.items.length-1;s>=0;s--)t.contains(this.containers[u].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(a=this.items[s].item.offset()[r],l=!1,e[p]-a>this.items[s][h]/2&&(l=!0),n>Math.abs(e[p]-a)&&(n=Math.abs(e[p]-a),o=this.items[s],this.direction=l?\"up\":\"down\"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[u])return this.currentContainer.containerCache.over||(this.containers[u]._trigger(\"over\",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[u].element,!0),this._trigger(\"change\",e,this._uiHash()),this.containers[u]._trigger(\"change\",e,this._uiHash(this)),this.currentContainer=this.containers[u],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[u]._trigger(\"over\",e,this._uiHash(this)),this.containers[u].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):\"clone\"===i.helper?this.currentItem.clone():this.currentItem;return s.parents(\"body\").length||t(\"parent\"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css(\"position\"),top:this.currentItem.css(\"top\"),left:this.currentItem.css(\"left\")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){\"string\"==typeof e&&(e=e.split(\" \")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),\"left\"in e&&(this.offset.click.left=e.left+this.margins.left),\"right\"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),\"top\"in e&&(this.offset.click.top=e.top+this.margins.top),\"bottom\"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return\"absolute\"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&\"html\"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css(\"borderTopWidth\"),10)||0),left:e.left+(parseInt(this.offsetParent.css(\"borderLeftWidth\"),10)||0)}},_getRelativeOffset:function(){if(\"relative\"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css(\"top\"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css(\"left\"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css(\"marginLeft\"),10)||0,top:parseInt(this.currentItem.css(\"marginTop\"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;\"parent\"===n.containment&&(n.containment=this.helper[0].parentNode),(\"document\"===n.containment||\"window\"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,\"document\"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,(\"document\"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s=\"hidden\"!==t(e).css(\"overflow\"),this.containment=[i.left+(parseInt(t(e).css(\"borderLeftWidth\"),10)||0)+(parseInt(t(e).css(\"paddingLeft\"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css(\"borderTopWidth\"),10)||0)+(parseInt(t(e).css(\"paddingTop\"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css(\"borderLeftWidth\"),10)||0)-(parseInt(t(e).css(\"paddingRight\"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css(\"borderTopWidth\"),10)||0)-(parseInt(t(e).css(\"paddingBottom\"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s=\"absolute\"===e?1:-1,n=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,r=e.pageY,h=\"absolute\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(h[0].tagName);return\"relative\"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.leftthis.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(r=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((r-this.originalPageY)/n.grid[1])*n.grid[1],r=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:r-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollTop():a?0:h.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(\"fixed\"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:h.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],\"down\"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)(\"auto\"===this._storedCSS[s]||\"static\"===this._storedCSS[s])&&(this._storedCSS[s]=\"\");this.currentItem.css(this._storedCSS).removeClass(\"ui-sortable-helper\")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger(\"receive\",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(\".ui-sortable-helper\")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger(\"update\",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger(\"remove\",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger(\"receive\",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger(\"update\",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i(\"deactivate\",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i(\"out\",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find(\"body\").css(\"cursor\",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css(\"opacity\",this._storedOpacity),this._storedZIndex&&this.helper.css(\"zIndex\",\"auto\"===this._storedZIndex?\"\":this._storedZIndex),this.dragging=!1,e||this._trigger(\"beforeStop\",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger(\"stop\",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}})});","/*!\n * jQuery UI Touch Punch 0.2.3\n *\n * Copyright 2011–2014, Dave Furfero\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Depends:\n * jquery.ui.widget.js\n * jquery.ui.mouse.js\n */\n!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent(\"MouseEvents\");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch=\"ontouchend\"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,\"mouseover\"),f(a,\"mousemove\"),f(a,\"mousedown\"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,\"mousemove\"))},b._touchEnd=function(a){e&&(f(a,\"mouseup\"),f(a,\"mouseout\"),this._touchMoved||f(a,\"click\"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,\"_touchStart\"),touchmove:a.proxy(b,\"_touchMove\"),touchend:a.proxy(b,\"_touchEnd\")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,\"_touchStart\"),touchmove:a.proxy(b,\"_touchMove\"),touchend:a.proxy(b,\"_touchEnd\")}),d.call(b)}}}(jQuery);","/*!\n angular-block-ui v0.2.2\n (c) 2016 (null) McNull https://github.com/McNull/angular-block-ui\n License: MIT\n*/\n(function(angular) {\n\nvar blkUI = angular.module('blockUI', []);\n\nblkUI.config([\"$provide\", \"$httpProvider\", function ($provide, $httpProvider) {\n\n $provide.decorator('$exceptionHandler', ['$delegate', '$injector',\n function ($delegate, $injector) {\n var blockUI, blockUIConfig;\n\n return function (exception, cause) {\n\n blockUIConfig = blockUIConfig || $injector.get('blockUIConfig');\n\n if (blockUIConfig.resetOnException) {\n try {\n blockUI = blockUI || $injector.get('blockUI');\n blockUI.instances.reset();\n } catch (ex) {\n console.log('$exceptionHandler', exception);\n }\n }\n\n $delegate(exception, cause);\n };\n }\n ]);\n\n $httpProvider.interceptors.push('blockUIHttpInterceptor');\n}]);\n\nblkUI.run([\"$document\", \"blockUIConfig\", \"$templateCache\", function ($document, blockUIConfig, $templateCache) {\n if (blockUIConfig.autoInjectBodyBlock) {\n $document.find('body').attr('block-ui', 'main');\n }\n\n if (blockUIConfig.template) {\n\n // Swap the builtin template with the custom template.\n // Create a magic cache key and place the template in the cache.\n\n blockUIConfig.templateUrl = '$$block-ui-template$$';\n $templateCache.put(blockUIConfig.templateUrl, blockUIConfig.template);\n }\n}]);\n\nfunction moduleLoaded(name) {\n try {\n angular.module(name);\n } catch(ex) {\n return false;\n }\n return true;\n}\nblkUI.config([\"$provide\", function ($provide) {\n $provide.decorator('$location', decorateLocation);\n}]);\n\nvar decorateLocation = [\n '$delegate', 'blockUI', 'blockUIConfig',\n function ($delegate, blockUI, blockUIConfig) {\n\n if (blockUIConfig.blockBrowserNavigation) {\n\n blockUI.$_blockLocationChange = true;\n\n var overrides = ['url', 'path', 'search', 'hash', 'state'];\n\n function hook(f) {\n var s = $delegate[f];\n $delegate[f] = function () {\n\n // console.log(f, Date.now(), arguments);\n\n var result = s.apply($delegate, arguments);\n\n // The call was a setter if the $location service is returned.\n\n if (result === $delegate) {\n\n // Mark the mainblock ui to allow the location change.\n\n blockUI.$_blockLocationChange = false;\n }\n\n return result;\n };\n }\n\n angular.forEach(overrides, hook);\n\n }\n\n return $delegate;\n}];\n\n// Called from block-ui-directive for the 'main' instance.\n\nfunction blockNavigation($scope, mainBlockUI, blockUIConfig) {\n\n if (blockUIConfig.blockBrowserNavigation) {\n\n function registerLocationChange() {\n\n $scope.$on('$locationChangeStart', function (event) {\n\n // console.log('$locationChangeStart', mainBlockUI.$_blockLocationChange + ' ' + mainBlockUI.state().blockCount);\n\n if (mainBlockUI.$_blockLocationChange && mainBlockUI.state().blockCount > 0) {\n event.preventDefault();\n }\n });\n\n $scope.$on('$locationChangeSuccess', function () {\n mainBlockUI.$_blockLocationChange = blockUIConfig.blockBrowserNavigation;\n\n // console.log('$locationChangeSuccess', mainBlockUI.$_blockLocationChange + ' ' + mainBlockUI.state().blockCount);\n });\n }\n\n if (moduleLoaded('ngRoute')) {\n\n // After the initial content has been loaded we'll spy on any location\n // changes and discard them when needed.\n\n var fn = $scope.$on('$viewContentLoaded', function () {\n\n // Unhook the view loaded and hook a function that will prevent\n // location changes while the block is active.\n\n fn();\n registerLocationChange();\n\n });\n\n } else {\n registerLocationChange();\n }\n\n }\n}\nblkUI.directive('blockUiContainer', [\"blockUIConfig\", \"blockUiContainerLinkFn\", function (blockUIConfig, blockUiContainerLinkFn) {\n return {\n scope: true,\n restrict: 'A',\n templateUrl: blockUIConfig.templateUrl,\n compile: function($element) {\n return blockUiContainerLinkFn;\n }\n };\n}]).factory('blockUiContainerLinkFn', [\"blockUI\", \"blockUIUtils\", function (blockUI, blockUIUtils) {\n\n return function ($scope, $element, $attrs) {\n\n var srvInstance = $element.inheritedData('block-ui');\n\n if (!srvInstance) {\n throw new Error('No parent block-ui service instance located.');\n }\n\n // Expose the state on the scope\n\n $scope.state = srvInstance.state();\n\n// $scope.$watch('state.blocking', function(value) {\n// $element.toggleClass('block-ui-visible', !!value);\n// });\n//\n// $scope.$watch('state.blockCount > 0', function(value) {\n// $element.toggleClass('block-ui-active', !!value);\n// });\n };\n}]);\nblkUI.directive('blockUi', [\"blockUiCompileFn\", function (blockUiCompileFn) {\n\n return {\n scope: true,\n restrict: 'A',\n compile: blockUiCompileFn\n };\n\n}]).factory('blockUiCompileFn', [\"blockUiPreLinkFn\", function (blockUiPreLinkFn) {\n\n return function ($element, $attrs) {\n\n // Class should be added here to prevent an animation delay error.\n\n $element.append('
      ');\n\n return {\n pre: blockUiPreLinkFn\n };\n\n };\n\n}]).factory('blockUiPreLinkFn', [\"blockUI\", \"blockUIUtils\", \"blockUIConfig\", function (blockUI, blockUIUtils, blockUIConfig) {\n\n return function ($scope, $element, $attrs) {\n\n // If the element does not have the class \"block-ui\" set, we set the\n // default css classes from the config.\n\n if (!$element.hasClass('block-ui')) {\n $element.addClass(blockUIConfig.cssClass);\n }\n\n // Expose the blockUiMessageClass attribute value on the scope\n\n $attrs.$observe('blockUiMessageClass', function (value) {\n $scope.$_blockUiMessageClass = value;\n });\n\n // Create the blockUI instance\n // Prefix underscore to prevent integers:\n // https://github.com/McNull/angular-block-ui/pull/8\n\n var instanceId = $attrs.blockUi || '_' + $scope.$id;\n var srvInstance = blockUI.instances.get(instanceId);\n\n // If this is the main (topmost) block element we'll also need to block any\n // location changes while the block is active.\n\n if (instanceId === 'main') {\n blockNavigation($scope, srvInstance, blockUIConfig);\n } else {\n // Locate the parent blockUI instance\n var parentInstance = $element.inheritedData('block-ui');\n\n if (parentInstance) {\n // TODO: assert if parent is already set to something else\n srvInstance._parent = parentInstance;\n }\n }\n\n // Ensure the instance is released when the scope is destroyed\n\n $scope.$on('$destroy', function () {\n srvInstance.release();\n });\n\n // Increase the reference count\n\n srvInstance.addRef();\n\n // Expose the state on the scope\n\n $scope.$_blockUiState = srvInstance.state();\n\n $scope.$watch('$_blockUiState.blocking', function (value) {\n // Set the aria-busy attribute if needed\n $element.attr('aria-busy', !!value);\n $element.toggleClass('block-ui-visible', !!value);\n });\n\n $scope.$watch('$_blockUiState.blockCount > 0', function (value) {\n $element.toggleClass('block-ui-active', !!value);\n });\n\n // If a pattern is provided assign it to the state\n\n var pattern = $attrs.blockUiPattern;\n\n if (pattern) {\n var regExp = blockUIUtils.buildRegExp(pattern);\n srvInstance.pattern(regExp);\n }\n\n // Store a reference to the service instance on the element\n\n $element.data('block-ui', srvInstance);\n\n };\n\n}]);\n//.factory('blockUiPostLinkFn', function(blockUIUtils) {\n//\n// return function($scope, $element, $attrs) {\n//\n// var $message;\n//\n// $attrs.$observe('blockUiMessageClass', function(value) {\n//\n// $message = $message || blockUIUtils.findElement($element, function($e) {\n// return $e.hasClass('block-ui-message');\n// });\n//\n// $message.addClass(value);\n//\n// });\n// };\n//\n//});\nblkUI.constant('blockUIConfig', {\n templateUrl: 'angular-block-ui/angular-block-ui.ng.html',\n delay: 250,\n message: \"Loading ...\",\n autoBlock: true,\n resetOnException: true,\n requestFilter: angular.noop,\n autoInjectBodyBlock: true,\n cssClass: 'block-ui block-ui-anim-fade',\n blockBrowserNavigation: false\n});\n\n\nblkUI.factory('blockUIHttpInterceptor', [\"$q\", \"$injector\", \"blockUIConfig\", \"$templateCache\", function($q, $injector, blockUIConfig, $templateCache) {\n\n var blockUI;\n\n function injectBlockUI() {\n blockUI = blockUI || $injector.get('blockUI');\n }\n\n function stopBlockUI(config) {\n if (blockUIConfig.autoBlock && (config && !config.$_noBlock && config.$_blocks)) {\n injectBlockUI();\n config.$_blocks.stop();\n }\n }\n\n function error(rejection) {\n\n try {\n stopBlockUI(rejection.config);\n } catch(ex) {\n console.log('httpRequestError', ex);\n }\n\n return $q.reject(rejection);\n }\n\n return {\n request: function(config) {\n\n // Only block when autoBlock is enabled ...\n // ... and the request doesn't match a cached template.\n\n if (blockUIConfig.autoBlock &&\n !(config.method == 'GET' && $templateCache.get(config.url))) {\n\n // Don't block excluded requests\n\n var result = blockUIConfig.requestFilter(config);\n\n if (result === false) {\n // Tag the config so we don't unblock this request\n config.$_noBlock = true;\n } else {\n\n injectBlockUI();\n\n config.$_blocks = blockUI.instances.locate(config);\n config.$_blocks.start(result);\n }\n }\n\n return config;\n },\n\n requestError: error,\n\n response: function(response) {\n\n // If the connection to the website goes down the response interceptor gets and error with \"cannot read property config of null\".\n // https://github.com/McNull/angular-block-ui/issues/53\n\n if(response) {\n stopBlockUI(response.config);\n }\n\n return response;\n },\n\n responseError: error\n };\n\n}]);\n\nblkUI.factory('blockUI', [\"blockUIConfig\", \"$timeout\", \"blockUIUtils\", \"$document\", function(blockUIConfig, $timeout, blockUIUtils, $document) {\n\n var $body = $document.find('body');\n \n // These properties are not allowed to be specified in the start method.\n var reservedStateProperties = ['id', 'blockCount', 'blocking'];\n \n function BlockUI(id) {\n\n var self = this;\n\n var state = {\n id: id,\n blockCount: 0,\n message: blockUIConfig.message,\n blocking: false\n }, startPromise, doneCallbacks = [];\n\n this._id = id;\n\n this._refs = 0;\n\n this.start = function(messageOrOptions) {\n \n messageOrOptions = messageOrOptions || {};\n \n if(angular.isString(messageOrOptions)) {\n messageOrOptions = {\n message: messageOrOptions\n };\n } else {\n angular.forEach(reservedStateProperties, function(x) {\n if(messageOrOptions[x]) {\n throw new Error('The property ' + x + ' is reserved for the block state.');\n }\n });\n } \n \n angular.extend(state, messageOrOptions);\n \n if(state.blockCount > 0) {\n state.message = messageOrOptions.message || state.message || blockUIConfig.message;\n } else {\n state.message = messageOrOptions.message || blockUIConfig.message;\n }\n \n // if(state.blockCount > 0) {\n // messageOrOptions = messageOrOptions || state.message || blockUIConfig.message;\n // } else {\n // messageOrOptions = messageOrOptions || blockUIConfig.message;\n // }\n\n // state.message = messageOrOptions;\n\n state.blockCount++;\n\n // Check if the focused element is part of the block scope\n\n var $ae = angular.element($document[0].activeElement);\n\n if($ae.length && blockUIUtils.isElementInBlockScope($ae, self)) {\n\n // Let the active element lose focus and store a reference \n // to restore focus when we're done (reset)\n\n self._restoreFocus = $ae[0];\n\n // https://github.com/McNull/angular-block-ui/issues/13\n // http://stackoverflow.com/questions/22698058/apply-already-in-progress-error-when-using-typeahead-plugin-found-to-be-relate\n // Queue the blur after any ng-blur expression.\n\n $timeout(function() {\n // Ensure we still need to blur\n // Don't restore if active element is body, since this causes IE to switch windows (see http://tjvantoll.com/2013/08/30/bugs-with-document-activeelement-in-internet-explorer/)\n if (self._restoreFocus && self._restoreFocus !== $body[0]) {\n self._restoreFocus.blur();\n }\n });\n }\n\n if (!startPromise && blockUIConfig.delay !== 0) {\n startPromise = $timeout(block, blockUIConfig.delay);\n } else if (blockUIConfig.delay === 0) {\n block();\n }\n\n function block () {\n startPromise = null;\n state.blocking = true;\n }\n };\n\n this._cancelStartTimeout = function() {\n if (startPromise) {\n $timeout.cancel(startPromise);\n startPromise = null;\n }\n };\n\n this.stop = function() {\n state.blockCount = Math.max(0, --state.blockCount);\n\n if (state.blockCount === 0) {\n self.reset(true);\n }\n };\n\n this.isBlocking = function () {\n return state.blocking;\n };\n\n this.message = function(value) {\n state.message = value;\n };\n\n this.pattern = function(regexp) {\n if (regexp !== undefined) {\n self._pattern = regexp;\n }\n\n return self._pattern;\n };\n\n this.reset = function(executeCallbacks) {\n \n self._cancelStartTimeout();\n state.blockCount = 0;\n state.blocking = false;\n\n // Restore the focus to the element that was active\n // before the block start, but not if the user has \n // focused something else while the block was active.\n\n if(self._restoreFocus && \n (!$document[0].activeElement || $document[0].activeElement === $body[0])) {\n \n //IE8 will throw if element for setting focus is invisible\n try {\n self._restoreFocus.focus();\n } catch(e1) {\n (function () {\n var elementToFocus = self._restoreFocus;\n $timeout(function() { \n if(elementToFocus) { \n try { \n elementToFocus.focus(); \n } catch(e2) { }\n } \n },100);\n })();\n }\n \n self._restoreFocus = null;\n }\n \n try {\n if (executeCallbacks) {\n angular.forEach(doneCallbacks, function(cb) {\n cb();\n });\n }\n } finally {\n doneCallbacks.length = 0;\n }\n };\n\n this.done = function(fn) {\n doneCallbacks.push(fn);\n };\n\n this.state = function() {\n return state;\n };\n\n this.addRef = function() {\n self._refs += 1;\n };\n\n this.release = function() {\n if(--self._refs <= 0) {\n mainBlock.instances._destroy(self);\n }\n };\n }\n\n var instances = [];\n\n instances.get = function(id) {\n\n if(!isNaN(id)) {\n throw new Error('BlockUI id cannot be a number');\n }\n\n var instance = instances[id];\n\n if(!instance) {\n // TODO: ensure no array instance trashing [xxx] -- current workaround: '_' + $scope.$id\n instance = instances[id] = new BlockUI(id);\n instances.push(instance);\n }\n\n return instance;\n };\n\n instances._destroy = function(idOrInstance) {\n if (angular.isString(idOrInstance)) {\n idOrInstance = instances[idOrInstance];\n }\n\n if (idOrInstance) {\n idOrInstance.reset();\n\n var i = blockUIUtils.indexOf(instances, idOrInstance);\n instances.splice(i, 1);\n\n delete instances[idOrInstance.state().id];\n }\n };\n \n instances.locate = function(request) {\n\n var result = [];\n\n // Add function wrappers that will be executed on every item\n // in the array.\n \n blockUIUtils.forEachFnHook(result, 'start');\n blockUIUtils.forEachFnHook(result, 'stop');\n\n var i = instances.length;\n\n while(i--) {\n var instance = instances[i];\n var pattern = instance._pattern;\n\n if(pattern && pattern.test(request.url)) {\n result.push(instance);\n }\n }\n\n if(result.length === 0) {\n result.push(mainBlock);\n }\n\n return result;\n };\n\n // Propagate the reset to all instances\n\n blockUIUtils.forEachFnHook(instances, 'reset');\n\n var mainBlock = instances.get('main');\n\n mainBlock.addRef();\n mainBlock.instances = instances;\n\n return mainBlock;\n}]);\n\n\nblkUI.factory('blockUIUtils', function() {\n\n var $ = angular.element;\n\n var utils = {\n buildRegExp: function(pattern) {\n var match = pattern.match(/^\\/(.*)\\/([gim]*)$/), regExp;\n\n if(match) {\n regExp = new RegExp(match[1], match[2]);\n } else {\n throw Error('Incorrect regular expression format: ' + pattern);\n }\n\n return regExp;\n },\n forEachFn: function(arr, fnName, args) {\n var i = arr.length;\n while(i--) {\n var t = arr[i];\n t[fnName].apply(t, args);\n }\n },\n forEachFnHook: function(arr, fnName) {\n arr[fnName] = function() {\n utils.forEachFn(this, fnName, arguments);\n }\n },\n isElementInBlockScope: function($element, blockScope) {\n var c = $element.inheritedData('block-ui');\n\n while(c) {\n if(c === blockScope) {\n return true;\n }\n\n c = c._parent;\n }\n\n return false;\n },\n findElement: function ($element, predicateFn, traverse) {\n var ret = null;\n\n if (predicateFn($element)) {\n ret = $element;\n } else {\n\n var $elements;\n\n if (traverse) {\n $elements = $element.parent();\n } else {\n $elements = $element.children();\n }\n\n var i = $elements.length;\n while (!ret && i--) {\n ret = utils.findElement($($elements[i]), predicateFn, traverse);\n }\n }\n\n return ret;\n },\n indexOf: function(arr, obj, start) {\n// if(Array.prototype.indexOf) {\n// return arr.indexOf(obj, start);\n// }\n\n for (var i = (start || 0), j = arr.length; i < j; i++) {\n if (arr[i] === obj) {\n return i;\n }\n }\n\n return -1;\n }\n };\n\n return utils;\n\n});\n// Automatically generated.\n// This file is already embedded in your main javascript output, there's no need to include this file\n// manually in the index.html. This file is only here for your debugging pleasures.\nangular.module('blockUI').run(['$templateCache', function($templateCache){\n $templateCache.put('angular-block-ui/angular-block-ui.ng.html', '
      {{ state.message }}
      ');\n}]);\n})(angular);\nif (typeof module !== \"undefined\") module.exports = \"blockUI\";\n//# sourceMappingURL=angular-block-ui.js.map\n","angular.module('ajoslin.promise-tracker', [])\n\n.provider('promiseTracker', function() {\n var trackers = {};\n\n this.$get = ['$q', '$timeout', function($q, $timeout) {\n function cancelTimeout(promise) {\n if (promise) {\n $timeout.cancel(promise);\n }\n }\n\n return function PromiseTracker(options) {\n options = options || {};\n\n //Array of promises being tracked\n var tracked = [];\n var self = {};\n\n //Allow an optional \"minimum duration\" that the tracker has to stay active for.\n var minDuration = options.minDuration;\n //Allow a delay that will stop the tracker from activating until that time is reached\n var activationDelay = options.activationDelay;\n\n var minDurationPromise;\n var activationDelayPromise;\n\n self.active = function() {\n //Even if we have a promise in our tracker, we aren't active until delay is elapsed\n if (activationDelayPromise) {\n return false;\n }\n return tracked.length > 0;\n };\n\n self.tracking = function() {\n //Even if we aren't active, we could still have a promise in our tracker\n return tracked.length > 0;\n };\n\n self.trackingCount = function() {\n return tracked.length;\n };\n\n self.destroy = self.cancel = function() {\n minDurationPromise = cancelTimeout(minDurationPromise);\n activationDelayPromise = cancelTimeout(activationDelayPromise);\n for (var i=tracked.length-1; i>=0; i--) {\n tracked[i].resolve();\n }\n tracked.length = 0;\n };\n\n //Create a promise that will make our tracker active until it is resolved.\n // @return deferred - our deferred object that is being tracked\n self.createPromise = function() {\n var deferred = $q.defer();\n tracked.push(deferred);\n\n //If the tracker was just inactive and this the first in the list of\n //promises, we reset our delay and minDuration\n //again.\n if (tracked.length === 1) {\n if (activationDelay) {\n activationDelayPromise = $timeout(function() {\n activationDelayPromise = cancelTimeout(activationDelayPromise);\n startMinDuration();\n }, activationDelay);\n } else {\n startMinDuration();\n }\n }\n\n deferred.promise.then(onDone(false), onDone(true));\n\n return deferred;\n\n function startMinDuration() {\n if (minDuration) {\n minDurationPromise = $timeout(angular.noop, minDuration);\n }\n }\n\n //Create a callback for when this promise is done. It will remove our\n //tracked promise from the array if once minDuration is complete\n function onDone(isError) {\n return function(value) {\n (minDurationPromise || $q.when()).then(function() {\n var index = tracked.indexOf(deferred);\n tracked.splice(index, 1);\n\n //If this is the last promise, cleanup the timeouts\n //for activationDelay\n if (tracked.length === 0) {\n activationDelayPromise = cancelTimeout(activationDelayPromise);\n }\n });\n };\n }\n };\n\n self.addPromise = function(promise) {\n if (Array.isArray(promise)) {\n return $q.all(promise.map(self.addPromise));\n }\n\n promise = promise && (promise.$promise || promise) || {};\n if (!promise.then) {\n throw new Error(\"promiseTracker#addPromise expects a promise object!\");\n }\n\n var deferred = self.createPromise();\n\n //When given promise is done, resolve our created promise\n //Allow $then for angular-resource objects\n promise.then(function success(value) {\n deferred.resolve(value);\n return value;\n }, function error(value) {\n deferred.reject(value);\n return $q.reject(value);\n });\n\n return deferred;\n };\n\n return self;\n };\n }];\n});\n","/*! \n * angular-loading-bar v0.9.0\n * https://chieffancypants.github.io/angular-loading-bar\n * Copyright (c) 2016 Wes Cruver\n * License: MIT\n */\n!function(){\"use strict\";angular.module(\"angular-loading-bar\",[\"cfp.loadingBarInterceptor\"]),angular.module(\"chieffancypants.loadingBar\",[\"cfp.loadingBarInterceptor\"]),angular.module(\"cfp.loadingBarInterceptor\",[\"cfp.loadingBar\"]).config([\"$httpProvider\",function(a){var b=[\"$q\",\"$cacheFactory\",\"$timeout\",\"$rootScope\",\"$log\",\"cfpLoadingBar\",function(b,c,d,e,f,g){function h(){d.cancel(j),g.complete(),l=0,k=0}function i(b){var d,e=c.get(\"$http\"),f=a.defaults;!b.cache&&!f.cache||b.cache===!1||\"GET\"!==b.method&&\"JSONP\"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d?void 0!==d.get(b.url):!1;return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var j,k=0,l=0,m=g.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||i(a)||(e.$broadcast(\"cfpLoadingBar:loading\",{url:a.url}),0===k&&(j=d(function(){g.start()},m)),k++,g.set(l/k)),a},response:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast(\"cfpLoadingBar:loaded\",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),a):(f.error(\"Broken interceptor detected: Config object not supplied in response:\\n https://github.com/chieffancypants/angular-loading-bar/pull/50\"),a)},responseError:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast(\"cfpLoadingBar:loaded\",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),b.reject(a)):(f.error(\"Broken interceptor detected: Config object not supplied in rejection:\\n https://github.com/chieffancypants/angular-loading-bar/pull/50\"),b.reject(a))}}}];a.interceptors.push(b)}]),angular.module(\"cfp.loadingBar\",[]).provider(\"cfpLoadingBar\",function(){this.autoIncrement=!0,this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector=\"body\",this.spinnerTemplate='
      ',this.loadingBarTemplate='
      ',this.$get=[\"$injector\",\"$document\",\"$timeout\",\"$rootScope\",function(a,b,c,d){function e(){if(k||(k=a.get(\"$animate\")),c.cancel(m),!r){var e=b[0],g=e.querySelector?e.querySelector(n):b.find(n)[0];g||(g=e.getElementsByTagName(\"body\")[0]);var h=angular.element(g),i=g.lastChild&&angular.element(g.lastChild);d.$broadcast(\"cfpLoadingBar:started\"),r=!0,v&&k.enter(o,h,i),u&&k.enter(q,h,o),f(w)}}function f(a){if(r){var b=100*a+\"%\";p.css(\"width\",b),s=a,t&&(c.cancel(l),l=c(function(){g()},250))}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;var c=h()+a;f(c)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get(\"$animate\")),d.$broadcast(\"cfpLoadingBar:completed\"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find(\"div\").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.autoIncrement,u=this.includeSpinner,v=this.includeBar,w=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,autoIncrement:this.autoIncrement,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}();","/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\t/*eslint-disable */\r\n\tobj._leaflet_id = obj._leaflet_id || ++lastId;\r\n\treturn obj._leaflet_id;\r\n\t/* eslint-enable */\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t min = range[0],\r\n\t d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, digits?: Number): Number\r\n// Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.\r\nexport function formatNum(num, digits) {\r\n\tvar pow = Math.pow(10, (digits === undefined ? 6 : digits));\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_-]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n","import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t\tdelete props.statics;\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t\tdelete props.includes;\r\n\t}\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tprops.options = Util.extend(Util.create(proto.options), props.options);\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tUtil.extend(this.prototype, props);\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n","import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!types) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context) {\r\n\t\tthis._events = this._events || {};\r\n\r\n\t\t/* get/init listeners for type */\r\n\t\tvar typeListeners = this._events[type];\r\n\t\tif (!typeListeners) {\r\n\t\t\ttypeListeners = [];\r\n\t\t\tthis._events[type] = typeListeners;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\t\tvar newListener = {fn: fn, ctx: context},\r\n\t\t listeners = typeListeners;\r\n\r\n\t\t// check if fn already there\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlisteners.push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t i,\r\n\t\t len;\r\n\r\n\t\tif (!this._events) { return; }\r\n\r\n\t\tlisteners = this._events[type];\r\n\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!fn) {\r\n\t\t\t// Set all removed listeners to noop so they are not called if remove happens in fire\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tif (listeners) {\r\n\r\n\t\t\t// find fn and remove it\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tvar l = listeners[i];\r\n\t\t\t\tif (l.ctx !== context) { continue; }\r\n\t\t\t\tif (l.fn === fn) {\r\n\r\n\t\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\t\tl.fn = Util.falseFn;\r\n\r\n\t\t\t\t\tif (this._firingCount) {\r\n\t\t\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlisteners.splice(i, 1);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide an data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\tl.fn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\tlistens: function (type, propagate) {\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) { return true; }\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis.once(type, types[type], fn);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar handler = Util.bind(function () {\r\n\t\t\tthis\r\n\t\t\t .off(types, fn, context)\r\n\t\t\t .off(types, handler, context);\r\n\t\t}, this);\r\n\r\n\t\t// add a listener that's executed once and removed after that\r\n\t\treturn this\r\n\t\t .on(types, fn, context)\r\n\t\t .on(types, handler, context);\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n","import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t formatNum(this.x) + ', ' +\r\n\t\t formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n","import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\textend: function (point) { // (Point)\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = point.clone();\r\n\t\t\tthis.max = point.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(point.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(point.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(point.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(point.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn new Point(\r\n\t\t (this.min.x + this.max.x) / 2,\r\n\t\t (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn new Point(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn new Point(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t (max.x <= this.max.x) &&\r\n\t\t (min.y >= this.min.y) &&\r\n\t\t (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t}\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n","import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n","import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t Math.abs(this.lat - obj.lat),\r\n\t\t Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n","\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](http://en.wikipedia.org/wiki/Coordinate_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t s = this.scale(zoom),\r\n\t\t min = this.transformation.transform(b.min, s),\r\n\t\t max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t newCenter = this.wrapLatLng(center),\r\n\t\t latShift = center.lat - newCenter.lat,\r\n\t\t lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t ne = bounds.getNorthEast(),\r\n\t\t newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t max = this.MAX_LATITUDE,\r\n\t\t lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n","import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see http://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t lat1 = latlng1.lat * rad,\n\t\t lat2 = latlng2.lat * rad,\n\t\t sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n","import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t (point.x / scale - this._b) / this._a,\r\n\t\t (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n","import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n","import * as Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n","import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nexport var ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nexport var ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nexport var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nexport var webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// `true` for any browser running on an Android platform.\r\nexport var android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; `true` for browsers running on Android 2 or Android 3.\r\nexport var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome)\r\nexport var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nexport var opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nexport var chrome = !edge && userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nexport var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nexport var safari = !chrome && userAgentContains('safari');\r\n\r\nexport var phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nexport var opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nexport var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nexport var ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nexport var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nexport var gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nexport var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nexport var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nexport var mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nexport var mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nexport var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nexport var pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// This does not necessarily mean that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nexport var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||\r\n\t\t(window.DocumentTouch && document instanceof window.DocumentTouch));\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nexport var mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nexport var mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nexport var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nexport var passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () { // eslint-disable-line getter-return\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n}());\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nexport var canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nexport var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nexport var vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n","import * as DomEvent from './DomEvent';\nimport * as Util from '../core/Util';\nimport * as Browser from '../core/Browser';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n\nvar POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';\nvar POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';\nvar POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\n\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler, id) {\n\tif (type === 'touchstart') {\n\t\t_addPointerStart(obj, handler, id);\n\n\t} else if (type === 'touchmove') {\n\t\t_addPointerMove(obj, handler, id);\n\n\t} else if (type === 'touchend') {\n\t\t_addPointerEnd(obj, handler, id);\n\t}\n\n\treturn this;\n}\n\nexport function removePointerListener(obj, type, id) {\n\tvar handler = obj['_leaflet_' + type + id];\n\n\tif (type === 'touchstart') {\n\t\tobj.removeEventListener(POINTER_DOWN, handler, false);\n\n\t} else if (type === 'touchmove') {\n\t\tobj.removeEventListener(POINTER_MOVE, handler, false);\n\n\t} else if (type === 'touchend') {\n\t\tobj.removeEventListener(POINTER_UP, handler, false);\n\t\tobj.removeEventListener(POINTER_CANCEL, handler, false);\n\t}\n\n\treturn this;\n}\n\nfunction _addPointerStart(obj, handler, id) {\n\tvar onDown = Util.bind(function (e) {\n\t\t// IE10 specific: MsTouch needs preventDefault. See #2000\n\t\tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n\t\t\tDomEvent.preventDefault(e);\n\t\t}\n\n\t\t_handlePointer(e, handler);\n\t});\n\n\tobj['_leaflet_touchstart' + id] = onDown;\n\tobj.addEventListener(POINTER_DOWN, onDown, false);\n\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n}\n\nfunction _handlePointer(e, handler) {\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _addPointerMove(obj, handler, id) {\n\tvar onMove = function (e) {\n\t\t// don't fire touch moves when mouse isn't down\n\t\tif ((e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) && e.buttons === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchmove' + id] = onMove;\n\tobj.addEventListener(POINTER_MOVE, onMove, false);\n}\n\nfunction _addPointerEnd(obj, handler, id) {\n\tvar onUp = function (e) {\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchend' + id] = onUp;\n\tobj.addEventListener(POINTER_UP, onUp, false);\n\tobj.addEventListener(POINTER_CANCEL, onUp, false);\n}\n","import * as Browser from '../core/Browser';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n */\r\n\r\nvar _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';\r\nvar _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';\r\nvar _pre = '_leaflet_';\r\n\r\n// inspired by Zepto touch code by Thomas Fuchs\r\nexport function addDoubleTapListener(obj, handler, id) {\r\n\tvar last, touch,\r\n\t doubleTap = false,\r\n\t delay = 250;\r\n\r\n\tfunction onTouchStart(e) {\r\n\r\n\t\tif (Browser.pointer) {\r\n\t\t\tif (!e.isPrimary) { return; }\r\n\t\t\tif (e.pointerType === 'mouse') { return; } // mouse fires native dblclick\r\n\t\t} else if (e.touches.length > 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar now = Date.now(),\r\n\t\t delta = now - (last || now);\r\n\r\n\t\ttouch = e.touches ? e.touches[0] : e;\r\n\t\tdoubleTap = (delta > 0 && delta <= delay);\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tfunction onTouchEnd(e) {\r\n\t\tif (doubleTap && !touch.cancelBubble) {\r\n\t\t\tif (Browser.pointer) {\r\n\t\t\t\tif (e.pointerType === 'mouse') { return; }\r\n\t\t\t\t// work around .type being readonly with MSPointer* events\r\n\t\t\t\tvar newTouch = {},\r\n\t\t\t\t prop, i;\r\n\r\n\t\t\t\tfor (i in touch) {\r\n\t\t\t\t\tprop = touch[i];\r\n\t\t\t\t\tnewTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;\r\n\t\t\t\t}\r\n\t\t\t\ttouch = newTouch;\r\n\t\t\t}\r\n\t\t\ttouch.type = 'dblclick';\r\n\t\t\ttouch.button = 0;\r\n\t\t\thandler(touch);\r\n\t\t\tlast = null;\r\n\t\t}\r\n\t}\r\n\r\n\tobj[_pre + _touchstart + id] = onTouchStart;\r\n\tobj[_pre + _touchend + id] = onTouchEnd;\r\n\tobj[_pre + 'dblclick' + id] = handler;\r\n\r\n\tobj.addEventListener(_touchstart, onTouchStart, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.addEventListener(_touchend, onTouchEnd, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t// On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),\r\n\t// the browser doesn't fire touchend/pointerup events but does fire\r\n\t// native dblclicks. See #4127.\r\n\t// Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.\r\n\tobj.addEventListener('dblclick', handler, false);\r\n\r\n\treturn this;\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, id) {\r\n\tvar touchstart = obj[_pre + _touchstart + id],\r\n\t touchend = obj[_pre + _touchend + id],\r\n\t dblclick = obj[_pre + 'dblclick' + id];\r\n\r\n\tobj.removeEventListener(_touchstart, touchstart, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.removeEventListener(_touchend, touchend, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.removeEventListener('dblclick', dblclick, false);\r\n\r\n\treturn this;\r\n}\r\n","import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport * as Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outline;\r\n\telement.style.outline = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outline = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n","import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else if (types) {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t} else {\r\n\t\tfor (var j in obj[eventsKey]) {\r\n\t\t\tremoveOne(obj, j, obj[eventsKey][j]);\r\n\t\t}\r\n\t\tdelete obj[eventsKey];\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction browserFiresNativeDblClick() {\r\n\t// See https://github.com/w3c/pointerevents/issues/171\r\n\tif (Browser.pointer) {\r\n\t\treturn !(Browser.edge || Browser.safari);\r\n\t}\r\n}\r\n\r\nvar mouseSubst = {\r\n\tmouseenter: 'mouseover',\r\n\tmouseleave: 'mouseout',\r\n\twheel: !('onwheel' in window) && 'mousewheel'\r\n};\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\taddPointerListener(obj, type, handler, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && !browserFiresNativeDblClick()) {\r\n\t\taddDoubleTapListener(obj, handler, id);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' || type === 'mousewheel') {\r\n\t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.addEventListener(type, originalHandler, false);\r\n\t\t}\r\n\r\n\t} else if ('attachEvent' in obj) {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context) {\r\n\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : ''),\r\n\t handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && !browserFiresNativeDblClick()) {\r\n\t\tremoveDoubleTapListener(obj, id);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n\t} else if ('detachEvent' in obj) {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) { // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\tskipped(e);\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'wheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'doubleclick'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick', stopPropagation);\r\n\taddOne(el, 'click', fakeStop);\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `
      ` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n// Chrome on Win scrolls double the pixels as in other platforms (see #4538),\r\n// and Firefox scrolls device pixels, not CSS pixels\r\nvar wheelPxFactor =\r\n\t(Browser.win && Browser.chrome) ? 2 * window.devicePixelRatio :\r\n\tBrowser.gecko ? window.devicePixelRatio : 1;\r\n\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a wheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t 0;\r\n}\r\n\r\nvar skipEvents = {};\r\n\r\nexport function fakeStop(e) {\r\n\t// fakes stopPropagation by setting a special event flag, checked/reset with skipped(e)\r\n\tskipEvents[e.type] = true;\r\n}\r\n\r\nexport function skipped(e) {\r\n\tvar events = skipEvents[e.type];\r\n\t// reset when checking, as it's only used in map container and propagates outside of the map\r\n\tskipEvents[e.type] = false;\r\n\treturn events;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n","import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var fx = new L.PosAnimation();\n * fx.run(el, [300, 500], 0.5);\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](http://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n","import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t to = this.project(targetCenter),\r\n\t\t size = this.getSize(),\r\n\t\t startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t u1 = (to.distanceTo(from)) || 1,\r\n\t\t rho = 1.42,\r\n\t\t rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t s2 = i ? w1 : w0,\r\n\t\t\t t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t b = t1 / b1,\r\n\t\t\t sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t // thus triggering an infinite loop in flyTo\r\n\t\t\t var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t S = (r(1) - r0) / rho,\r\n\t\t duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: LatLngBounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this.off('moveend', this._panInsideMaxBounds);\r\n\t\t} else if (this.options.maxBounds) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// `padding`, `paddingTopLeft` and `paddingTopRight` options to fit\r\n\t// the display to more restricted bounds, like [`fitBounds`](#map-fitbounds).\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t center = this.getCenter(),\r\n\t\t pixelCenter = this.project(center),\r\n\t\t pixelPoint = this.project(latlng),\r\n\t\t pixelBounds = this.getPixelBounds(),\r\n\t\t halfPixelBounds = pixelBounds.getSize().divideBy(2),\r\n\t\t paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]);\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar diff = pixelCenter.subtract(pixelPoint),\r\n\t\t\t newCenter = toPoint(pixelPoint.x + diff.x, pixelPoint.y + diff.y);\r\n\r\n\t\t\tif (pixelPoint.x < paddedBounds.min.x || pixelPoint.x > paddedBounds.max.x) {\r\n\t\t\t\tnewCenter.x = pixelCenter.x - diff.x;\r\n\t\t\t\tif (diff.x > 0) {\r\n\t\t\t\t\tnewCenter.x += halfPixelBounds.x - paddingTL.x;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.x -= halfPixelBounds.x - paddingBR.x;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (pixelPoint.y < paddedBounds.min.y || pixelPoint.y > paddedBounds.max.y) {\r\n\t\t\t\tnewCenter.y = pixelCenter.y - diff.y;\r\n\t\t\t\tif (diff.y > 0) {\r\n\t\t\t\t\tnewCenter.y += halfPixelBounds.y - paddingTL.y;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.y -= halfPixelBounds.y - paddingBR.y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.panTo(this.unproject(newCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t oldCenter = oldSize.divideBy(2).round(),\r\n\t\t newCenter = newSize.divideBy(2).round(),\r\n\t\t offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: \r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tvar c = error.code,\r\n\t\t message = error.message ||\r\n\t\t (c === 1 ? 'permission denied' :\r\n\t\t (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t lng = pos.coords.longitude,\r\n\t\t latlng = new LatLng(lat, lng),\r\n\t\t bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter;\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t min = this.getMinZoom(),\r\n\t\t max = this.getMaxZoom(),\r\n\t\t nw = bounds.getNorthWest(),\r\n\t\t se = bounds.getSouthEast(),\r\n\t\t size = this.getSize().subtract(padding),\r\n\t\t boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t scalex = size.x / boundsSize.x,\r\n\t\t scaley = size.y / boundsSize.y,\r\n\t\t scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, false)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\t// @event zoom: Event\r\n\t\t// Fired repeatedly during any change in zoom level, including zoom\r\n\t\t// and fly animations.\r\n\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired repeatedly during any movement of the map, including pan and\r\n\t\t// fly animations.\r\n\t\treturn this.fire('move', data);\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map has changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing (e.g. user stopped\r\n\t\t// dragging the map).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: http://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t target,\r\n\t\t isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t src = e.target || e.srcElement,\r\n\t\t dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && !e._simulated && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && DomEvent.isExternalTarget(src, e)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tif (!this._loaded || DomEvent.skipped(e)) { return; }\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown' || type === 'keypress' || type === 'keyup' || type === 'keydown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(e.target || e.srcElement);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, targets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, targets);\r\n\t\t}\r\n\r\n\t\tif (e._stopped) { return; }\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\ttargets = (targets || []).concat(this._findEventTargets(e, type));\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tvar target = targets[0];\r\n\t\tif (type === 'contextmenu' && target.listens(type, true)) {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (offset.round().equals([0, 0])) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t ),\r\n\t\t minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t max = this.getMaxZoom(),\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t ._moveStart(true, false)\r\n\t\t\t ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom);\r\n\r\n\t\t// This anim frame should prevent an obscure iOS webkit tile loading race condition.\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis._moveEnd(true);\r\n\t\t}, this);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `
      ` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `
      ` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n","\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t pos = this.getPosition(),\r\n\t\t corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t l = 'leaflet-',\r\n\t\t container = this._controlContainer =\r\n\t\t DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n","\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](http://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n * \"\": layer1,\r\n * \"\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\" My Layer\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover or touch.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t container = this._container = DomUtil.create('div', className),\r\n\t\t collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tif (!Browser.android) {\r\n\t\t\t\tDomEvent.on(container, {\r\n\t\t\t\t\tmouseenter: this.expand,\r\n\t\t\t\t\tmouseleave: this.collapse\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\r\n\t\tif (Browser.touch) {\r\n\t\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\t\tDomEvent.on(link, 'click', this.expand, this);\r\n\t\t} else {\r\n\t\t\tDomEvent.on(link, 'focus', this.expand, this);\r\n\t\t}\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t checked = this._map.hasLayer(obj.layer),\r\n\t\t input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('div');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t input,\r\n\t\t layer,\r\n\t\t zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expand: function () {\r\n\t\t// Backward compatibility, remove me in 1.1.\r\n\t\treturn this.expand();\r\n\t},\r\n\r\n\t_collapse: function () {\r\n\t\t// Backward compatibility, remove me in 1.1.\r\n\t\treturn this.collapse();\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n","\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '+'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '+',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '−'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '−',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t options = this.options;\r\n\r\n\t\tthis._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t zoomName + '-in', container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n","\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t container = DomUtil.create('div', className),\n\t\t options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t d >= 5 ? 5 :\n\t\t d >= 3 ? 3 :\n\t\t d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n","\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: 'Leaflet'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String): this\r\n\t// Sets the text before the attributions.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'Vector data © Mapbox'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' | ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n","import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n","import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n","import * as Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n","import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Douglas-Peucker algorithm](http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](http://mourner.github.com/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t // stage 1: vertex reduction\r\n\t points = _reducePoints(points, sqTolerance);\r\n\r\n\t // stage 2: Douglas-Peucker simplification\r\n\t points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t markers = new ArrayConstructor(len);\r\n\r\n\t markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t codeB = _getBitCode(b, bounds),\r\n\r\n\t codeOut, p, newCode;\r\n\r\n\t // save 2nd code to avoid calculating it on the next segment\r\n\t _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t dy = b.y - a.y,\r\n\t min = bounds.min,\r\n\t max = bounds.max,\r\n\t x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t y = p1.y,\r\n\t dx = p2.x - x,\r\n\t dy = p2.y - y,\r\n\t dot = dx * dx + dy * dy,\r\n\t t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n","import {Evented} from '../core/Events';\r\nimport * as Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\nvar END = {\r\n\tmousedown: 'mouseup',\r\n\ttouchstart: 'touchend',\r\n\tpointerdown: 'touchend',\r\n\tMSPointerDown: 'touchend'\r\n};\r\nvar MOVE = {\r\n\tmousedown: 'mousemove',\r\n\ttouchstart: 'touchmove',\r\n\tpointerdown: 'touchmove',\r\n\tMSPointerDown: 'touchmove'\r\n};\r\n\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag();\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this; // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tDomEvent.on(document, MOVE[e.type], this._onMove, this);\r\n\t\tDomEvent.on(document, END[e.type], this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\t\t\tthis._startPos = DomUtil.getPosition(this._element).subtract(offset);\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tUtil.cancelAnimFrame(this._animRequest);\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._animRequest = Util.requestAnimFrame(this._updatePosition, this, true);\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function (e) {\r\n\t\t// Ignore simulated events, since we handle both touch and\r\n\t\t// mouse explicitly; otherwise we risk getting duplicates of\r\n\t\t// touch events, see #4315.\r\n\t\t// Also ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (e._simulated || !this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function () {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tfor (var i in MOVE) {\r\n\t\t\tDomEvent.off(document, MOVE[i], this._onMove, this);\r\n\t\t\tDomEvent.off(document, END[i], this._onUp, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tif (this._moved && this._moving) {\r\n\t\t\t// ensure drag is not fired after dragend\r\n\t\t\tUtil.cancelAnimFrame(this._animRequest);\r\n\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\t}\r\n\r\n});\r\n","import * as LineUtil from './LineUtil';\r\n\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t edges = [1, 4, 2, 8],\r\n\t i, j, k,\r\n\t a, b,\r\n\t len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n","import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t r = this.R,\r\n\t\t y = latlng.lat * d,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t r = this.R,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t ts = Math.exp(-point.y / r),\r\n\t\t phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n","import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n","import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n","import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n","import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\t//\n\t// @alternative\n\t// @method removeFrom(group: LayerGroup): this\n\t// Removes the layer from the given `LayerGroup`\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tif (this.getAttribution && map.attributionControl) {\n\t\t\tmap.attributionControl.addAttribution(this.getAttribution());\n\t\t}\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tif (layer.getAttribution && this.attributionControl) {\n\t\t\tthis.attributionControl.removeAttribution(layer.getAttribution());\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn !!layer && (Util.stamp(layer) in this._layers);\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t * layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t maxZoom = -Infinity,\n\t\t oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n","\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\tif (!layer) { return false; }\r\n\t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n\t\treturn layerId in this._layers;\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n","import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n * * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n * * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n * * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n// Create a feature group, optionally given an initial set of layers and an `options` object.\r\nexport var featureGroup = function (layers, options) {\r\n\treturn new FeatureGroup(layers, options);\r\n};\r\n","import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport {retina} from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n * iconUrl: 'my-icon.png',\r\n * iconRetinaUrl: 'my-icon@2x.png',\r\n * iconSize: [38, 95],\r\n * iconAnchor: [22, 94],\r\n * popupAnchor: [-3, -76],\r\n * shadowUrl: 'my-icon-shadow.png',\r\n * shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n * shadowSize: [68, 95],\r\n * shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0]\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n","import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl: 'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl: 'marker-shadow.png',\n\t\ticonSize: [25, 41],\n\t\ticonAnchor: [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize: [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (!IconDefault.imagePath) {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div', 'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\n\t\tif (path === null || path.indexOf('url') !== 0) {\n\t\t\tpath = '';\n\t\t} else {\n\t\t\tpath = path.replace(/^url\\([\"']?/, '').replace(/marker-icon\\.png[\"']?\\)$/, '');\n\t\t}\n\n\t\treturn path;\n\t}\n});\n","import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t map = marker._map,\n\t\t speed = this._marker.options.autoPanSpeed,\n\t\t padding = this._marker.options.autoPanPadding,\n\t\t iconPos = DomUtil.getPosition(marker._icon),\n\t\t bounds = map.getPixelBounds(),\n\t\t origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\n\t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n\t\tthis._marker.closePopup && this._marker.closePopup();\n\n\t\tthis._marker\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t shadow = marker._shadow,\n\t\t iconPos = DomUtil.getPosition(marker._icon),\n\t\t latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t .fire('move', e)\n\t\t .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t .fire('moveend')\n\t\t .fire('dragend', e);\n\t}\n});\n","import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the icon image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option shadowPane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n","import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) + this._renderer.options.tolerance;\n\t}\n});\n","import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t r2 = this._radiusY || r,\n\t\t w = this._clickTolerance(),\n\t\t p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n","import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t lat = this._latlng.lat,\n\t\t map = this._map,\n\t\t crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t latR = (this._mRadius / Earth.R) / d,\n\t\t\t top = map.project([lat + latR, lng]),\n\t\t\t bottom = map.project([lat - latR, lng]),\n\t\t\t p = top.add(bottom).divideBy(2),\n\t\t\t lat2 = map.unproject(p).lat,\n\t\t\t lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n","import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t minPoint = null,\n\t\t closest = LineUtil._sqClosestPointOnSegment,\n\t\t p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\n\t\tvar i, halfDist, segDist, dist, p1, p2, ratio,\n\t\t points = this._rings[0],\n\t\t len = points.length;\n\n\t\tif (!len) { return null; }\n\n\t\t// polyline centroid algorithm; only uses the first ring if there are multiple\n\n\t\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\n\t\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\n\t\t}\n\n\t\t// The line is so small in the current view that all points are on the same pixel.\n\t\tif (halfDist === 0) {\n\t\t\treturn this._map.layerPointToLatLng(points[0]);\n\t\t}\n\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\n\t\t\tp1 = points[i];\n\t\t\tp2 = points[i + 1];\n\t\t\tsegDist = p1.distanceTo(p2);\n\t\t\tdist += segDist;\n\n\t\t\tif (dist > halfDist) {\n\t\t\t\tratio = (dist - halfDist) / segDist;\n\t\t\t\treturn this._map.layerPointToLatLng([\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t p = new Point(w, w);\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t len = latlngs.length,\n\t\t i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n","import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n * [ // first polygon\n * [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n * [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ],\n * [ // second polygon\n * [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n * ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\n\t\tvar i, j, p1, p2, f, area, x, y, center,\n\t\t points = this._rings[0],\n\t\t len = points.length;\n\n\t\tif (!len) { return null; }\n\n\t\t// polygon centroid algorithm; only uses the first ring if there are multiple\n\n\t\tarea = x = y = 0;\n\n\t\tfor (i = 0, j = len - 1; i < len; j = i++) {\n\t\t\tp1 = points[i];\n\t\t\tp2 = points[j];\n\n\t\t\tf = p1.y * p2.x - p2.y * p1.x;\n\t\t\tx += (p1.x + p2.x) * f;\n\t\t\ty += (p1.y + p2.y) * f;\n\t\t\tarea += f * 3;\n\t\t}\n\n\t\tif (area === 0) {\n\t\t\t// Polygon is so small that all points are on same pixel.\n\t\t\tcenter = points[0];\n\t\t} else {\n\t\t\tcenter = [x / area, y / area];\n\t\t}\n\t\treturn this._map.layerPointToLatLng(center);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t w = this.options.weight,\n\t\t p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n","import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t coords = geometry ? geometry.coordinates : null,\r\n\t layers = [],\r\n\t pointToLayer = options && options.pointToLayer,\r\n\t _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar layer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (layer) {\r\n\t\t\t\tlayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\nexport function latLngToCoords(latlng, precision) {\r\n\tprecision = typeof precision === 'number' ? precision : 6;\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed) {\r\n\t\tcoords.push(coords[0]);\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number): Object\r\n// `precision` is the number of decimal places for coordinates.\r\n// The default value is 6 places.\r\n// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number): Object\r\n\t// `precision` is the number of decimal places for coordinates.\r\n\t// The default value is 6 places.\r\n\t// Returns a [`GeoJSON`](http://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n","import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t bounds = new Bounds(\r\n\t\t this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n","import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`