{"version":3,"file":"video.min.js","sources":["node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js","node_modules/lodash-compat/date/now.js","node_modules/lodash-compat/function/debounce.js","node_modules/lodash-compat/function/restParam.js","node_modules/lodash-compat/function/throttle.js","node_modules/lodash-compat/internal/arrayCopy.js","node_modules/lodash-compat/internal/arrayEach.js","node_modules/lodash-compat/internal/baseCopy.js","node_modules/lodash-compat/internal/baseFor.js","node_modules/lodash-compat/internal/baseForIn.js","node_modules/lodash-compat/internal/baseMerge.js","node_modules/lodash-compat/internal/baseMergeDeep.js","node_modules/lodash-compat/internal/baseProperty.js","node_modules/lodash-compat/internal/bindCallback.js","node_modules/lodash-compat/internal/createAssigner.js","node_modules/lodash-compat/internal/createBaseFor.js","node_modules/lodash-compat/internal/getLength.js","node_modules/lodash-compat/internal/getNative.js","node_modules/lodash-compat/internal/isArrayLike.js","node_modules/lodash-compat/internal/isHostObject.js","node_modules/lodash-compat/internal/isIndex.js","node_modules/lodash-compat/internal/isIterateeCall.js","node_modules/lodash-compat/internal/isLength.js","node_modules/lodash-compat/internal/isObjectLike.js","node_modules/lodash-compat/internal/shimKeys.js","node_modules/lodash-compat/internal/toObject.js","node_modules/lodash-compat/lang/isArguments.js","node_modules/lodash-compat/lang/isArray.js","node_modules/lodash-compat/lang/isFunction.js","node_modules/lodash-compat/lang/isNative.js","node_modules/lodash-compat/lang/isObject.js","node_modules/lodash-compat/lang/isPlainObject.js","node_modules/lodash-compat/lang/isString.js","node_modules/lodash-compat/lang/isTypedArray.js","node_modules/lodash-compat/lang/toPlainObject.js","node_modules/lodash-compat/object/keys.js","node_modules/lodash-compat/object/keysIn.js","node_modules/lodash-compat/object/merge.js","node_modules/lodash-compat/support.js","node_modules/lodash-compat/utility/identity.js","node_modules/object.assign/hasSymbols.js","node_modules/object.assign/implementation.js","node_modules/object.assign/index.js","node_modules/object.assign/node_modules/define-properties/index.js","node_modules/object.assign/node_modules/define-properties/node_modules/foreach/index.js","node_modules/object.assign/node_modules/function-bind/implementation.js","node_modules/object.assign/node_modules/function-bind/index.js","node_modules/object.assign/node_modules/object-keys/index.js","node_modules/object.assign/node_modules/object-keys/isArguments.js","node_modules/object.assign/polyfill.js","node_modules/object.assign/shim.js","node_modules/safe-json-parse/tuple.js","node_modules/tsml/tsml.js","node_modules/xhr/index.js","node_modules/xhr/node_modules/is-function/index.js","node_modules/xhr/node_modules/once/once.js","node_modules/xhr/node_modules/parse-headers/node_modules/for-each/index.js","node_modules/xhr/node_modules/parse-headers/node_modules/trim/index.js","node_modules/xhr/node_modules/parse-headers/parse-headers.js","node_modules/xhr/node_modules/xtend/immutable.js","src/js/big-play-button.js","src/js/button.js","src/js/clickable-component.js","src/js/close-button.js","src/js/component.js","src/js/control-bar/control-bar.js","src/js/control-bar/fullscreen-toggle.js","src/js/control-bar/live-display.js","src/js/control-bar/mute-toggle.js","src/js/control-bar/play-toggle.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js","src/js/control-bar/progress-control/load-progress-bar.js","src/js/control-bar/progress-control/mouse-time-display.js","src/js/control-bar/progress-control/play-progress-bar.js","src/js/control-bar/progress-control/progress-control.js","src/js/control-bar/progress-control/seek-bar.js","src/js/control-bar/progress-control/tooltip-progress-bar.js","src/js/control-bar/spacer-controls/custom-control-spacer.js","src/js/control-bar/spacer-controls/spacer.js","src/js/control-bar/text-track-controls/caption-settings-menu-item.js","src/js/control-bar/text-track-controls/captions-button.js","src/js/control-bar/text-track-controls/chapters-button.js","src/js/control-bar/text-track-controls/chapters-track-menu-item.js","src/js/control-bar/text-track-controls/descriptions-button.js","src/js/control-bar/text-track-controls/off-text-track-menu-item.js","src/js/control-bar/text-track-controls/subtitles-button.js","src/js/control-bar/text-track-controls/text-track-button.js","src/js/control-bar/text-track-controls/text-track-menu-item.js","src/js/control-bar/time-controls/current-time-display.js","src/js/control-bar/time-controls/duration-display.js","src/js/control-bar/time-controls/remaining-time-display.js","src/js/control-bar/time-controls/time-divider.js","src/js/control-bar/volume-control/volume-bar.js","src/js/control-bar/volume-control/volume-control.js","src/js/control-bar/volume-control/volume-level.js","src/js/control-bar/volume-menu-button.js","src/js/error-display.js","src/js/event-target.js","src/js/extend.js","src/js/fullscreen-api.js","src/js/loading-spinner.js","src/js/media-error.js","src/js/menu/menu-button.js","src/js/menu/menu-item.js","src/js/menu/menu.js","src/js/modal-dialog.js","src/js/player.js","src/js/plugins.js","src/js/popup/popup-button.js","src/js/popup/popup.js","src/js/poster-image.js","src/js/setup.js","src/js/slider/slider.js","src/js/tech/flash-rtmp.js","src/js/tech/flash.js","src/js/tech/html5.js","src/js/tech/loader.js","src/js/tech/tech.js","src/js/tracks/html-track-element-list.js","src/js/tracks/html-track-element.js","src/js/tracks/text-track-cue-list.js","src/js/tracks/text-track-display.js","src/js/tracks/text-track-enums.js","src/js/tracks/text-track-list-converter.js","src/js/tracks/text-track-list.js","src/js/tracks/text-track-settings.js","src/js/tracks/text-track.js","src/js/utils/browser.js","src/js/utils/buffer.js","src/js/utils/create-deprecation-proxy.js","src/js/utils/dom.js","src/js/utils/events.js","src/js/utils/fn.js","src/js/utils/format-time.js","src/js/utils/guid.js","src/js/utils/log.js","src/js/utils/merge-options.js","src/js/utils/stylesheet.js","src/js/utils/time-ranges.js","src/js/utils/to-title-case.js","src/js/utils/url.js","src/js/video.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","videojs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"_dereq_","topLevel","minDoc","document","doccy","min-document",2,3,4,"getNative","nativeNow","Date","now","getTime","../internal/getNative",5,"debounce","func","wait","options","cancel","timeoutId","clearTimeout","maxTimeoutId","lastCalled","trailingCall","undefined","complete","isCalled","id","result","apply","thisArg","args","delayed","remaining","stamp","setTimeout","maxDelayed","trailing","debounced","arguments","leading","maxWait","leadingCall","TypeError","FUNC_ERROR_TEXT","isObject","nativeMax","Math","max","../date/now","../lang/isObject",6,"restParam","start","index","rest","Array","otherArgs",7,"throttle","./debounce",8,"arrayCopy","source","array",9,"arrayEach","iteratee",10,"baseCopy","props","object","key",11,"createBaseFor","baseFor","./createBaseFor",12,"baseForIn","keysIn","../object/keysIn","./baseFor",13,"baseMerge","customizer","stackA","stackB","isSrcArr","isArrayLike","isArray","isTypedArray","keys","srcValue","isObjectLike","baseMergeDeep","value","isCommon","../lang/isArray","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike",14,"mergeFunc","isPlainObject","isArguments","toPlainObject","push","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy",15,"baseProperty","toObject","./toObject",16,"bindCallback","argCount","identity","collection","accumulator","other","../utility/identity",17,"createAssigner","assigner","sources","guard","isIterateeCall","../function/restParam","./bindCallback","./isIterateeCall",18,"fromRight","keysFunc","iterable",19,"getLength","./baseProperty",20,"isNative","../lang/isNative",21,"isLength","./getLength","./isLength",22,"isHostObject","Object","toString",23,"isIndex","reIsUint","test","MAX_SAFE_INTEGER",24,"type","./isIndex",25,26,27,"shimKeys","propsLength","allowIndexes","isString","hasOwnProperty","objectProto","prototype","../lang/isString",28,"support","unindexedChars","charAt","../support",29,"propertyIsEnumerable","../internal/isArrayLike","../internal/isObjectLike",30,"arrayTag","objToString","nativeIsArray","../internal/isLength",31,"isFunction","funcTag","./isObject",32,"reIsNative","fnToString","reIsHostCtor","Function","RegExp","replace","../internal/isHostObject","./isFunction",33,34,"Ctor","objectTag","constructor","ownLast","subValue","../internal/baseForIn","./isArguments",35,"stringTag",36,"typedArrayTags","argsTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag",37,"../internal/baseCopy",38,"nativeKeys","enumPrototypes","../internal/shimKeys",39,"proto","isProto","skipIndexes","skipErrorProps","enumErrorProps","errorProto","skipProto","nonEnumShadows","tag","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","String","toLocaleString","valueOf","../internal/arrayEach","../internal/isIndex","../lang/isFunction",40,"merge","../internal/baseMerge","../internal/createAssigner",41,"arrayProto","splice","x","0","y","spliceObjects",42,43,"Symbol","getOwnPropertySymbols","iterator","obj","sym","symVal","getOwnPropertyNames","syms","getOwnPropertyDescriptor","descriptor","enumerable","object-keys",44,"bind","canBeObject","hasSymbols","propIsEnumerable","target","objTarget","./hasSymbols","function-bind",45,"defineProperties","getPolyfill","shim","implementation","./implementation","./polyfill","./shim","define-properties",46,"foreach","toStr","fn","arePropertyDescriptorsSupported","defineProperty","_","supportsDescriptors","name","predicate","configurable","writable","map","predicates","concat",47,"hasOwn","ctx","k",48,"ERROR_MESSAGE","slice","funcType","that","bound","binder","boundLength","boundArgs","Empty",49,50,"has","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","blacklistedKeys","$console","$frame","$frameElement","$frames","$parent","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","j","skipConstructor","keysWorksWithArguments","originalKeys",51,"str","callee",52,"lacksProperEnumerationOrder","assign","letters","split","actual","assignHasPendingExceptions","preventExtensions","thrower",53,"polyfill",54,"SafeParseTuple","reviver","error","json","JSON","parse","err",55,"clean","sa",56,"forEachArray","isEmpty","initParams","uri","callback","params","xtend","createXHR","_createXHR","readystatechange","xhr","readyState","loadFunc","getBody","body","response","responseType","responseText","responseXML","isJson","errorFunc","evt","timeoutTimer","statusCode","failureResponse","aborted","status","useXDR","method","headers","url","rawRequest","getAllResponseHeaders","parseHeaders","once","cors","XDomainRequest","XMLHttpRequest","data","sync","stringify","onreadystatechange","onload","onerror","onprogress","ontimeout","open","username","password","withCredentials","timeout","abort","setRequestHeader","beforeSend","send","noop","toUpperCase","global/window","is-function","parse-headers",57,"string","alert","confirm","prompt",58,"called",59,"forEach","list","context","forEachString","forEachObject","len",60,"trim","left","right",61,"arg","row","indexOf","toLowerCase","for-each",62,"extend","_componentJs2","_interopRequireDefault","_componentJs","_classCallCheck","BigPlayButton","_Button","player","buildCSSClass","__esModule","newObj","Constructor","instance","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_clickableComponentJs2","_clickableComponentJs","_objectAssign","attributes","className","_objectAssign2","tabIndex","role","_utilsLogJs2","warn","_component2","addChild","child","default","_component","ClickableComponent","_Component","createEl","el","createControlTextEl","controlTextEl_","innerHTML","localize","controlText_","removeClass","el_","setAttribute","disable","handleFocus","Events","on","_globalDocument2","Fn","handleKeyPress","handleClick","event","CloseButton","_interopRequireWildcard","_globalWindow2","_globalWindow","Dom","_utilsDomJs","Component","player_","id_","Guid","newGUID","childIndex_","childNameIndex_","reportTouchActivity","trigger","bubbles","children_","dispose","removeElData","tagName","properties","languages","language","children","getChildById","componentName","ComponentClass","getComponent","componentClassName","component","removeChild","getChild","childFound","initChildren","opts","parentOptions","newChild","_this","workingChildren","Tech","options_","filter","some","wchild","handleAdd","first","second","removeOnDispose","_this2","off","cleanRemover","guid","third","nodeName","one","_this3","_arguments","newFunc","ready","isReady_","triggerReady","readyQueue","readyQueue_","$$","selector","contentEl","hasClass","classToCheck","hasElClass","addElClass","classToAdd","toggleClass","classToToggle","toggleElClass","show","dimension","num","skipListeners","widthOrHeight","val","style","computedWidthOrHeight","getComputedStyle","computedStyle","parseFloat","width","currentDimension","height","currentWidth","emitTapEvents","touchStart","touchTimeThreshold","couldBeTap","touches","firstTouch","xdiff","pageX","touchDistance","tapMovementThreshold","noTap","touchTime","enableTouchActivity","report","reportUserActivity","touchHolding","clearInterval","setInterval","touchEnd","intervalId","comp","init","subObj","_name","_spacerControlsCustomControlSpacerJs","ControlBar","dir","FullscreenToggle","isFullscreen","controlText","updateShowing","LiveDisplay","contentEl_","aria-live","MuteToggle","update","tech_","addClass","vol","muted","level","handlePlay","handlePause","PlayToggle","play","pause","_menuMenuJs2","_menuMenuJs","PlaybackRateMenuButton","_MenuButton","updateVisibility","appendChild","labelEl_","menu","playbackRate","currentRate","newRate","playbackRates","playerOptions","playbackRateSupported","updateLabel","PlaybackRateMenuItem","_MenuItem","label","rate","buffered","percentify","time","end","percent","part","bufferedEnd","_lodashCompatFunctionThrottle2","_lodashCompatFunctionThrottle","MouseTimeDisplay","controlBar","progressControl","keepTooltipsInside","handleMouseMove","newTime","calculateDistance","duration","position","findElPosition","parentNode","_utilsFormatTimeJs2","clampedPosition","clampPosition_","playerWidth","tooltipWidth","tooltipWidthHalf","ceil","_utilsFormatTimeJs","PlayProgressBar","_mouseTimeDisplayJs","ProgressControl","_loadProgressBarJs","SeekBar","_Slider","tooltipProgressBar","updateProgress","updateAriaAttributes","tooltip","tooltipStyle","scrubbing","getCache","currentTime","getPercent","toFixed","videoWasPlaying","stepForward","stepBack","updateDataAttr","TooltipProgressBar","querySelector","CustomControlSpacer","_Spacer","Spacer","CaptionSettingsMenuItem","_TextTrackMenuItem","kind","_captionSettingsMenuItemJs2","_captionSettingsMenuItemJs","_TextTrackButton","CaptionsButton","threshold","hide","items","kind_","_textTrackMenuItemJs2","_textTrackMenuItemJs","_chaptersTrackMenuItemJs2","_chaptersTrackMenuItemJs","ChaptersButton","createItems","tracks","textTracks","_length","track","chaptersTrack","title","_utilsToTitleCaseJs2","unshift","insertElFirst","cues","remoteTextTrackEl","cue","mi","_utilsFnJs","ChaptersTrackMenuItem","addEventListener","startTime","DescriptionsButton","removeEventListener","changeHandler","disabled","enable","OffTextTrackMenuItem","selected","handleTracksChange","_offTextTrackMenuItemJs","TextTrackButton","updateHandler","_offTextTrackMenuItemJs2","selectable","_globalDocument","TextTrackMenuItem","onchange","Event","dispatchEvent","updateContent","DurationDisplay","duration_","formattedTime","remainingTime","localizedText","TimeDivider","_sliderSliderJs","_volumeLevelJs","updateARIAAttributes","aria-label","volume","VolumeBar","checkMuted","VolumeControl","_volumeBarJs","VolumeLevel","_volumeControlVolumeBarJs","VolumeMenuButton","inline","vertical","volumeBar","volumeUpdate","_PopupButton","orientationClass","createPopup","contentElType","attachVolumeBarEvents","popup","menuContent","handleMouseDown","ErrorDisplay","_ModalDialog","content","message","./modal-dialog","./utils/dom","./utils/merge-options",101,"_utilsEventsJs","EventTarget","allowedEvents_","ael","_utilsLog","_utilsLog2","subClassMethods","methods","FullscreenApi","apiMap","browserApi","LoadingSpinner","MediaError","errorTypes","_utilsToTitleCaseJs","MenuButton","_ClickableComponent","handleSubmenuKeyPress","createMenu","which","buttonPressed_","unpressButton","preventDefault","lockShowing","focus","enabled_","MenuItem","_selected","focusedChild_","unlockShowing","stepChild","Menu","item","shift","ModalDialog","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","MODAL_CLASS_NAME","ESC","close","desc","fillAlways","fill","wasPlaying_","paused","ownerDocument","closeable_","_close","temp","fillWith","parentEl","empty","content_","_utilsBrowserJs","_utilsLogJs","_utilsMergeOptionsJs","_tracksTextTrackListConverterJs","_errorDisplayJs","_tracksTextTrackSettingsJs","tagAttributes","getElAttributes","languagesToLower","_utilsMergeOptionsJs2","plugins","playerOptionsCopy","isAudio","controls","flexNotSupported_","Player","styleEl_","players","removeAttribute","attr","attrs","playerId","defaultsStyleEl","$","head","insertBefore","nextSibling","firstChild","aspectRatio","links","getElementsByTagName","linkEl","privDimension","_dimension","parsedVal","updateStyleEl_","fluid","bool","ratio","VIDEOJS_NO_DYNAMIC_STYLE","_height","height_","techEl","_width","idClass","aspectRatio_","videoWidth","videoHeight","ratioParts","width_","ratioMultiplier","loadTech_","techName","_techTechJs2","getTech","disposeMediaElement","techName_","techOptions","nativeControlsForTouch","techId","textTracks_","preload","loop","poster","currentType_","src","cache_","techComponent","handleTechReady_","_tracksTextTrackListConverterJs2","jsonToTextTracks","textTracksJson_","handleTechLoadStart_","handleTechWaiting_","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechEnded_","handleTechSeeking_","handleTechSeeked_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechProgress_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechAbort_","handleTechStalled_","handleTechLoadedMetaData_","handleTechLoadedData_","handleTechTextTrackChange_","handleTechPosterChange_","usingNativeControls","addTechControlsListeners_","removeTechControlsListeners_","handleTechClick_","handleTechTouchMove_","handleTechTouchEnd_","hasStarted","_hasStarted","hasStarted_","handleTechTap_","userActive","handleTechTouchStart_","userWasActive","handleStageClick_","handleTechSuspend_","handleTechEmptied_","handleTechTimeUpdate_","handleTechRateChange_","handleTechVolumeChange_","techCall_","techGet_","isScrubbing","scrubbing_","seconds","bufferedPercent","_utilsBufferJs","percentAsDecimal","fsApi","fullscreenchange","documentFullscreenChange","requestFullscreen","supportsFullScreen","exitFullscreen","isFullWindow","docOrigOverflow","documentElement","overflow","exitFullWindow","canPlayType","techOrder","tech","techs","_ref","found","innerArray","innerChoice","tester","outerChoice","foundSourceAndTech","flip","_ref2","canPlaySource","currentTech","sourceList_","load","sourceTech","selectSource","controls_","usingNativeControls_","error_","errorDisplay","ended","seeking","seekable","userActivity_","userActive_","stopPropagation","listenForUserActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","handleMouseUp","inactivityTimeout","remoteTextTracks","addTextTrack","_ref3$track","languages_","toJSON","modal","tagOptions","dataSetup","_safeParseTuple","baseOptions","hasChildNodes","childNodes","childName","_playerJs","Popup","append","PosterImage","fallbackImg_","setSrc","_windowLoaded","autoSetup","vids","mediaEls","audios","mediaEl","getAttribute","autoSetupTimeout","vjs","Slider","bar","barName","playerEvent","doc","progress","percentage","handleBlur","stopImmediatePropagation","vertical_","registerComponent","FlashRtmpDecorator","Flash","streamingFormats","streamToParts","parts","connection","stream","connEnd","search","streamBegin","lastIndexOf","substring","rtmpSourceHandler","isStreamingType","canHandleSource","attrUpper","_api","vjs_setProperty","vjs_getProperty","_tech","_utilsUrlJs","_Tech","setSource","swf","objId","eventProxyFunction","errorEventProxyFunction","flashVars","wmode","embed","setCurrentTime","vjs_pause","lastSeekTarget_","currentSource_","setPoster","_utilsTimeRangesJs","createTimeRange","ranges","enterFullScreen","_tech2","_readWrite","_readOnly","_createGetter","nativeSourceHandler","guessMimeType","ext","Url","getFileExtension","video/flv","video/mp4","checkReady","onEvent","swfID","eventName","getEl","version","navigator","description","match","getEmbedCode","flashVarsString","paramsString","attrsString","flashvars","_techJs2","_techJs","Html5","currentSrc","initNetworkState_","removeNodes","node","nodes","nodesLength","featuresNativeTextTracks","remoteTextTrackEls","addTrackElement_","addTrack_","handleTextTrackChange_","handleTextTrackChange","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","emulatedTt","tt","handleTextTrackAdd_","clone","cloneNode","createElement","browser","TOUCH_ENABLED","setElAttributes","class","settingsAttrs","overwriteAttrs","_ret","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","setVolume","setMuted","offsetWidth","offsetHeight","video","networkState","HAVE_METADATA","webkitEnterFullScreen","exitFullScreen","webkitExitFullScreen","_src","reset","resetMediaElement","setPreload","autoplay","setAutoplay","setControls","setLoop","defaultMuted","played","addRemoteTextTrack","htmlTrackElement","srclang","removeRemoteTextTrack","trackElement","getTrackElementByTrack_","removeTrack_","TEST_VID","isSupported","registerSourceHandler","supportsNativeTextTracks","supportsTextTracks","mpegurlRE","patchCanPlayType","IS_OLD_ANDROID","mp4RE","unpatchCanPlayType","querySelectorAll","MediaLoader","_tracksTextTrackList","manualProgressOn","featuresTimeupdateEvents","nativeCaptions","nativeTextTracks","manualProgress","stopTrackingProgress","progressInterval","numBufferedPercent","onDurationChange","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","currentTimeInterval","manualTimeUpdatesOff","manuallyTriggered","initTextTrackListeners","textTrackListChanges","emulateTextTracks","script","updateDisplay","textTracksChanges","mode","_tracksTextTrackList2","remoteTextTracks_","createTrackHelper","removeTrackElement_","techs_","withSourceHandlers","handler","handlers","sourceHandlers","selectSourceHandler","sh","srcObj","fnName","originalFn","disposeSourceHandler","sourceHandler_","handleSource","HtmlTrackElementList","IS_IE8","prop","trackElements_","get","trackElements","_length2","trackElement_","_length3","HTMLTrackElement","_tracksTextTrack2","NONE","_EventTarget","TextTrackCueList","setCues_","length_","cues_","getCueById","parseInt","color","opacity","darkGray","lightGray","TextTrackDisplay","modes","captions","subtitles","firstCaptions","firstDesc","aria-atomic","clearDisplay","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","overrides","getValues","_i","cueDiv","displayState","textOpacity","tryUpdateStyle","constructColor","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","bottom","fontFamily","fontVariant","fontMap","trackToJson_","ret","reduce","acc","textTracksToJson","trackObjs","trackEls","TextTrackList","tracks_","rtrack","getTrackById","getSelectedOptionValue","selectedOption","selectedOptions","selectedIndex","option","TextTrackSettings","persistTextTrackSettings","saveSettings","restoreSettings","textEdge","fgColor","bgColor","bgOpacity","setValues","values","setSelectedOption","_safeJsonParseTuple2","localStorage","getItem","ttDisplay","_textTrackCueList2","_textTrackCueList","_eventTarget","_xhr","_xhr2","parseCues","srcContent","parser","WebVTT","Parser","vttjs","StringDecoder","errors","oncue","addCue","onparsingerror","onflush","console","groupCollapsed","flush","loadTrack","crossOrigin","responseBody","loaded_","loadHandler","TextTrack","TextTrackEnum","TextTrackMode","default_","activeCues","activeCues_","timeupdateHandler","changed","set","newMode","active","ct","endTime","removeCue","_removeCue","removed","IS_IPAD","IS_IPHONE","USER_AGENT","IS_IPOD","IOS_VERSION","IS_ANDROID","ANDROID_VERSION","major","minor","IS_NATIVE_ANDROID","appleWebkitVersion","bufferedDuration","_timeRangesJs","_logJs","_logJs2","messages","Proxy","defaultBehaviors","_taggedTemplateLiteralLoose","strings","raw","isNonBlankString","throwIfWhitespace","classRegExp","propName","_tsml2","_templateObject","parent","getElData","elData","elIdAttr","element","knownBooleans","attrName","attrVal","onselectstart","getBoundingClientRect","box","top","docEl","clientLeft","scrollLeft","pageXOffset","getPointerPosition","boxH","boxX","pageY","isEl","nodeType","isTextNode","_tsml","elem","_handleMultipleEvents","dispatcher","hash","fixEvent","m","handlersCopy","isImmediatePropagationStopped","removeType","isPropagationStopped","defaultPrevented","targetData","returnTrue","returnFalse","old","srcElement","relatedTarget","returnValue","cancelBubble","clientX","_cleanUpEvents","detachEvent","h","floor",138,"_logType","log","history","argsArray","isPlain","mergeOptions","destination","lodash-compat/object/merge",141,"createStyleElement","createTimeRanges","createTimeRangesObj","getRange","valueIndex","rangeIndex","parseUrl","href","addToBody","div","details","protocol","isCrossOrigin",145,"stylesheet","_utilsStylesheetJs","_player2","_player","_tracksTextTrackJs","_lodashCompatObjectMerge","_utilsCreateDeprecationProxyJs","_techTechJs","_techHtml5Js","getPlayers","addLanguage","setAttributes","insertContent"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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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","sourcesContent":["(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<r.length;o++)s(r[o]);return s})","(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n    module.exports = document;\n} else {\n    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n\n    module.exports = doccy;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9wTGV2ZWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fVxudmFyIG1pbkRvYyA9IHJlcXVpcmUoJ21pbi1kb2N1bWVudCcpO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQ7XG59IGVsc2Uge1xuICAgIHZhciBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J107XG5cbiAgICBpZiAoIWRvY2N5KSB7XG4gICAgICAgIGRvY2N5ID0gdG9wTGV2ZWxbJ19fR0xPQkFMX0RPQ1VNRU5UX0NBQ0hFQDQnXSA9IG1pbkRvYztcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY2N5O1xufVxuIl19","(function (global){\nif (typeof window !== \"undefined\") {\n    module.exports = window;\n} else if (typeof global !== \"undefined\") {\n    module.exports = global;\n} else if (typeof self !== \"undefined\"){\n    module.exports = self;\n} else {\n    module.exports = {};\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzZWxmO1xufSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xufVxuIl19",null,"var getNative = require('../internal/getNative');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeNow = getNative(Date, 'now');\n\n/**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n  return new Date().getTime();\n};\n\nmodule.exports = now;\n","var isObject = require('../lang/isObject'),\n    now = require('../date/now');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n *  edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n *  delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n *  edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n *   'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n *     todoChanges.cancel();\n *   }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n  var args,\n      maxTimeoutId,\n      result,\n      stamp,\n      thisArg,\n      timeoutId,\n      trailingCall,\n      lastCalled = 0,\n      maxWait = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = wait < 0 ? 0 : (+wait || 0);\n  if (options === true) {\n    var leading = true;\n    trailing = false;\n  } else if (isObject(options)) {\n    leading = !!options.leading;\n    maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function cancel() {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n    if (maxTimeoutId) {\n      clearTimeout(maxTimeoutId);\n    }\n    lastCalled = 0;\n    maxTimeoutId = timeoutId = trailingCall = undefined;\n  }\n\n  function complete(isCalled, id) {\n    if (id) {\n      clearTimeout(id);\n    }\n    maxTimeoutId = timeoutId = trailingCall = undefined;\n    if (isCalled) {\n      lastCalled = now();\n      result = func.apply(thisArg, args);\n      if (!timeoutId && !maxTimeoutId) {\n        args = thisArg = undefined;\n      }\n    }\n  }\n\n  function delayed() {\n    var remaining = wait - (now() - stamp);\n    if (remaining <= 0 || remaining > wait) {\n      complete(trailingCall, maxTimeoutId);\n    } else {\n      timeoutId = setTimeout(delayed, remaining);\n    }\n  }\n\n  function maxDelayed() {\n    complete(trailing, timeoutId);\n  }\n\n  function debounced() {\n    args = arguments;\n    stamp = now();\n    thisArg = this;\n    trailingCall = trailing && (timeoutId || !leading);\n\n    if (maxWait === false) {\n      var leadingCall = leading && !timeoutId;\n    } else {\n      if (!maxTimeoutId && !leading) {\n        lastCalled = stamp;\n      }\n      var remaining = maxWait - (stamp - lastCalled),\n          isCalled = remaining <= 0 || remaining > maxWait;\n\n      if (isCalled) {\n        if (maxTimeoutId) {\n          maxTimeoutId = clearTimeout(maxTimeoutId);\n        }\n        lastCalled = stamp;\n        result = func.apply(thisArg, args);\n      }\n      else if (!maxTimeoutId) {\n        maxTimeoutId = setTimeout(maxDelayed, remaining);\n      }\n    }\n    if (isCalled && timeoutId) {\n      timeoutId = clearTimeout(timeoutId);\n    }\n    else if (!timeoutId && wait !== maxWait) {\n      timeoutId = setTimeout(delayed, wait);\n    }\n    if (leadingCall) {\n      isCalled = true;\n      result = func.apply(thisArg, args);\n    }\n    if (isCalled && !timeoutId && !maxTimeoutId) {\n      args = thisArg = undefined;\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        rest = Array(length);\n\n    while (++index < length) {\n      rest[index] = args[start + index];\n    }\n    switch (start) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, args[0], rest);\n      case 2: return func.call(this, args[0], args[1], rest);\n    }\n    var otherArgs = Array(start + 1);\n    index = -1;\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = rest;\n    return func.apply(this, otherArgs);\n  };\n}\n\nmodule.exports = restParam;\n","var debounce = require('./debounce'),\n    isObject = require('../lang/isObject');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify invoking on the leading\n *  edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n *  edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n *   'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (options === false) {\n    leading = false;\n  } else if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\nmodule.exports = throttle;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n    object[key] = source[key];\n  }\n  return object;\n}\n\nmodule.exports = baseCopy;\n","var createBaseFor = require('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./baseFor'),\n    keysIn = require('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n  return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n","var arrayEach = require('./arrayEach'),\n    baseMergeDeep = require('./baseMergeDeep'),\n    isArray = require('../lang/isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isObject = require('../lang/isObject'),\n    isObjectLike = require('./isObjectLike'),\n    isTypedArray = require('../lang/isTypedArray'),\n    keys = require('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n  if (!isObject(object)) {\n    return object;\n  }\n  var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n      props = isSrcArr ? undefined : keys(source);\n\n  arrayEach(props || source, function(srcValue, key) {\n    if (props) {\n      key = srcValue;\n      srcValue = source[key];\n    }\n    if (isObjectLike(srcValue)) {\n      stackA || (stackA = []);\n      stackB || (stackB = []);\n      baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n    }\n    else {\n      var value = object[key],\n          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n          isCommon = result === undefined;\n\n      if (isCommon) {\n        result = srcValue;\n      }\n      if ((result !== undefined || (isSrcArr && !(key in object))) &&\n          (isCommon || (result === result ? (result !== value) : (value === value)))) {\n        object[key] = result;\n      }\n    }\n  });\n  return object;\n}\n\nmodule.exports = baseMerge;\n","var arrayCopy = require('./arrayCopy'),\n    isArguments = require('../lang/isArguments'),\n    isArray = require('../lang/isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isPlainObject = require('../lang/isPlainObject'),\n    isTypedArray = require('../lang/isTypedArray'),\n    toPlainObject = require('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n  var length = stackA.length,\n      srcValue = source[key];\n\n  while (length--) {\n    if (stackA[length] == srcValue) {\n      object[key] = stackB[length];\n      return;\n    }\n  }\n  var value = object[key],\n      result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n      isCommon = result === undefined;\n\n  if (isCommon) {\n    result = srcValue;\n    if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n      result = isArray(value)\n        ? value\n        : (isArrayLike(value) ? arrayCopy(value) : []);\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      result = isArguments(value)\n        ? toPlainObject(value)\n        : (isPlainObject(value) ? value : {});\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  // Add the source value to the stack of traversed objects and associate\n  // it with its merged value.\n  stackA.push(srcValue);\n  stackB.push(result);\n\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n  } else if (result === result ? (result !== value) : (value === value)) {\n    object[key] = result;\n  }\n}\n\nmodule.exports = baseMergeDeep;\n","var toObject = require('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : toObject(object)[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var identity = require('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\nmodule.exports = bindCallback;\n","var bindCallback = require('./bindCallback'),\n    isIterateeCall = require('./isIterateeCall'),\n    restParam = require('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return restParam(function(object, sources) {\n    var index = -1,\n        length = object == null ? 0 : sources.length,\n        customizer = length > 2 ? sources[length - 2] : undefined,\n        guard = length > 2 ? sources[2] : undefined,\n        thisArg = length > 1 ? sources[length - 1] : undefined;\n\n    if (typeof customizer == 'function') {\n      customizer = bindCallback(customizer, thisArg, 5);\n      length -= 2;\n    } else {\n      customizer = typeof thisArg == 'function' ? thisArg : undefined;\n      length -= (customizer ? 1 : 0);\n    }\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var toObject = require('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var baseProperty = require('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n","var isNative = require('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getLength = require('./getLength'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n  try {\n    Object({ 'toString': 0 } + '');\n  } catch(e) {\n    return function() { return false; };\n  }\n  return function(value) {\n    // IE < 9 presents many host objects as `Object` objects that can coerce\n    // to strings despite having improperly defined `toString` methods.\n    return typeof value.toString != 'function' && typeof (value + '') == 'string';\n  };\n}());\n\nmodule.exports = isHostObject;\n","/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n","var isArrayLike = require('./isArrayLike'),\n    isIndex = require('./isIndex'),\n    isObject = require('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isArguments = require('../lang/isArguments'),\n    isArray = require('../lang/isArray'),\n    isIndex = require('./isIndex'),\n    isLength = require('./isLength'),\n    isString = require('../lang/isString'),\n    keysIn = require('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object) || isString(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = shimKeys;\n","var isObject = require('../lang/isObject'),\n    isString = require('../lang/isString'),\n    support = require('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  if (support.unindexedChars && isString(value)) {\n    var index = -1,\n        length = value.length,\n        result = Object(value);\n\n    while (++index < length) {\n      result[index] = value.charAt(index);\n    }\n    return result;\n  }\n  return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n","var isArrayLike = require('../internal/isArrayLike'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n","var getNative = require('../internal/getNative'),\n    isLength = require('../internal/isLength'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 which returns 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n    isHostObject = require('../internal/isHostObject'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n","/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseForIn = require('../internal/baseForIn'),\n    isArguments = require('./isArguments'),\n    isHostObject = require('../internal/isHostObject'),\n    isObjectLike = require('../internal/isObjectLike'),\n    support = require('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  var Ctor;\n\n  // Exit early for non `Object` objects.\n  if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n      (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n    return false;\n  }\n  // IE < 9 iterates inherited properties before own properties. If the first\n  // iterated property is an object's own property then there are no inherited\n  // enumerable properties.\n  var result;\n  if (support.ownLast) {\n    baseForIn(value, function(subValue, key, object) {\n      result = hasOwnProperty.call(object, key);\n      return false;\n    });\n    return result !== false;\n  }\n  // In most environments an object's own properties are iterated before\n  // its inherited properties. If the last iterated property is an object's\n  // own property then there are no inherited enumerable properties.\n  baseForIn(value, function(subValue, key) {\n    result = key;\n  });\n  return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n","var isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var isLength = require('../internal/isLength'),\n    isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n","var baseCopy = require('../internal/baseCopy'),\n    keysIn = require('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var getNative = require('../internal/getNative'),\n    isArrayLike = require('../internal/isArrayLike'),\n    isObject = require('../lang/isObject'),\n    shimKeys = require('../internal/shimKeys'),\n    support = require('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n","var arrayEach = require('../internal/arrayEach'),\n    isArguments = require('../lang/isArguments'),\n    isArray = require('../lang/isArray'),\n    isFunction = require('../lang/isFunction'),\n    isIndex = require('../internal/isIndex'),\n    isLength = require('../internal/isLength'),\n    isObject = require('../lang/isObject'),\n    isString = require('../lang/isString'),\n    support = require('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n  'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n    objectProto = Object.prototype,\n    stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n  for (var tag in nonEnumProps) {\n    if (hasOwnProperty.call(nonEnumProps, tag)) {\n      var props = nonEnumProps[tag];\n      props[key] = hasOwnProperty.call(props, key);\n    }\n  }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n      isProto = proto === object,\n      result = Array(length),\n      skipIndexes = length > 0,\n      skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n      skipProto = support.enumPrototypes && isFunction(object);\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  // lodash skips the `constructor` property when it infers it's iterating\n  // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n  // attribute of an existing property and the `constructor` property of a\n  // prototype defaults to non-enumerable.\n  for (var key in object) {\n    if (!(skipProto && key == 'prototype') &&\n        !(skipErrorProps && (key == 'message' || key == 'name')) &&\n        !(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  if (support.nonEnumShadows && object !== objectProto) {\n    var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n        nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n    if (tag == objectTag) {\n      proto = objectProto;\n    }\n    length = shadowProps.length;\n    while (length--) {\n      key = shadowProps[length];\n      var nonEnum = nonEnums[key];\n      if (!(isProto && nonEnum) &&\n          (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n        result.push(key);\n      }\n    }\n  }\n  return result;\n}\n\nmodule.exports = keysIn;\n","var baseMerge = require('../internal/baseMerge'),\n    createAssigner = require('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n *   'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n *   'fruits': ['apple'],\n *   'vegetables': ['beet']\n * };\n *\n * var other = {\n *   'fruits': ['banana'],\n *   'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n *   if (_.isArray(a)) {\n *     return a.concat(b);\n *   }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n","/** Used for native method references. */\nvar arrayProto = Array.prototype,\n    errorProto = Error.prototype,\n    objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n  var Ctor = function() { this.x = x; },\n      object = { '0': x, 'length': x },\n      props = [];\n\n  Ctor.prototype = { 'valueOf': x, 'y': x };\n  for (var key in new Ctor) { props.push(key); }\n\n  /**\n   * Detect if `name` or `message` properties of `Error.prototype` are\n   * enumerable by default (IE < 9, Safari < 5.1).\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n    propertyIsEnumerable.call(errorProto, 'name');\n\n  /**\n   * Detect if `prototype` properties are enumerable by default.\n   *\n   * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n   * (if the prototype or a property on the prototype has been set)\n   * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n   * property to `true`.\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n  /**\n   * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n   *\n   * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n   * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.nonEnumShadows = !/valueOf/.test(props);\n\n  /**\n   * Detect if own properties are iterated after inherited properties (IE < 9).\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.ownLast = props[0] != 'x';\n\n  /**\n   * Detect if `Array#shift` and `Array#splice` augment array-like objects\n   * correctly.\n   *\n   * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n   * `shift()` and `splice()` functions that fail to remove the last element,\n   * `value[0]`, of array-like objects even though the \"length\" property is\n   * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n   * while `splice()` is buggy regardless of mode in IE < 9.\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n  /**\n   * Detect lack of support for accessing string characters by index.\n   *\n   * IE < 8 can't access characters by index. IE 8 can only access characters\n   * by index on string literals, not string objects.\n   *\n   * @memberOf _.support\n   * @type boolean\n   */\n  support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n","/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\nvar keys = require('object-keys');\n\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tif (typeof sym === 'string') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(Object(sym) instanceof Symbol)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; }\n\tif (keys(obj).length !== 0) { return false; }\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar bind = require('function-bind');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('./hasSymbols')();\nvar toObject = Object;\nvar push = bind.call(Function.call, Array.prototype.push);\nvar propIsEnumerable = bind.call(Function.call, Object.prototype.propertyIsEnumerable);\n\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tsyms = Object.getOwnPropertySymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif (propIsEnumerable(source, key)) {\n\t\t\t\t\tpush(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif (propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\ndefineProperties(implementation, {\n\timplementation: implementation,\n\tgetPolyfill: getPolyfill,\n\tshim: shim\n});\n\nmodule.exports = implementation;\n","'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { enumerable: false, value: obj });\n        /* eslint-disable no-unused-vars, no-restricted-syntax */\n        for (var _ in obj) { return false; }\n        /* eslint-enable no-unused-vars, no-restricted-syntax */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n    if (toString.call(fn) !== '[object Function]') {\n        throw new TypeError('iterator must be a function');\n    }\n    var l = obj.length;\n    if (l === +l) {\n        for (var i = 0; i < l; i++) {\n            fn.call(ctx, obj[i], i, obj);\n        }\n    } else {\n        for (var k in obj) {\n            if (hasOwn.call(obj, k)) {\n                fn.call(ctx, obj[k], k, obj);\n            }\n        }\n    }\n};\n\n","var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","var implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$console: true,\n\t$frame: true,\n\t$frameElement: true,\n\t$frames: true,\n\t$parent: true,\n\t$self: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true,\n\t$window: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\ttry {\n\t\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\ttry {\n\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t// v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t// note: this does not detect the bug unless there's 20 characters\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n    var json\n    var error = null\n\n    try {\n        json = JSON.parse(obj, reviver)\n    } catch (err) {\n        error = err\n    }\n\n    return [error, json]\n}\n","function clean (s) {\n  return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n  var s = ''\n    , i = 0\n\n  for (; i < arguments.length; i++)\n    s += clean(sa[i]) + (arguments[i + 1] || '')\n\n  return s\n}","\"use strict\";\nvar window = require(\"global/window\")\nvar once = require(\"once\")\nvar isFunction = require(\"is-function\")\nvar parseHeaders = require(\"parse-headers\")\nvar xtend = require(\"xtend\")\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n    createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n        options = initParams(uri, options, callback)\n        options.method = method.toUpperCase()\n        return _createXHR(options)\n    }\n})\n\nfunction forEachArray(array, iterator) {\n    for (var i = 0; i < array.length; i++) {\n        iterator(array[i])\n    }\n}\n\nfunction isEmpty(obj){\n    for(var i in obj){\n        if(obj.hasOwnProperty(i)) return false\n    }\n    return true\n}\n\nfunction initParams(uri, options, callback) {\n    var params = uri\n\n    if (isFunction(options)) {\n        callback = options\n        if (typeof uri === \"string\") {\n            params = {uri:uri}\n        }\n    } else {\n        params = xtend(options, {uri: uri})\n    }\n\n    params.callback = callback\n    return params\n}\n\nfunction createXHR(uri, options, callback) {\n    options = initParams(uri, options, callback)\n    return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n    var callback = options.callback\n    if(typeof callback === \"undefined\"){\n        throw new Error(\"callback argument missing\")\n    }\n    callback = once(callback)\n\n    function readystatechange() {\n        if (xhr.readyState === 4) {\n            loadFunc()\n        }\n    }\n\n    function getBody() {\n        // Chrome with requestType=blob throws errors arround when even testing access to responseText\n        var body = undefined\n\n        if (xhr.response) {\n            body = xhr.response\n        } else if (xhr.responseType === \"text\" || !xhr.responseType) {\n            body = xhr.responseText || xhr.responseXML\n        }\n\n        if (isJson) {\n            try {\n                body = JSON.parse(body)\n            } catch (e) {}\n        }\n\n        return body\n    }\n\n    var failureResponse = {\n                body: undefined,\n                headers: {},\n                statusCode: 0,\n                method: method,\n                url: uri,\n                rawRequest: xhr\n            }\n\n    function errorFunc(evt) {\n        clearTimeout(timeoutTimer)\n        if(!(evt instanceof Error)){\n            evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n        }\n        evt.statusCode = 0\n        callback(evt, failureResponse)\n    }\n\n    // will load the data & process the response in a special response object\n    function loadFunc() {\n        if (aborted) return\n        var status\n        clearTimeout(timeoutTimer)\n        if(options.useXDR && xhr.status===undefined) {\n            //IE8 CORS GET successful response doesn't have a status field, but body is fine\n            status = 200\n        } else {\n            status = (xhr.status === 1223 ? 204 : xhr.status)\n        }\n        var response = failureResponse\n        var err = null\n\n        if (status !== 0){\n            response = {\n                body: getBody(),\n                statusCode: status,\n                method: method,\n                headers: {},\n                url: uri,\n                rawRequest: xhr\n            }\n            if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n                response.headers = parseHeaders(xhr.getAllResponseHeaders())\n            }\n        } else {\n            err = new Error(\"Internal XMLHttpRequest Error\")\n        }\n        callback(err, response, response.body)\n\n    }\n\n    var xhr = options.xhr || null\n\n    if (!xhr) {\n        if (options.cors || options.useXDR) {\n            xhr = new createXHR.XDomainRequest()\n        }else{\n            xhr = new createXHR.XMLHttpRequest()\n        }\n    }\n\n    var key\n    var aborted\n    var uri = xhr.url = options.uri || options.url\n    var method = xhr.method = options.method || \"GET\"\n    var body = options.body || options.data || null\n    var headers = xhr.headers = options.headers || {}\n    var sync = !!options.sync\n    var isJson = false\n    var timeoutTimer\n\n    if (\"json\" in options) {\n        isJson = true\n        headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n        if (method !== \"GET\" && method !== \"HEAD\") {\n            headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n            body = JSON.stringify(options.json)\n        }\n    }\n\n    xhr.onreadystatechange = readystatechange\n    xhr.onload = loadFunc\n    xhr.onerror = errorFunc\n    // IE9 must have onprogress be set to a unique function.\n    xhr.onprogress = function () {\n        // IE must die\n    }\n    xhr.ontimeout = errorFunc\n    xhr.open(method, uri, !sync, options.username, options.password)\n    //has to be after open\n    if(!sync) {\n        xhr.withCredentials = !!options.withCredentials\n    }\n    // Cannot set timeout with sync request\n    // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n    // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n    if (!sync && options.timeout > 0 ) {\n        timeoutTimer = setTimeout(function(){\n            aborted=true//IE9 may still call readystatechange\n            xhr.abort(\"timeout\")\n            var e = new Error(\"XMLHttpRequest timeout\")\n            e.code = \"ETIMEDOUT\"\n            errorFunc(e)\n        }, options.timeout )\n    }\n\n    if (xhr.setRequestHeader) {\n        for(key in headers){\n            if(headers.hasOwnProperty(key)){\n                xhr.setRequestHeader(key, headers[key])\n            }\n        }\n    } else if (options.headers && !isEmpty(options.headers)) {\n        throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n    }\n\n    if (\"responseType\" in options) {\n        xhr.responseType = options.responseType\n    }\n\n    if (\"beforeSend\" in options &&\n        typeof options.beforeSend === \"function\"\n    ) {\n        options.beforeSend(xhr)\n    }\n\n    xhr.send(body)\n\n    return xhr\n\n\n}\n\nfunction noop() {}\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n  var string = toString.call(fn)\n  return string === '[object Function]' ||\n    (typeof fn === 'function' && string !== '[object RegExp]') ||\n    (typeof window !== 'undefined' &&\n     // IE8 and below\n     (fn === window.setTimeout ||\n      fn === window.alert ||\n      fn === window.confirm ||\n      fn === window.prompt))\n};\n","module.exports = once\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var called = false\n  return function () {\n    if (called) return\n    called = true\n    return fn.apply(this, arguments)\n  }\n}\n","var isFunction = require('is-function')\n\nmodule.exports = forEach\n\nvar toString = Object.prototype.toString\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction forEach(list, iterator, context) {\n    if (!isFunction(iterator)) {\n        throw new TypeError('iterator must be a function')\n    }\n\n    if (arguments.length < 3) {\n        context = this\n    }\n    \n    if (toString.call(list) === '[object Array]')\n        forEachArray(list, iterator, context)\n    else if (typeof list === 'string')\n        forEachString(list, iterator, context)\n    else\n        forEachObject(list, iterator, context)\n}\n\nfunction forEachArray(array, iterator, context) {\n    for (var i = 0, len = array.length; i < len; i++) {\n        if (hasOwnProperty.call(array, i)) {\n            iterator.call(context, array[i], i, array)\n        }\n    }\n}\n\nfunction forEachString(string, iterator, context) {\n    for (var i = 0, len = string.length; i < len; i++) {\n        // no such thing as a sparse string.\n        iterator.call(context, string.charAt(i), i, string)\n    }\n}\n\nfunction forEachObject(object, iterator, context) {\n    for (var k in object) {\n        if (hasOwnProperty.call(object, k)) {\n            iterator.call(context, object[k], k, object)\n        }\n    }\n}\n","\nexports = module.exports = trim;\n\nfunction trim(str){\n  return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n  return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n  return str.replace(/\\s*$/, '');\n};\n","var trim = require('trim')\n  , forEach = require('for-each')\n  , isArray = function(arg) {\n      return Object.prototype.toString.call(arg) === '[object Array]';\n    }\n\nmodule.exports = function (headers) {\n  if (!headers)\n    return {}\n\n  var result = {}\n\n  forEach(\n      trim(headers).split('\\n')\n    , function (row) {\n        var index = row.indexOf(':')\n          , key = trim(row.slice(0, index)).toLowerCase()\n          , value = trim(row.slice(index + 1))\n\n        if (typeof(result[key]) === 'undefined') {\n          result[key] = value\n        } else if (isArray(result[key])) {\n          result[key].push(value)\n        } else {\n          result[key] = [ result[key], value ]\n        }\n      }\n  )\n\n  return result\n}","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n  constructor(player, options) {\n    super(player, options);\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return 'vjs-big-play-button';\n  }\n\n  /**\n   * Handles click for play\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.player_.play();\n  }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n","/**\n * @file button.js\n */\nimport ClickableComponent from './clickable-component.js';\nimport Component from './component';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport log from './utils/log.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends ClickableComponent\n * @class Button\n */\nclass Button extends ClickableComponent {\n\n  constructor(player, options) {\n    super(player, options);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String=} type Element's node type. e.g. 'div'\n   * @param {Object=} props An object of properties that should be set on the element\n   * @param {Object=} attributes An object of attributes that should be set on the element\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(tag='button', props={}, attributes={}) {\n    props = assign({\n      className: this.buildCSSClass()\n    }, props);\n\n    if (tag !== 'button') {\n      log.warn(`Creating a Button with an HTML element of ${tag} is deprecated; use ClickableComponent instead.`);\n\n      // Add properties for clickable element which is not a native HTML button\n      props = assign({\n        tabIndex: 0\n      }, props);\n\n      // Add ARIA attributes for clickable element which is not a native HTML button\n      attributes = assign({\n        role: 'button'\n      }, attributes);\n    }\n\n    // Add attributes for button element\n    attributes = assign({\n      type: 'button', // Necessary since the default button type is \"submit\"\n      'aria-live': 'polite' // let the screen reader user know that the text of the button may change\n    }, attributes);\n\n    let el = Component.prototype.createEl.call(this, tag, props, attributes);\n\n    this.createControlTextEl(el);\n\n    return el;\n  }\n\n  /**\n   * Adds a child component inside this button\n   *\n   * @param {String|Component} child The class name or instance of a child to add\n   * @param {Object=} options Options, including options to be passed to children of the child.\n   * @return {Component} The child component (created by this process if a string was used)\n   * @deprecated\n   * @method addChild\n   */\n  addChild(child, options={}) {\n    let className = this.constructor.name;\n    log.warn(`Adding an actionable (user controllable) child to a Button (${className}) is not supported; use a ClickableComponent instead.`);\n\n    // Avoid the error message generated by ClickableComponent's addChild method\n    return Component.prototype.addChild.call(this, child, options);\n  }\n\n  /**\n   * Handle KeyPress (document level) - Extend with specific functionality for button\n   *\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n    // Ignore Space (32) or Enter (13) key operation, which is handled by the browser for a button.\n    if (event.which === 32 || event.which === 13) {\n    } else {\n      super.handleKeyPress(event); // Pass keypress handling up for unsupported keys\n    }\n  }\n\n}\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n","/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport log from './utils/log.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Clickable Component which is clickable or keyboard actionable, but is not a native HTML button\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ClickableComponent\n */\nclass ClickableComponent extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.emitTapEvents();\n\n    this.on('tap', this.handleClick);\n    this.on('click', this.handleClick);\n    this.on('focus', this.handleFocus);\n    this.on('blur', this.handleBlur);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String=} type Element's node type. e.g. 'div'\n   * @param {Object=} props An object of properties that should be set on the element\n   * @param {Object=} attributes An object of attributes that should be set on the element\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(tag='div', props={}, attributes={}) {\n    props = assign({\n      className: this.buildCSSClass(),\n      tabIndex: 0\n    }, props);\n\n    if (tag === 'button') {\n      log.error(`Creating a ClickableComponent with an HTML element of ${tag} is not supported; use a Button instead.`);\n    }\n\n    // Add ARIA attributes for clickable element which is not a native HTML button\n    attributes = assign({\n      role: 'button',\n      'aria-live': 'polite' // let the screen reader user know that the text of the element may change\n    }, attributes);\n\n    let el = super.createEl(tag, props, attributes);\n\n    this.createControlTextEl(el);\n\n    return el;\n  }\n\n  /**\n   * create control text\n   *\n   * @param {Element} el Parent element for the control text\n   * @return {Element}\n   * @method controlText\n   */\n  createControlTextEl(el) {\n    this.controlTextEl_ = Dom.createEl('span', {\n      className: 'vjs-control-text'\n    });\n\n    if (el) {\n      el.appendChild(this.controlTextEl_);\n    }\n\n    this.controlText(this.controlText_);\n\n    return this.controlTextEl_;\n  }\n\n  /**\n   * Controls text - both request and localize\n   *\n   * @param {String} text Text for element\n   * @return {String}\n   * @method controlText\n   */\n  controlText(text) {\n    if (!text) return this.controlText_ || 'Need Text';\n\n    this.controlText_ = text;\n    this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n    return this;\n  }\n\n  /**\n   * Allows sub components to stack CSS class names\n   *\n   * @return {String}\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-control vjs-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Adds a child component inside this clickable-component\n   *\n   * @param {String|Component} child The class name or instance of a child to add\n   * @param {Object=} options Options, including options to be passed to children of the child.\n   * @return {Component} The child component (created by this process if a string was used)\n   * @method addChild\n   */\n  addChild(child, options={}) {\n    // TODO: Fix adding an actionable child to a ClickableComponent; currently\n    // it will cause issues with assistive technology (e.g. screen readers)\n    // which support ARIA, since an element with role=\"button\" cannot have\n    // actionable child elements.\n\n    //let className = this.constructor.name;\n    //log.warn(`Adding a child to a ClickableComponent (${className}) can cause issues with assistive technology which supports ARIA, since an element with role=\"button\" cannot have actionable child elements.`);\n\n    return super.addChild(child, options);\n  }\n\n  /**\n   * Enable the component element\n   *\n   * @return {Component}\n   * @method enable\n   */\n  enable() {\n    this.removeClass('vjs-disabled');\n    this.el_.setAttribute('aria-disabled', 'false');\n    return this;\n  }\n\n  /**\n   * Disable the component element\n   *\n   * @return {Component}\n   * @method disable\n   */\n  disable() {\n    this.addClass('vjs-disabled');\n    this.el_.setAttribute('aria-disabled', 'true');\n    return this;\n  }\n\n  /**\n   * Handle Click - Override with specific functionality for component\n   *\n   * @method handleClick\n   */\n  handleClick() {}\n\n  /**\n   * Handle Focus - Add keyboard functionality to element\n   *\n   * @method handleFocus\n   */\n  handleFocus() {\n    Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n  }\n\n  /**\n   * Handle KeyPress (document level) - Trigger click when Space or Enter key is pressed\n   *\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n    // Support Space (32) or Enter (13) key operation to fire a click event\n    if (event.which === 32 || event.which === 13) {\n      event.preventDefault();\n      this.handleClick(event);\n    } else if (super.handleKeyPress) {\n      super.handleKeyPress(event); // Pass keypress handling up for unsupported keys\n    }\n  }\n\n  /**\n   * Handle Blur - Remove keyboard triggers\n   *\n   * @method handleBlur\n   */\n  handleBlur() {\n    Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n  }\n}\n\nComponent.registerComponent('ClickableComponent', ClickableComponent);\nexport default ClickableComponent;\n","import Button from './button';\nimport Component from './component';\n\n/**\n * The `CloseButton` component is a button which fires a \"close\" event\n * when it is activated.\n *\n * @extends Button\n * @class CloseButton\n */\nclass CloseButton extends Button {\n\n  constructor(player, options) {\n    super(player, options);\n    this.controlText(options && options.controlText || this.localize('Close'));\n  }\n\n  buildCSSClass() {\n    return `vjs-close-button ${super.buildCSSClass()}`;\n  }\n\n  handleClick() {\n    this.trigger({type: 'close', bubbles: false});\n  }\n}\n\nComponent.registerComponent('CloseButton', CloseButton);\nexport default CloseButton;\n","/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n *     // adding a button to the player\n *     var button = player.addChild('button');\n *     button.el(); // -> button element\n * ```\n * ```html\n *     <div class=\"video-js\">\n *       <div class=\"vjs-button\">Button</div>\n *     </div>\n * ```\n * Components are also event targets.\n * ```js\n *     button.on('click', function(){\n *       console.log('Button Clicked!');\n *     });\n *     button.trigger('customevent');\n * ```\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @class Component\n */\nclass Component {\n\n  constructor(player, options, ready) {\n\n    // The component might be the player itself and we can't pass `this` to super\n    if (!player && this.play) {\n      this.player_ = player = this; // eslint-disable-line\n    } else {\n      this.player_ = player;\n    }\n\n    // Make a copy of prototype.options_ to protect against overriding defaults\n    this.options_ = mergeOptions({}, this.options_);\n\n    // Updated options with supplied options\n    options = this.options_ = mergeOptions(this.options_, options);\n\n    // Get ID from options or options element if one is supplied\n    this.id_ = options.id || (options.el && options.el.id);\n\n    // If there was no ID from the options, generate one\n    if (!this.id_) {\n      // Don't require the player ID function in the case of mock players\n      let id = player && player.id && player.id() || 'no_player';\n\n      this.id_ = `${id}_component_${Guid.newGUID()}`;\n    }\n\n    this.name_ = options.name || null;\n\n    // Create element if one wasn't provided in options\n    if (options.el) {\n      this.el_ = options.el;\n    } else if (options.createEl !== false) {\n      this.el_ = this.createEl();\n    }\n\n    this.children_ = [];\n    this.childIndex_ = {};\n    this.childNameIndex_ = {};\n\n    // Add any child components in options\n    if (options.initChildren !== false) {\n      this.initChildren();\n    }\n\n    this.ready(ready);\n    // Don't want to trigger ready here or it will before init is actually\n    // finished for all children that run this constructor\n\n    if (options.reportTouchActivity !== false) {\n      this.enableTouchActivity();\n    }\n  }\n\n  /**\n   * Dispose of the component and all child components\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.trigger({ type: 'dispose', bubbles: false });\n\n    // Dispose all children.\n    if (this.children_) {\n      for (let i = this.children_.length - 1; i >= 0; i--) {\n        if (this.children_[i].dispose) {\n          this.children_[i].dispose();\n        }\n      }\n    }\n\n    // Delete child references\n    this.children_ = null;\n    this.childIndex_ = null;\n    this.childNameIndex_ = null;\n\n    // Remove all event listeners.\n    this.off();\n\n    // Remove element from DOM\n    if (this.el_.parentNode) {\n      this.el_.parentNode.removeChild(this.el_);\n    }\n\n    Dom.removeElData(this.el_);\n    this.el_ = null;\n  }\n\n  /**\n   * Return the component's player\n   *\n   * @return {Player}\n   * @method player\n   */\n  player() {\n    return this.player_;\n  }\n\n  /**\n   * Deep merge of options objects\n   * Whenever a property is an object on both options objects\n   * the two properties will be merged using mergeOptions.\n   *\n   * ```js\n   *     Parent.prototype.options_ = {\n   *       optionSet: {\n   *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n   *         'childTwo': {},\n   *         'childThree': {}\n   *       }\n   *     }\n   *     newOptions = {\n   *       optionSet: {\n   *         'childOne': { 'foo': 'baz', 'abc': '123' }\n   *         'childTwo': null,\n   *         'childFour': {}\n   *       }\n   *     }\n   *\n   *     this.options(newOptions);\n   * ```\n   * RESULT\n   * ```js\n   *     {\n   *       optionSet: {\n   *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n   *         'childTwo': null, // Disabled. Won't be initialized.\n   *         'childThree': {},\n   *         'childFour': {}\n   *       }\n   *     }\n   * ```\n   *\n   * @param  {Object} obj Object of new option values\n   * @return {Object}     A NEW object of this.options_ and obj merged\n   * @method options\n   */\n  options(obj) {\n    log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n    if (!obj) {\n      return this.options_;\n    }\n\n    this.options_ = mergeOptions(this.options_, obj);\n    return this.options_;\n  }\n\n  /**\n   * Get the component's DOM element\n   * ```js\n   *     var domEl = myComponent.el();\n   * ```\n   *\n   * @return {Element}\n   * @method el\n   */\n  el() {\n    return this.el_;\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param  {String=} tagName  Element's node type. e.g. 'div'\n   * @param  {Object=} properties An object of properties that should be set\n   * @param  {Object=} attributes An object of attributes that should be set\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(tagName, properties, attributes) {\n    return Dom.createEl(tagName, properties, attributes);\n  }\n\n  localize(string) {\n    let code = this.player_.language && this.player_.language();\n    let languages = this.player_.languages && this.player_.languages();\n\n    if (!code || !languages) {\n      return string;\n    }\n\n    let language = languages[code];\n\n    if (language && language[string]) {\n      return language[string];\n    }\n\n    let primaryCode = code.split('-')[0];\n    let primaryLang = languages[primaryCode];\n\n    if (primaryLang && primaryLang[string]) {\n      return primaryLang[string];\n    }\n\n    return string;\n  }\n\n  /**\n   * Return the component's DOM element where children are inserted.\n   * Will either be the same as el() or a new element defined in createEl().\n   *\n   * @return {Element}\n   * @method contentEl\n   */\n  contentEl() {\n    return this.contentEl_ || this.el_;\n  }\n\n  /**\n   * Get the component's ID\n   * ```js\n   *     var id = myComponent.id();\n   * ```\n   *\n   * @return {String}\n   * @method id\n   */\n  id() {\n    return this.id_;\n  }\n\n  /**\n   * Get the component's name. The name is often used to reference the component.\n   * ```js\n   *     var name = myComponent.name();\n   * ```\n   *\n   * @return {String}\n   * @method name\n   */\n  name() {\n    return this.name_;\n  }\n\n  /**\n   * Get an array of all child components\n   * ```js\n   *     var kids = myComponent.children();\n   * ```\n   *\n   * @return {Array} The children\n   * @method children\n   */\n  children() {\n    return this.children_;\n  }\n\n  /**\n   * Returns a child component with the provided ID\n   *\n   * @return {Component}\n   * @method getChildById\n   */\n  getChildById(id) {\n    return this.childIndex_[id];\n  }\n\n  /**\n   * Returns a child component with the provided name\n   *\n   * @return {Component}\n   * @method getChild\n   */\n  getChild(name) {\n    return this.childNameIndex_[name];\n  }\n\n  /**\n   * Adds a child component inside this component\n   * ```js\n   *     myComponent.el();\n   *     // -> <div class='my-component'></div>\n   *     myComponent.children();\n   *     // [empty array]\n   *\n   *     var myButton = myComponent.addChild('MyButton');\n   *     // -> <div class='my-component'><div class=\"my-button\">myButton<div></div>\n   *     // -> myButton === myComponent.children()[0];\n   * ```\n   * Pass in options for child constructors and options for children of the child\n   * ```js\n   *     var myButton = myComponent.addChild('MyButton', {\n   *       text: 'Press Me',\n   *       buttonChildExample: {\n   *         buttonChildOption: true\n   *       }\n   *     });\n   * ```\n   *\n   * @param {String|Component} child The class name or instance of a child to add\n   * @param {Object=} options Options, including options to be passed to children of the child.\n   * @param {Number} index into our children array to attempt to add the child\n   * @return {Component} The child component (created by this process if a string was used)\n   * @method addChild\n   */\n  addChild(child, options={}, index=this.children_.length) {\n    let component;\n    let componentName;\n\n    // If child is a string, create nt with options\n    if (typeof child === 'string') {\n      componentName = child;\n\n      // Options can also be specified as a boolean, so convert to an empty object if false.\n      if (!options) {\n        options = {};\n      }\n\n      // Same as above, but true is deprecated so show a warning.\n      if (options === true) {\n        log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n        options = {};\n      }\n\n      // If no componentClass in options, assume componentClass is the name lowercased\n      // (e.g. playButton)\n      let componentClassName = options.componentClass || toTitleCase(componentName);\n\n      // Set name through options\n      options.name = componentName;\n\n      // Create a new object & element for this controls set\n      // If there's no .player_, this is a player\n      let ComponentClass = Component.getComponent(componentClassName);\n\n      if (!ComponentClass) {\n        throw new Error(`Component ${componentClassName} does not exist`);\n      }\n\n      // data stored directly on the videojs object may be\n      // misidentified as a component to retain\n      // backwards-compatibility with 4.x. check to make sure the\n      // component class can be instantiated.\n      if (typeof ComponentClass !== 'function') {\n        return null;\n      }\n\n      component = new ComponentClass(this.player_ || this, options);\n\n    // child is a component instance\n    } else {\n      component = child;\n    }\n\n    this.children_.splice(index, 0, component);\n\n    if (typeof component.id === 'function') {\n      this.childIndex_[component.id()] = component;\n    }\n\n    // If a name wasn't used to create the component, check if we can use the\n    // name function of the component\n    componentName = componentName || (component.name && component.name());\n\n    if (componentName) {\n      this.childNameIndex_[componentName] = component;\n    }\n\n    // Add the UI object's element to the container div (box)\n    // Having an element is not required\n    if (typeof component.el === 'function' && component.el()) {\n      let childNodes = this.contentEl().children;\n      let refNode = childNodes[index] || null;\n      this.contentEl().insertBefore(component.el(), refNode);\n    }\n\n    // Return so it can stored on parent object if desired.\n    return component;\n  }\n\n  /**\n   * Remove a child component from this component's list of children, and the\n   * child component's element from this component's element\n   *\n   * @param  {Component} component Component to remove\n   * @method removeChild\n   */\n  removeChild(component) {\n    if (typeof component === 'string') {\n      component = this.getChild(component);\n    }\n\n    if (!component || !this.children_) {\n      return;\n    }\n\n    let childFound = false;\n\n    for (let i = this.children_.length - 1; i >= 0; i--) {\n      if (this.children_[i] === component) {\n        childFound = true;\n        this.children_.splice(i, 1);\n        break;\n      }\n    }\n\n    if (!childFound) {\n      return;\n    }\n\n    this.childIndex_[component.id()] = null;\n    this.childNameIndex_[component.name()] = null;\n\n    let compEl = component.el();\n\n    if (compEl && compEl.parentNode === this.contentEl()) {\n      this.contentEl().removeChild(component.el());\n    }\n  }\n\n  /**\n   * Add and initialize default child components from options\n   * ```js\n   *     // when an instance of MyComponent is created, all children in options\n   *     // will be added to the instance by their name strings and options\n   *     MyComponent.prototype.options_ = {\n   *       children: [\n   *         'myChildComponent'\n   *       ],\n   *       myChildComponent: {\n   *         myChildOption: true\n   *       }\n   *     };\n   *\n   *     // Or when creating the component\n   *     var myComp = new MyComponent(player, {\n   *       children: [\n   *         'myChildComponent'\n   *       ],\n   *       myChildComponent: {\n   *         myChildOption: true\n   *       }\n   *     });\n   * ```\n   * The children option can also be an array of\n   * child options objects (that also include a 'name' key).\n   * This can be used if you have two child components of the\n   * same type that need different options.\n   * ```js\n   *     var myComp = new MyComponent(player, {\n   *       children: [\n   *         'button',\n   *         {\n   *           name: 'button',\n   *           someOtherOption: true\n   *         },\n   *         {\n   *           name: 'button',\n   *           someOtherOption: false\n   *         }\n   *       ]\n   *     });\n   * ```\n   *\n   * @method initChildren\n   */\n  initChildren() {\n    let children = this.options_.children;\n\n    if (children) {\n      // `this` is `parent`\n      let parentOptions = this.options_;\n\n      let handleAdd = (child) => {\n        let name = child.name;\n        let opts = child.opts;\n\n        // Allow options for children to be set at the parent options\n        // e.g. videojs(id, { controlBar: false });\n        // instead of videojs(id, { children: { controlBar: false });\n        if (parentOptions[name] !== undefined) {\n          opts = parentOptions[name];\n        }\n\n        // Allow for disabling default components\n        // e.g. options['children']['posterImage'] = false\n        if (opts === false) {\n          return;\n        }\n\n        // Allow options to be passed as a simple boolean if no configuration\n        // is necessary.\n        if (opts === true) {\n          opts = {};\n        }\n\n        // We also want to pass the original player options to each component as well so they don't need to\n        // reach back into the player for options later.\n        opts.playerOptions = this.options_.playerOptions;\n\n        // Create and add the child component.\n        // Add a direct reference to the child by name on the parent instance.\n        // If two of the same component are used, different names should be supplied\n        // for each\n        let newChild = this.addChild(name, opts);\n        if (newChild) {\n          this[name] = newChild;\n        }\n      };\n\n      // Allow for an array of children details to passed in the options\n      let workingChildren;\n      let Tech = Component.getComponent('Tech');\n\n      if (Array.isArray(children)) {\n        workingChildren = children;\n      } else {\n        workingChildren = Object.keys(children);\n      }\n\n      workingChildren\n      // children that are in this.options_ but also in workingChildren  would\n      // give us extra children we do not want. So, we want to filter them out.\n      .concat(Object.keys(this.options_)\n              .filter(function(child) {\n                return !workingChildren.some(function(wchild) {\n                  if (typeof wchild === 'string') {\n                    return child === wchild;\n                  } else {\n                    return child === wchild.name;\n                  }\n                });\n              }))\n      .map((child) => {\n        let name, opts;\n\n        if (typeof child === 'string') {\n          name = child;\n          opts = children[name] || this.options_[name] || {};\n        } else {\n          name = child.name;\n          opts = child;\n        }\n\n        return {name, opts};\n      })\n      .filter((child) => {\n        // we have to make sure that child.name isn't in the techOrder since\n        // techs are registerd as Components but can't aren't compatible\n        // See https://github.com/videojs/video.js/issues/2772\n        let c = Component.getComponent(child.opts.componentClass ||\n                                       toTitleCase(child.name));\n        return c && !Tech.isTech(c);\n      })\n      .forEach(handleAdd);\n    }\n  }\n\n  /**\n   * Allows sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    // Child classes can include a function that does:\n    // return 'CLASS NAME' + this._super();\n    return '';\n  }\n\n  /**\n   * Add an event listener to this component's element\n   * ```js\n   *     var myFunc = function(){\n   *       var myComponent = this;\n   *       // Do something when the event is fired\n   *     };\n   *\n   *     myComponent.on('eventType', myFunc);\n   * ```\n   * The context of myFunc will be myComponent unless previously bound.\n   * Alternatively, you can add a listener to another element or component.\n   * ```js\n   *     myComponent.on(otherElement, 'eventName', myFunc);\n   *     myComponent.on(otherComponent, 'eventName', myFunc);\n   * ```\n   * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n   * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n   * will be automatically cleaned up when either component is disposed.\n   * It will also bind myComponent as the context of myFunc.\n   * **NOTE**: When using this on elements in the page other than window\n   * and document (both permanent), if you remove the element from the DOM\n   * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n   * references to it and allow the browser to garbage collect it.\n   *\n   * @param  {String|Component} first   The event type or other component\n   * @param  {Function|String}      second  The event handler or event type\n   * @param  {Function}             third   The event handler\n   * @return {Component}\n   * @method on\n   */\n  on(first, second, third) {\n    if (typeof first === 'string' || Array.isArray(first)) {\n      Events.on(this.el_, first, Fn.bind(this, second));\n\n    // Targeting another component or element\n    } else {\n      const target = first;\n      const type = second;\n      const fn = Fn.bind(this, third);\n\n      // When this component is disposed, remove the listener from the other component\n      const removeOnDispose = () => this.off(target, type, fn);\n\n      // Use the same function ID so we can remove it later it using the ID\n      // of the original listener\n      removeOnDispose.guid = fn.guid;\n      this.on('dispose', removeOnDispose);\n\n      // If the other component is disposed first we need to clean the reference\n      // to the other component in this component's removeOnDispose listener\n      // Otherwise we create a memory leak.\n      const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n      // Add the same function ID so we can easily remove it later\n      cleanRemover.guid = fn.guid;\n\n      // Check if this is a DOM node\n      if (first.nodeName) {\n        // Add the listener to the other element\n        Events.on(target, type, fn);\n        Events.on(target, 'dispose', cleanRemover);\n\n      // Should be a component\n      // Not using `instanceof Component` because it makes mock players difficult\n      } else if (typeof first.on === 'function') {\n        // Add the listener to the other component\n        target.on(type, fn);\n        target.on('dispose', cleanRemover);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Remove an event listener from this component's element\n   * ```js\n   *     myComponent.off('eventType', myFunc);\n   * ```\n   * If myFunc is excluded, ALL listeners for the event type will be removed.\n   * If eventType is excluded, ALL listeners will be removed from the component.\n   * Alternatively you can use `off` to remove listeners that were added to other\n   * elements or components using `myComponent.on(otherComponent...`.\n   * In this case both the event type and listener function are REQUIRED.\n   * ```js\n   *     myComponent.off(otherElement, 'eventType', myFunc);\n   *     myComponent.off(otherComponent, 'eventType', myFunc);\n   * ```\n   *\n   * @param  {String=|Component}  first  The event type or other component\n   * @param  {Function=|String}       second The listener function or event type\n   * @param  {Function=}              third  The listener for other component\n   * @return {Component}\n   * @method off\n   */\n  off(first, second, third) {\n    if (!first || typeof first === 'string' || Array.isArray(first)) {\n      Events.off(this.el_, first, second);\n    } else {\n      const target = first;\n      const type = second;\n      // Ensure there's at least a guid, even if the function hasn't been used\n      const fn = Fn.bind(this, third);\n\n      // Remove the dispose listener on this component,\n      // which was given the same guid as the event listener\n      this.off('dispose', fn);\n\n      if (first.nodeName) {\n        // Remove the listener\n        Events.off(target, type, fn);\n        // Remove the listener for cleaning the dispose listener\n        Events.off(target, 'dispose', fn);\n      } else {\n        target.off(type, fn);\n        target.off('dispose', fn);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Add an event listener to be triggered only once and then removed\n   * ```js\n   *     myComponent.one('eventName', myFunc);\n   * ```\n   * Alternatively you can add a listener to another element or component\n   * that will be triggered only once.\n   * ```js\n   *     myComponent.one(otherElement, 'eventName', myFunc);\n   *     myComponent.one(otherComponent, 'eventName', myFunc);\n   * ```\n   *\n   * @param  {String|Component}  first   The event type or other component\n   * @param  {Function|String}       second  The listener function or event type\n   * @param  {Function=}             third   The listener function for other component\n   * @return {Component}\n   * @method one\n   */\n  one(first, second, third) {\n    if (typeof first === 'string' || Array.isArray(first)) {\n      Events.one(this.el_, first, Fn.bind(this, second));\n    } else {\n      const target = first;\n      const type = second;\n      const fn = Fn.bind(this, third);\n\n      const newFunc = () => {\n        this.off(target, type, newFunc);\n        fn.apply(null, arguments);\n      };\n\n      // Keep the same function ID so we can remove it later\n      newFunc.guid = fn.guid;\n\n      this.on(target, type, newFunc);\n    }\n\n    return this;\n  }\n\n  /**\n   * Trigger an event on an element\n   * ```js\n   *     myComponent.trigger('eventName');\n   *     myComponent.trigger({'type':'eventName'});\n   *     myComponent.trigger('eventName', {data: 'some data'});\n   *     myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n   * ```\n   *\n   * @param  {Event|Object|String} event  A string (the type) or an event object with a type attribute\n   * @param  {Object} [hash] data hash to pass along with the event\n   * @return {Component}       self\n   * @method trigger\n   */\n  trigger(event, hash) {\n    Events.trigger(this.el_, event, hash);\n    return this;\n  }\n\n  /**\n   * Bind a listener to the component's ready state.\n   * Different from event listeners in that if the ready event has already happened\n   * it will trigger the function immediately.\n   *\n   * @param  {Function} fn Ready listener\n   * @param  {Boolean} sync Exec the listener synchronously if component is ready\n   * @return {Component}\n   * @method ready\n   */\n  ready(fn, sync=false) {\n    if (fn) {\n      if (this.isReady_) {\n        if (sync) {\n          fn.call(this);\n        } else {\n          // Call the function asynchronously by default for consistency\n          this.setTimeout(fn, 1);\n        }\n      } else {\n        this.readyQueue_ = this.readyQueue_ || [];\n        this.readyQueue_.push(fn);\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Trigger the ready listeners\n   *\n   * @return {Component}\n   * @method triggerReady\n   */\n  triggerReady() {\n    this.isReady_ = true;\n\n    // Ensure ready is triggerd asynchronously\n    this.setTimeout(function(){\n      let readyQueue = this.readyQueue_;\n\n      // Reset Ready Queue\n      this.readyQueue_ = [];\n\n      if (readyQueue && readyQueue.length > 0) {\n        readyQueue.forEach(function(fn){\n          fn.call(this);\n        }, this);\n      }\n\n      // Allow for using event listeners also\n      this.trigger('ready');\n    }, 1);\n  }\n\n  /**\n   * Finds a single DOM element matching `selector` within the component's\n   * `contentEl` or another custom context.\n   *\n   * @method $\n   * @param  {String} selector\n   *         A valid CSS selector, which will be passed to `querySelector`.\n   *\n   * @param  {Element|String} [context=document]\n   *         A DOM element within which to query. Can also be a selector\n   *         string in which case the first matching element will be used\n   *         as context. If missing (or no element matches selector), falls\n   *         back to `document`.\n   *\n   * @return {Element|null}\n   */\n  $(selector, context) {\n    return Dom.$(selector, context || this.contentEl());\n  }\n\n  /**\n   * Finds a all DOM elements matching `selector` within the component's\n   * `contentEl` or another custom context.\n   *\n   * @method $$\n   * @param  {String} selector\n   *         A valid CSS selector, which will be passed to `querySelectorAll`.\n   *\n   * @param  {Element|String} [context=document]\n   *         A DOM element within which to query. Can also be a selector\n   *         string in which case the first matching element will be used\n   *         as context. If missing (or no element matches selector), falls\n   *         back to `document`.\n   *\n   * @return {NodeList}\n   */\n  $$(selector, context) {\n    return Dom.$$(selector, context || this.contentEl());\n  }\n\n  /**\n   * Check if a component's element has a CSS class name\n   *\n   * @param {String} classToCheck Classname to check\n   * @return {Component}\n   * @method hasClass\n   */\n  hasClass(classToCheck) {\n    return Dom.hasElClass(this.el_, classToCheck);\n  }\n\n  /**\n   * Add a CSS class name to the component's element\n   *\n   * @param {String} classToAdd Classname to add\n   * @return {Component}\n   * @method addClass\n   */\n  addClass(classToAdd) {\n    Dom.addElClass(this.el_, classToAdd);\n    return this;\n  }\n\n  /**\n   * Remove a CSS class name from the component's element\n   *\n   * @param {String} classToRemove Classname to remove\n   * @return {Component}\n   * @method removeClass\n   */\n  removeClass(classToRemove) {\n    Dom.removeElClass(this.el_, classToRemove);\n    return this;\n  }\n\n  /**\n   * Add or remove a CSS class name from the component's element\n   *\n   * @param  {String} classToToggle\n   * @param  {Boolean|Function} [predicate]\n   *         Can be a function that returns a Boolean. If `true`, the class\n   *         will be added; if `false`, the class will be removed. If not\n   *         given, the class will be added if not present and vice versa.\n   *\n   * @return {Component}\n   * @method toggleClass\n   */\n  toggleClass(classToToggle, predicate) {\n    Dom.toggleElClass(this.el_, classToToggle, predicate);\n    return this;\n  }\n\n  /**\n   * Show the component element if hidden\n   *\n   * @return {Component}\n   * @method show\n   */\n  show() {\n    this.removeClass('vjs-hidden');\n    return this;\n  }\n\n  /**\n   * Hide the component element if currently showing\n   *\n   * @return {Component}\n   * @method hide\n   */\n  hide() {\n    this.addClass('vjs-hidden');\n    return this;\n  }\n\n  /**\n   * Lock an item in its visible state\n   * To be used with fadeIn/fadeOut.\n   *\n   * @return {Component}\n   * @private\n   * @method lockShowing\n   */\n  lockShowing() {\n    this.addClass('vjs-lock-showing');\n    return this;\n  }\n\n  /**\n   * Unlock an item to be hidden\n   * To be used with fadeIn/fadeOut.\n   *\n   * @return {Component}\n   * @private\n   * @method unlockShowing\n   */\n  unlockShowing() {\n    this.removeClass('vjs-lock-showing');\n    return this;\n  }\n\n  /**\n   * Set or get the width of the component (CSS values)\n   * Setting the video tag dimension values only works with values in pixels.\n   * Percent values will not work.\n   * Some percents can be used, but width()/height() will return the number + %,\n   * not the actual computed width/height.\n   *\n   * @param  {Number|String=} num   Optional width number\n   * @param  {Boolean} skipListeners Skip the 'resize' event trigger\n   * @return {Component} This component, when setting the width\n   * @return {Number|String} The width, when getting\n   * @method width\n   */\n  width(num, skipListeners) {\n    return this.dimension('width', num, skipListeners);\n  }\n\n  /**\n   * Get or set the height of the component (CSS values)\n   * Setting the video tag dimension values only works with values in pixels.\n   * Percent values will not work.\n   * Some percents can be used, but width()/height() will return the number + %,\n   * not the actual computed width/height.\n   *\n   * @param  {Number|String=} num     New component height\n   * @param  {Boolean=} skipListeners Skip the resize event trigger\n   * @return {Component} This component, when setting the height\n   * @return {Number|String} The height, when getting\n   * @method height\n   */\n  height(num, skipListeners) {\n    return this.dimension('height', num, skipListeners);\n  }\n\n  /**\n   * Set both width and height at the same time\n   *\n   * @param  {Number|String} width Width of player\n   * @param  {Number|String} height Height of player\n   * @return {Component} The component\n   * @method dimensions\n   */\n  dimensions(width, height) {\n    // Skip resize listeners on width for optimization\n    return this.width(width, true).height(height);\n  }\n\n  /**\n   * Get or set width or height\n   * This is the shared code for the width() and height() methods.\n   * All for an integer, integer + 'px' or integer + '%';\n   * Known issue: Hidden elements officially have a width of 0. We're defaulting\n   * to the style.width value and falling back to computedStyle which has the\n   * hidden element issue. Info, but probably not an efficient fix:\n   * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n   *\n   * @param  {String} widthOrHeight  'width' or 'height'\n   * @param  {Number|String=} num     New dimension\n   * @param  {Boolean=} skipListeners Skip resize event trigger\n   * @return {Component} The component if a dimension was set\n   * @return {Number|String} The dimension if nothing was set\n   * @private\n   * @method dimension\n   */\n  dimension(widthOrHeight, num, skipListeners) {\n    if (num !== undefined) {\n      // Set to zero if null or literally NaN (NaN !== NaN)\n      if (num === null || num !== num) {\n        num = 0;\n      }\n\n      // Check if using css width/height (% or px) and adjust\n      if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n        this.el_.style[widthOrHeight] = num;\n      } else if (num === 'auto') {\n        this.el_.style[widthOrHeight] = '';\n      } else {\n        this.el_.style[widthOrHeight] = num + 'px';\n      }\n\n      // skipListeners allows us to avoid triggering the resize event when setting both width and height\n      if (!skipListeners) {\n        this.trigger('resize');\n      }\n\n      // Return component\n      return this;\n    }\n\n    // Not setting a value, so getting it\n    // Make sure element exists\n    if (!this.el_) {\n      return 0;\n    }\n\n    // Get dimension value from style\n    let val = this.el_.style[widthOrHeight];\n    let pxIndex = val.indexOf('px');\n\n    if (pxIndex !== -1) {\n      // Return the pixel value with no 'px'\n      return parseInt(val.slice(0, pxIndex), 10);\n    }\n\n    // No px so using % or no style was set, so falling back to offsetWidth/height\n    // If component has display:none, offset will return 0\n    // TODO: handle display:none and no dimension style using px\n    return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n  }\n\n  /**\n   * Get width or height of computed style\n   * @param  {String} widthOrHeight  'width' or 'height'\n   * @return {Number|Boolean} The bolean false if nothing was set\n   * @method currentDimension\n   */\n  currentDimension(widthOrHeight) {\n    let computedWidthOrHeight = 0;\n\n    if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {\n      throw new Error('currentDimension only accepts width or height value');\n    }\n\n    if (typeof window.getComputedStyle === 'function') {\n      const computedStyle = window.getComputedStyle(this.el_);\n      computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight];\n    } else if (this.el_.currentStyle) {\n      // ie 8 doesn't support computed style, shim it\n      // return clientWidth or clientHeight instead for better accuracy\n      const rule = `offset${toTitleCase(widthOrHeight)}`;\n      computedWidthOrHeight = this.el_[rule];\n    }\n\n    // remove 'px' from variable and parse as integer\n    computedWidthOrHeight = parseFloat(computedWidthOrHeight);\n    return computedWidthOrHeight;\n  }\n\n  /**\n   * Get an object which contains width and height values of computed style\n   * @return {Object} The dimensions of element\n   * @method currentDimensions\n   */\n  currentDimensions() {\n    return {\n      width: this.currentDimension('width'),\n      height: this.currentDimension('height')\n    };\n  }\n\n  /**\n   * Get width of computed style\n   * @return {Integer}\n   * @method currentWidth\n   */\n  currentWidth() {\n    return this.currentDimension('width');\n  }\n\n  /**\n   * Get height of computed style\n   * @return {Integer}\n   * @method currentHeight\n   */\n  currentHeight() {\n    return this.currentDimension('height');\n  }\n\n  /**\n   * Emit 'tap' events when touch events are supported\n   * This is used to support toggling the controls through a tap on the video.\n   * We're requiring them to be enabled because otherwise every component would\n   * have this extra overhead unnecessarily, on mobile devices where extra\n   * overhead is especially bad.\n   *\n   * @private\n   * @method emitTapEvents\n   */\n  emitTapEvents() {\n    // Track the start time so we can determine how long the touch lasted\n    let touchStart = 0;\n    let firstTouch = null;\n\n    // Maximum movement allowed during a touch event to still be considered a tap\n    // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n    const tapMovementThreshold = 10;\n\n    // The maximum length a touch can be while still being considered a tap\n    const touchTimeThreshold = 200;\n\n    let couldBeTap;\n\n    this.on('touchstart', function(event) {\n      // If more than one finger, don't consider treating this as a click\n      if (event.touches.length === 1) {\n        // Copy the touches object to prevent modifying the original\n        firstTouch = assign({}, event.touches[0]);\n        // Record start time so we can detect a tap vs. \"touch and hold\"\n        touchStart = new Date().getTime();\n        // Reset couldBeTap tracking\n        couldBeTap = true;\n      }\n    });\n\n    this.on('touchmove', function(event) {\n      // If more than one finger, don't consider treating this as a click\n      if (event.touches.length > 1) {\n        couldBeTap = false;\n      } else if (firstTouch) {\n        // Some devices will throw touchmoves for all but the slightest of taps.\n        // So, if we moved only a small distance, this could still be a tap\n        const xdiff = event.touches[0].pageX - firstTouch.pageX;\n        const ydiff = event.touches[0].pageY - firstTouch.pageY;\n        const touchDistance = Math.sqrt(xdiff  * xdiff + ydiff  * ydiff);\n\n        if (touchDistance > tapMovementThreshold) {\n          couldBeTap = false;\n        }\n      }\n    });\n\n    const noTap = function() {\n      couldBeTap = false;\n    };\n\n    // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n    this.on('touchleave', noTap);\n    this.on('touchcancel', noTap);\n\n    // When the touch ends, measure how long it took and trigger the appropriate\n    // event\n    this.on('touchend', function(event) {\n      firstTouch = null;\n      // Proceed only if the touchmove/leave/cancel event didn't happen\n      if (couldBeTap === true) {\n        // Measure how long the touch lasted\n        const touchTime = new Date().getTime() - touchStart;\n\n        // Make sure the touch was less than the threshold to be considered a tap\n        if (touchTime < touchTimeThreshold) {\n          // Don't let browser turn this into a click\n          event.preventDefault();\n          this.trigger('tap');\n          // It may be good to copy the touchend event object and change the\n          // type to tap, if the other event properties aren't exact after\n          // Events.fixEvent runs (e.g. event.target)\n        }\n      }\n    });\n  }\n\n  /**\n   * Report user touch activity when touch events occur\n   * User activity is used to determine when controls should show/hide. It's\n   * relatively simple when it comes to mouse events, because any mouse event\n   * should show the controls. So we capture mouse events that bubble up to the\n   * player and report activity when that happens.\n   * With touch events it isn't as easy. We can't rely on touch events at the\n   * player level, because a tap (touchstart + touchend) on the video itself on\n   * mobile devices is meant to turn controls off (and on). User activity is\n   * checked asynchronously, so what could happen is a tap event on the video\n   * turns the controls off, then the touchend event bubbles up to the player,\n   * which if it reported user activity, would turn the controls right back on.\n   * (We also don't want to completely block touch events from bubbling up)\n   * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n   * to turn the controls back on on a mobile device.\n   * Here we're setting the default component behavior to report user activity\n   * whenever touch events happen, and this can be turned off by components that\n   * want touch events to act differently.\n   *\n   * @method enableTouchActivity\n   */\n  enableTouchActivity() {\n    // Don't continue if the root player doesn't support reporting user activity\n    if (!this.player() || !this.player().reportUserActivity) {\n      return;\n    }\n\n    // listener for reporting that the user is active\n    const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n    let touchHolding;\n\n    this.on('touchstart', function() {\n      report();\n      // For as long as the they are touching the device or have their mouse down,\n      // we consider them active even if they're not moving their finger or mouse.\n      // So we want to continue to update that they are active\n      this.clearInterval(touchHolding);\n      // report at the same interval as activityCheck\n      touchHolding = this.setInterval(report, 250);\n    });\n\n    const touchEnd = function(event) {\n      report();\n      // stop the interval that maintains activity if the touch is holding\n      this.clearInterval(touchHolding);\n    };\n\n    this.on('touchmove', report);\n    this.on('touchend', touchEnd);\n    this.on('touchcancel', touchEnd);\n  }\n\n  /**\n   * Creates timeout and sets up disposal automatically.\n   *\n   * @param {Function} fn The function to run after the timeout.\n   * @param {Number} timeout Number of ms to delay before executing specified function.\n   * @return {Number} Returns the timeout ID\n   * @method setTimeout\n   */\n  setTimeout(fn, timeout) {\n    fn = Fn.bind(this, fn);\n\n    // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n    let timeoutId = window.setTimeout(fn, timeout);\n\n    const disposeFn = function() {\n      this.clearTimeout(timeoutId);\n    };\n\n    disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n    this.on('dispose', disposeFn);\n\n    return timeoutId;\n  }\n\n  /**\n   * Clears a timeout and removes the associated dispose listener\n   *\n   * @param {Number} timeoutId The id of the timeout to clear\n   * @return {Number} Returns the timeout ID\n   * @method clearTimeout\n   */\n  clearTimeout(timeoutId) {\n    window.clearTimeout(timeoutId);\n\n    const disposeFn = function() {};\n\n    disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n    this.off('dispose', disposeFn);\n\n    return timeoutId;\n  }\n\n  /**\n   * Creates an interval and sets up disposal automatically.\n   *\n   * @param {Function} fn The function to run every N seconds.\n   * @param {Number} interval Number of ms to delay before executing specified function.\n   * @return {Number} Returns the interval ID\n   * @method setInterval\n   */\n  setInterval(fn, interval) {\n    fn = Fn.bind(this, fn);\n\n    let intervalId = window.setInterval(fn, interval);\n\n    const disposeFn = function() {\n      this.clearInterval(intervalId);\n    };\n\n    disposeFn.guid = `vjs-interval-${intervalId}`;\n\n    this.on('dispose', disposeFn);\n\n    return intervalId;\n  }\n\n  /**\n   * Clears an interval and removes the associated dispose listener\n   *\n   * @param {Number} intervalId The id of the interval to clear\n   * @return {Number} Returns the interval ID\n   * @method clearInterval\n   */\n  clearInterval(intervalId) {\n    window.clearInterval(intervalId);\n\n    const disposeFn = function() {};\n\n    disposeFn.guid = `vjs-interval-${intervalId}`;\n\n    this.off('dispose', disposeFn);\n\n    return intervalId;\n  }\n\n  /**\n   * Registers a component\n   *\n   * @param {String} name Name of the component to register\n   * @param {Object} comp The component to register\n   * @static\n   * @method registerComponent\n   */\n  static registerComponent(name, comp) {\n    if (!Component.components_) {\n      Component.components_ = {};\n    }\n\n    Component.components_[name] = comp;\n    return comp;\n  }\n\n  /**\n   * Gets a component by name\n   *\n   * @param {String} name Name of the component to get\n   * @return {Component}\n   * @static\n   * @method getComponent\n   */\n  static getComponent(name) {\n    if (Component.components_ && Component.components_[name]) {\n      return Component.components_[name];\n    }\n\n    if (window && window.videojs && window.videojs[name]) {\n      log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n      return window.videojs[name];\n    }\n  }\n\n  /**\n   * Sets up the constructor using the supplied init method\n   * or uses the init of the parent object\n   *\n   * @param {Object} props An object of properties\n   * @static\n   * @deprecated\n   * @method extend\n   */\n  static extend(props) {\n    props = props || {};\n\n    log.warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');\n\n    // Set up the constructor using the supplied init method\n    // or using the init of the parent object\n    // Make sure to check the unobfuscated version for external libs\n    let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n    // In Resig's simple class inheritance (previously used) the constructor\n    //  is a function that calls `this.init.apply(arguments)`\n    // However that would prevent us from using `ParentObject.call(this);`\n    //  in a Child constructor because the `this` in `this.init`\n    //  would still refer to the Child and cause an infinite loop.\n    // We would instead have to do\n    //    `ParentObject.prototype.init.apply(this, arguments);`\n    //  Bleh. We're not creating a _super() function, so it's good to keep\n    //  the parent constructor reference simple.\n    let subObj = function() {\n      init.apply(this, arguments);\n    };\n\n    // Inherit from this object's prototype\n    subObj.prototype = Object.create(this.prototype);\n    // Reset the constructor property for subObj otherwise\n    // instances of subObj would have the constructor of the parent Object\n    subObj.prototype.constructor = subObj;\n\n    // Make the class extendable\n    subObj.extend = Component.extend;\n\n    // Extend subObj's prototype with functions and other properties from props\n    for (let name in props) {\n      if (props.hasOwnProperty(name)) {\n        subObj.prototype[name] = props[name];\n      }\n    }\n\n    return subObj;\n  }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n","/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport DescriptionsButton from './text-track-controls/descriptions-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-control-bar',\n      dir: 'ltr'\n    }, {\n      'role': 'group' // The control bar is a group, so it can contain menuitems\n    });\n  }\n}\n\nControlBar.prototype.options_ = {\n  loadEvent: 'play',\n  children: [\n    'playToggle',\n    'volumeMenuButton',\n    'currentTimeDisplay',\n    'timeDivider',\n    'durationDisplay',\n    'progressControl',\n    'liveDisplay',\n    'remainingTimeDisplay',\n    'customControlSpacer',\n    'playbackRateMenuButton',\n    'chaptersButton',\n    'descriptionsButton',\n    'subtitlesButton',\n    'captionsButton',\n    'fullscreenToggle'\n  ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n","/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handles click for full screen\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    if (!this.player_.isFullscreen()) {\n      this.player_.requestFullscreen();\n      this.controlText('Non-Fullscreen');\n    } else {\n      this.player_.exitFullscreen();\n      this.controlText('Fullscreen');\n    }\n  }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n","/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n *\n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.updateShowing();\n    this.on(this.player(), 'durationchange', this.updateShowing);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    var el = super.createEl('div', {\n      className: 'vjs-live-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-live-display',\n      innerHTML: `<span class=\"vjs-control-text\">${this.localize('Stream Type')}</span>${this.localize('LIVE')}`\n    }, {\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  updateShowing() {\n    if (this.player().duration() === Infinity) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n","/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.on(player, 'volumechange', this.update);\n\n    // hide mute toggle if the current tech doesn't support volume control\n    if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n\n    this.on(player, 'loadstart', function() {\n      this.update(); // We need to update the button to account for a default muted state.\n\n      if (player.tech_['featuresVolumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-mute-control ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handle click on mute\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.player_.muted( this.player_.muted() ? false : true );\n  }\n\n  /**\n   * Update volume\n   *\n   * @method update\n   */\n  update() {\n    var vol = this.player_.volume(),\n        level = 3;\n\n    if (vol === 0 || this.player_.muted()) {\n      level = 0;\n    } else if (vol < 0.33) {\n      level = 1;\n    } else if (vol < 0.67) {\n      level = 2;\n    }\n\n    // Don't rewrite the button text if the actual text doesn't change.\n    // This causes unnecessary and confusing information for screen reader users.\n    // This check is needed because this function gets called every time the volume level is changed.\n    let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n    if (this.controlText() !== toMute) {\n      this.controlText(toMute);\n    }\n\n    /* TODO improve muted icon classes */\n    for (var i = 0; i < 4; i++) {\n      Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n    }\n    Dom.addElClass(this.el_, `vjs-vol-${level}`);\n  }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n","/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.on(player, 'play', this.handlePlay);\n    this.on(player, 'pause', this.handlePause);\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-play-control ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handle click to toggle between play and pause\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    if (this.player_.paused()) {\n      this.player_.play();\n    } else {\n      this.player_.pause();\n    }\n  }\n\n  /**\n   * Add the vjs-playing class to the element so it can change appearance\n   *\n   * @method handlePlay\n   */\n  handlePlay() {\n    this.removeClass('vjs-paused');\n    this.addClass('vjs-playing');\n    this.controlText('Pause'); // change the button text to \"Pause\"\n  }\n\n  /**\n   * Add the vjs-paused class to the element so it can change appearance\n   *\n   * @method handlePause\n   */\n  handlePause() {\n    this.removeClass('vjs-playing');\n    this.addClass('vjs-paused');\n    this.controlText('Play'); // change the button text to \"Play\"\n  }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n","/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.updateVisibility();\n    this.updateLabel();\n\n    this.on(player, 'loadstart', this.updateVisibility);\n    this.on(player, 'ratechange', this.updateLabel);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl();\n\n    this.labelEl_ = Dom.createEl('div', {\n      className: 'vjs-playback-rate-value',\n      innerHTML: 1.0\n    });\n\n    el.appendChild(this.labelEl_);\n\n    return el;\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-playback-rate ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create the playback rate menu\n   *\n   * @return {Menu} Menu object populated with items\n   * @method createMenu\n   */\n  createMenu() {\n    let menu = new Menu(this.player());\n    let rates = this.playbackRates();\n\n    if (rates) {\n      for (let i = rates.length - 1; i >= 0; i--) {\n        menu.addChild(\n          new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n        );\n      }\n    }\n\n    return menu;\n  }\n\n  /**\n   * Updates ARIA accessibility attributes\n   *\n   * @method updateARIAAttributes\n   */\n  updateARIAAttributes() {\n    // Current playback rate\n    this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n  }\n\n  /**\n   * Handle menu item click\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    // select next rate option\n    let currentRate = this.player().playbackRate();\n    let rates = this.playbackRates();\n\n    // this will select first one if the last one currently selected\n    let newRate = rates[0];\n    for (let i = 0; i < rates.length ; i++) {\n      if (rates[i] > currentRate) {\n        newRate = rates[i];\n        break;\n      }\n    }\n    this.player().playbackRate(newRate);\n  }\n\n  /**\n   * Get possible playback rates\n   *\n   * @return {Array} Possible playback rates\n   * @method playbackRates\n   */\n  playbackRates() {\n    return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n  }\n\n  /**\n   * Get whether playback rates is supported by the tech\n   * and an array of playback rates exists\n   *\n   * @return {Boolean} Whether changing playback rate is supported\n   * @method playbackRateSupported\n   */\n  playbackRateSupported() {\n    return this.player().tech_\n      && this.player().tech_['featuresPlaybackRate']\n      && this.playbackRates()\n      && this.playbackRates().length > 0\n    ;\n  }\n\n  /**\n   * Hide playback rate controls when they're no playback rate options to select\n   *\n   * @method updateVisibility\n   */\n  updateVisibility() {\n    if (this.playbackRateSupported()) {\n      this.removeClass('vjs-hidden');\n    } else {\n      this.addClass('vjs-hidden');\n    }\n  }\n\n  /**\n   * Update button label when rate changed\n   *\n   * @method updateLabel\n   */\n  updateLabel() {\n    if (this.playbackRateSupported()) {\n      this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n    }\n  }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n","/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n  constructor(player, options){\n    let label = options['rate'];\n    let rate = parseFloat(label, 10);\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = label;\n    options['selected'] = rate === 1;\n    super(player, options);\n\n    this.label = label;\n    this.rate = rate;\n\n    this.on(player, 'ratechange', this.update);\n  }\n\n  /**\n   * Handle click on menu item\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    super.handleClick();\n    this.player().playbackRate(this.rate);\n  }\n\n  /**\n   * Update playback rate with selected rate\n   *\n   * @method update\n   */\n  update() {\n    this.selected(this.player().playbackRate() === this.rate);\n  }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n","/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n  constructor(player, options){\n    super(player, options);\n    this.on(player, 'progress', this.update);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-load-progress',\n      innerHTML: `<span class=\"vjs-control-text\"><span>${this.localize('Loaded')}</span>: 0%</span>`\n    });\n  }\n\n  /**\n   * Update progress bar\n   *\n   * @method update\n   */\n  update() {\n    let buffered = this.player_.buffered();\n    let duration = this.player_.duration();\n    let bufferedEnd = this.player_.bufferedEnd();\n    let children = this.el_.children;\n\n    // get the percent width of a time compared to the total end\n    let percentify = function (time, end){\n      let percent = (time / end) || 0; // no NaN\n      return ((percent >= 1 ? 1 : percent) * 100) + '%';\n    };\n\n    // update the width of the progress bar\n    this.el_.style.width = percentify(bufferedEnd, duration);\n\n    // add child elements to represent the individual buffered time ranges\n    for (let i = 0; i < buffered.length; i++) {\n      let start = buffered.start(i);\n      let end = buffered.end(i);\n      let part = children[i];\n\n      if (!part) {\n        part = this.el_.appendChild(Dom.createEl());\n      }\n\n      // set the percent based on the width of the progress bar (bufferedEnd)\n      part.style.left = percentify(start, bufferedEnd);\n      part.style.width = percentify(end - start, bufferedEnd);\n    }\n\n    // remove unused buffered range elements\n    for (let i = children.length; i > buffered.length; i--) {\n      this.el_.removeChild(children[i-1]);\n    }\n  }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n","/**\n * @file mouse-time-display.js\n */\nimport window from 'global/window';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport throttle from 'lodash-compat/function/throttle';\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class MouseTimeDisplay\n */\nclass MouseTimeDisplay extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    if (options.playerOptions &&\n        options.playerOptions.controlBar &&\n        options.playerOptions.controlBar.progressControl &&\n        options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n      this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n    }\n\n    if (this.keepTooltipsInside) {\n      this.tooltip = Dom.createEl('div', {className: 'vjs-time-tooltip'});\n      this.el().appendChild(this.tooltip);\n      this.addClass('vjs-keep-tooltips-inside');\n    }\n\n    this.update(0, 0);\n\n    player.on('ready', () => {\n      this.on(player.controlBar.progressControl.el(), 'mousemove', throttle(Fn.bind(this, this.handleMouseMove), 25));\n    });\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-mouse-display'\n    });\n  }\n\n  handleMouseMove(event) {\n    let duration = this.player_.duration();\n    let newTime = this.calculateDistance(event) * duration;\n    let position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n\n    this.update(newTime, position);\n  }\n\n  update(newTime, position) {\n    let time = formatTime(newTime, this.player_.duration());\n\n    this.el().style.left = position + 'px';\n    this.el().setAttribute('data-current-time', time);\n\n    if (this.keepTooltipsInside) {\n      let clampedPosition = this.clampPosition_(position);\n      let difference = position - clampedPosition + 1;\n      let tooltipWidth = parseFloat(window.getComputedStyle(this.tooltip).width);\n      let tooltipWidthHalf = tooltipWidth / 2;\n\n      this.tooltip.innerHTML = time;\n      this.tooltip.style.right = `-${tooltipWidthHalf - difference}px`;\n    }\n  }\n\n  calculateDistance(event) {\n    return Dom.getPointerPosition(this.el().parentNode, event).x;\n  }\n\n  /**\n   * This takes in a horizontal position for the bar and returns a clamped position.\n   * Clamped position means that it will keep the position greater than half the width\n   * of the tooltip and smaller than the player width minus half the width o the tooltip.\n   * It will only clamp the position if `keepTooltipsInside` option is set.\n   *\n   * @param {Number} position the position the bar wants to be\n   * @return {Number} newPosition the (potentially) clamped position\n   * @method clampPosition_\n   */\n  clampPosition_(position) {\n    if (!this.keepTooltipsInside) {\n      return position;\n    }\n\n    let playerWidth = parseFloat(window.getComputedStyle(this.player().el()).width);\n    let tooltipWidth = parseFloat(window.getComputedStyle(this.tooltip).width);\n    let tooltipWidthHalf = tooltipWidth / 2;\n    let actualPosition = position;\n\n    if (position < tooltipWidthHalf) {\n      actualPosition = Math.ceil(tooltipWidthHalf);\n    } else if (position > (playerWidth - tooltipWidthHalf)) {\n      actualPosition = Math.floor(playerWidth - tooltipWidthHalf);\n    }\n\n    return actualPosition;\n  }\n}\n\nComponent.registerComponent('MouseTimeDisplay', MouseTimeDisplay);\nexport default MouseTimeDisplay;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n  constructor(player, options){\n    super(player, options);\n    this.updateDataAttr();\n    this.on(player, 'timeupdate', this.updateDataAttr);\n    player.ready(Fn.bind(this, this.updateDataAttr));\n\n    if (options.playerOptions &&\n        options.playerOptions.controlBar &&\n        options.playerOptions.controlBar.progressControl &&\n        options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n      this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n    }\n\n    if (this.keepTooltipsInside) {\n      this.addClass('vjs-keep-tooltips-inside');\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-play-progress vjs-slider-bar',\n      innerHTML: `<span class=\"vjs-control-text\"><span>${this.localize('Progress')}</span>: 0%</span>`\n    });\n  }\n\n  updateDataAttr() {\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n  }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n","/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\nimport MouseTimeDisplay from './mouse-time-display.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-progress-control vjs-control'\n    });\n  }\n}\n\nProgressControl.prototype.options_ = {\n  children: [\n    'seekBar'\n  ]\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n","/**\n * @file seek-bar.js\n */\nimport window from 'global/window';\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport TooltipProgressBar from './tooltip-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport assign from 'object.assign';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n  constructor(player, options){\n    super(player, options);\n    this.on(player, 'timeupdate', this.updateProgress);\n    this.on(player, 'ended', this.updateProgress);\n    player.ready(Fn.bind(this, this.updateProgress));\n\n    if (options.playerOptions &&\n        options.playerOptions.controlBar &&\n        options.playerOptions.controlBar.progressControl &&\n        options.playerOptions.controlBar.progressControl.keepTooltipsInside) {\n      this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;\n    }\n\n    if (this.keepTooltipsInside) {\n      this.tooltipProgressBar = this.addChild('TooltipProgressBar');\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-progress-holder'\n    }, {\n      'aria-label': 'progress bar'\n    });\n  }\n\n  /**\n   * Update ARIA accessibility attributes\n   *\n   * @method updateARIAAttributes\n   */\n  updateProgress() {\n    this.updateAriaAttributes(this.el_);\n\n    if (this.keepTooltipsInside) {\n      this.updateAriaAttributes(this.tooltipProgressBar.el_);\n      this.tooltipProgressBar.el_.style.width = this.bar.el_.style.width;\n\n      let playerWidth = parseFloat(window.getComputedStyle(this.player().el()).width);\n      let tooltipWidth = parseFloat(window.getComputedStyle(this.tooltipProgressBar.tooltip).width);\n      let tooltipStyle = this.tooltipProgressBar.el().style;\n      tooltipStyle.maxWidth = Math.floor(playerWidth - (tooltipWidth / 2)) + 'px';\n      tooltipStyle.minWidth = Math.ceil(tooltipWidth / 2) + 'px';\n      tooltipStyle.right = `-${tooltipWidth / 2}px`;\n    }\n  }\n\n  updateAriaAttributes(el) {\n    // Allows for smooth scrubbing, when player can't keep up.\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    el.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n    el.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n  }\n\n  /**\n   * Get percentage of video played\n   *\n   * @return {Number} Percentage played\n   * @method getPercent\n   */\n  getPercent() {\n    let percent = this.player_.currentTime() / this.player_.duration();\n    return percent >= 1 ? 1 : percent;\n  }\n\n  /**\n   * Handle mouse down on seek bar\n   *\n   * @method handleMouseDown\n   */\n  handleMouseDown(event) {\n    super.handleMouseDown(event);\n\n    this.player_.scrubbing(true);\n\n    this.videoWasPlaying = !this.player_.paused();\n    this.player_.pause();\n  }\n\n  /**\n   * Handle mouse move on seek bar\n   *\n   * @method handleMouseMove\n   */\n  handleMouseMove(event) {\n    let newTime = this.calculateDistance(event) * this.player_.duration();\n\n    // Don't let video end while scrubbing.\n    if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n    // Set new time (tell player to seek to new time)\n    this.player_.currentTime(newTime);\n  }\n\n  /**\n   * Handle mouse up on seek bar\n   *\n   * @method handleMouseUp\n   */\n  handleMouseUp(event) {\n    super.handleMouseUp(event);\n\n    this.player_.scrubbing(false);\n    if (this.videoWasPlaying) {\n      this.player_.play();\n    }\n  }\n\n  /**\n   * Move more quickly fast forward for keyboard-only users\n   *\n   * @method stepForward\n   */\n  stepForward() {\n    this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n  }\n\n  /**\n   * Move more quickly rewind for keyboard-only users\n   *\n   * @method stepBack\n   */\n  stepBack() {\n    this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n  }\n\n}\n\nSeekBar.prototype.options_ = {\n  children: [\n    'loadProgressBar',\n    'mouseTimeDisplay',\n    'playProgressBar'\n  ],\n  'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass TooltipProgressBar extends Component {\n\n  constructor(player, options){\n    super(player, options);\n    this.updateDataAttr();\n    this.on(player, 'timeupdate', this.updateDataAttr);\n    player.ready(Fn.bind(this, this.updateDataAttr));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-tooltip-progress-bar vjs-slider-bar',\n      innerHTML: `<div class=\"vjs-time-tooltip\"></div>\n        <span class=\"vjs-control-text\"><span>${this.localize('Progress')}</span>: 0%</span>`\n    });\n\n    this.tooltip = el.querySelector('.vjs-time-tooltip');\n\n    return el;\n  }\n\n  updateDataAttr() {\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    let formattedTime = formatTime(time, this.player_.duration());\n    this.el_.setAttribute('data-current-time', formattedTime);\n    this.tooltip.innerHTML = formattedTime;\n  }\n\n}\n\nComponent.registerComponent('TooltipProgressBar', TooltipProgressBar);\nexport default TooltipProgressBar;\n","/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl({\n      className: this.buildCSSClass(),\n    });\n\n    // No-flex/table-cell mode requires there be some content\n    // in the cell to fill the remaining space of the table.\n    el.innerHTML = '&nbsp;';\n    return el;\n  }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n","/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-spacer ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass()\n    });\n  }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n","/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n  constructor(player, options) {\n    options['track'] = {\n      'kind': options['kind'],\n      'player': player,\n      'label': options['kind'] + ' settings',\n      'selectable': false,\n      'default': false,\n      mode: 'disabled'\n    };\n\n    // CaptionSettingsMenuItem has no concept of 'selected'\n    options['selectable'] = false;\n\n    super(player, options);\n    this.addClass('vjs-texttrack-settings');\n    this.controlText(', opens ' + options['kind'] + ' settings dialog');\n  }\n\n  /**\n   * Handle click on menu item\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.player().getChild('textTrackSettings').show();\n    this.player().getChild('textTrackSettings').el_.focus();\n  }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n","/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label','Captions Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-captions-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Update caption menu items\n   *\n   * @method update\n   */\n  update() {\n    let threshold = 2;\n    super.update();\n\n    // if native, then threshold is 1 because no settings button\n    if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) {\n      threshold = 1;\n    }\n\n    if (this.items && this.items.length > threshold) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Create caption menu items\n   *\n   * @return {Array} Array of menu items\n   * @method createItems\n   */\n  createItems() {\n    let items = [];\n\n    if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) {\n      items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n    }\n\n    return super.createItems(items);\n  }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n","/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label','Chapters Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-chapters-button ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Create a menu item for each text track\n   *\n   * @return {Array} Array of menu items\n   * @method createItems\n   */\n  createItems() {\n    let items = [];\n\n    let tracks = this.player_.textTracks();\n\n    if (!tracks) {\n      return items;\n    }\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n      if (track['kind'] === this.kind_) {\n        items.push(new TextTrackMenuItem(this.player_, {\n          'track': track\n        }));\n      }\n    }\n\n    return items;\n  }\n\n  /**\n   * Create menu from chapter buttons\n   *\n   * @return {Menu} Menu of chapter buttons\n   * @method createMenu\n   */\n  createMenu() {\n    let tracks = this.player_.textTracks() || [];\n    let chaptersTrack;\n    let items = this.items = [];\n\n    for (let i = 0, length = tracks.length; i < length; i++) {\n      let track = tracks[i];\n\n      if (track['kind'] === this.kind_) {\n        chaptersTrack = track;\n\n        break;\n      }\n    }\n\n    let menu = this.menu;\n    if (menu === undefined) {\n      menu = new Menu(this.player_);\n      let title = Dom.createEl('li', {\n        className: 'vjs-menu-title',\n        innerHTML: toTitleCase(this.kind_),\n        tabIndex: -1\n      });\n      menu.children_.unshift(title);\n      Dom.insertElFirst(title, menu.contentEl());\n    }\n\n    if (chaptersTrack && chaptersTrack.cues == null) {\n      chaptersTrack['mode'] = 'hidden';\n\n      let remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(chaptersTrack);\n\n      if (remoteTextTrackEl) {\n        remoteTextTrackEl.addEventListener('load', (event) => this.update());\n      }\n    }\n\n    if (chaptersTrack && chaptersTrack.cues && chaptersTrack.cues.length > 0) {\n      let cues = chaptersTrack['cues'], cue;\n\n      for (let i = 0, l = cues.length; i < l; i++) {\n        cue = cues[i];\n\n        let mi = new ChaptersTrackMenuItem(this.player_, {\n          'track': chaptersTrack,\n          'cue': cue\n        });\n\n        items.push(mi);\n\n        menu.addChild(mi);\n      }\n\n      this.addChild(menu);\n    }\n\n    if (this.items.length > 0) {\n      this.show();\n    }\n\n    return menu;\n  }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n","/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n  constructor(player, options){\n    let track = options['track'];\n    let cue = options['cue'];\n    let currentTime = player.currentTime();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = cue.text;\n    options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n    super(player, options);\n\n    this.track = track;\n    this.cue = cue;\n    track.addEventListener('cuechange', Fn.bind(this, this.update));\n  }\n\n  /**\n   * Handle click on menu item\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    super.handleClick();\n    this.player_.currentTime(this.cue.startTime);\n    this.update(this.cue.startTime);\n  }\n\n  /**\n   * Update chapter menu item\n   *\n   * @method update\n   */\n  update() {\n    let cue = this.cue;\n    let currentTime = this.player_.currentTime();\n\n    // vjs.log(currentTime, cue.startTime);\n    this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n  }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n","/**\n * @file descriptions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The button component for toggling and selecting descriptions\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class DescriptionsButton\n */\nclass DescriptionsButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label', 'Descriptions Menu');\n\n    let tracks = player.textTracks();\n\n    if (tracks) {\n      let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n      tracks.addEventListener('change', changeHandler);\n      this.on('dispose', function() {\n        tracks.removeEventListener('change', changeHandler);\n      });\n    }\n  }\n\n  /**\n   * Handle text track change\n   *\n   * @method handleTracksChange\n   */\n  handleTracksChange(event){\n    let tracks = this.player().textTracks();\n    let disabled = false;\n\n    // Check whether a track of a different kind is showing\n    for (let i = 0, l = tracks.length; i < l; i++) {\n      let track = tracks[i];\n      if (track['kind'] !== this.kind_ && track['mode'] === 'showing') {\n        disabled = true;\n        break;\n      }\n    }\n\n    // If another track is showing, disable this menu button\n    if (disabled) {\n      this.disable();\n    } else {\n      this.enable();\n    }\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-descriptions-button ${super.buildCSSClass()}`;\n  }\n\n}\n\nDescriptionsButton.prototype.kind_ = 'descriptions';\nDescriptionsButton.prototype.controlText_ = 'Descriptions';\n\nComponent.registerComponent('DescriptionsButton', DescriptionsButton);\nexport default DescriptionsButton;\n","/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n  constructor(player, options){\n    // Create pseudo track info\n    // Requires options['kind']\n    options['track'] = {\n      'kind': options['kind'],\n      'player': player,\n      'label': options['kind'] + ' off',\n      'default': false,\n      'mode': 'disabled'\n    };\n\n    // MenuItem is selectable\n    options['selectable'] = true;\n\n    super(player, options);\n    this.selected(true);\n  }\n\n  /**\n   * Handle text track change\n   *\n   * @param {Object} event Event object\n   * @method handleTracksChange\n   */\n  handleTracksChange(event){\n    let tracks = this.player().textTracks();\n    let selected = true;\n\n    for (let i = 0, l = tracks.length; i < l; i++) {\n      let track = tracks[i];\n      if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n        selected = false;\n        break;\n      }\n    }\n\n    this.selected(selected);\n  }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n","/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player  Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n    this.el_.setAttribute('aria-label','Subtitles Menu');\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    return `vjs-subtitles-button ${super.buildCSSClass()}`;\n  }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n","/**\n * @file text-track-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends MenuButton {\n\n  constructor(player, options){\n    super(player, options);\n\n    let tracks = this.player_.textTracks();\n\n    if (this.items.length <= 1) {\n      this.hide();\n    }\n\n    if (!tracks) {\n      return;\n    }\n\n    let updateHandler = Fn.bind(this, this.update);\n    tracks.addEventListener('removetrack', updateHandler);\n    tracks.addEventListener('addtrack', updateHandler);\n\n    this.player_.on('dispose', function() {\n      tracks.removeEventListener('removetrack', updateHandler);\n      tracks.removeEventListener('addtrack', updateHandler);\n    });\n  }\n\n  // Create a menu item for each text track\n  createItems(items=[]) {\n    // Add an OFF menu item to turn all tracks off\n    items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n    let tracks = this.player_.textTracks();\n\n    if (!tracks) {\n      return items;\n    }\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      // only add tracks that are of the appropriate kind and have a label\n      if (track['kind'] === this.kind_) {\n        items.push(new TextTrackMenuItem(this.player_, {\n          // MenuItem is selectable\n          'selectable': true,\n          'track': track\n        }));\n      }\n    }\n\n    return items;\n  }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n","/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n  constructor(player, options){\n    let track = options['track'];\n    let tracks = player.textTracks();\n\n    // Modify options for parent MenuItem class's init.\n    options['label'] = track['label'] || track['language'] || 'Unknown';\n    options['selected'] = track['default'] || track['mode'] === 'showing';\n\n    super(player, options);\n\n    this.track = track;\n\n    if (tracks) {\n      let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n      tracks.addEventListener('change', changeHandler);\n      this.on('dispose', function() {\n        tracks.removeEventListener('change', changeHandler);\n      });\n    }\n\n    // iOS7 doesn't dispatch change events to TextTrackLists when an\n    // associated track's mode changes. Without something like\n    // Object.observe() (also not present on iOS7), it's not\n    // possible to detect changes to the mode attribute and polyfill\n    // the change event. As a poor substitute, we manually dispatch\n    // change events whenever the controls modify the mode.\n    if (tracks && tracks.onchange === undefined) {\n      let event;\n\n      this.on(['tap', 'click'], function() {\n        if (typeof window.Event !== 'object') {\n          // Android 2.3 throws an Illegal Constructor error for window.Event\n          try {\n            event = new window.Event('change');\n          } catch(err){}\n        }\n\n        if (!event) {\n          event = document.createEvent('Event');\n          event.initEvent('change', true, true);\n        }\n\n        tracks.dispatchEvent(event);\n      });\n    }\n  }\n\n  /**\n   * Handle click on text track\n   *\n   * @method handleClick\n   */\n  handleClick(event) {\n    let kind = this.track['kind'];\n    let tracks = this.player_.textTracks();\n\n    super.handleClick(event);\n\n    if (!tracks) return;\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      if (track['kind'] !== kind) {\n        continue;\n      }\n\n      if (track === this.track) {\n        track['mode'] = 'showing';\n      } else {\n        track['mode'] = 'disabled';\n      }\n    }\n  }\n\n  /**\n   * Handle text track change\n   *\n   * @method handleTracksChange\n   */\n  handleTracksChange(event){\n    this.selected(this.track['mode'] === 'showing');\n  }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n","/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.on(player, 'timeupdate', this.updateContent);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-current-time vjs-time-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-current-time-display',\n      // label the current time for screen reader users\n      innerHTML: '<span class=\"vjs-control-text\">Current Time </span>' + '0:00',\n    }, {\n      // tell screen readers not to automatically read the time as it changes\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  /**\n   * Update current time display\n   *\n   * @method updateContent\n   */\n  updateContent() {\n    // Allows for smooth scrubbing, when player can't keep up.\n    let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    let localizedText = this.localize('Current Time');\n    let formattedTime = formatTime(time, this.player_.duration());\n    if (formattedTime !== this.formattedTime_) {\n      this.formattedTime_ = formattedTime;\n      this.contentEl_.innerHTML = `<span class=\"vjs-control-text\">${localizedText}</span> ${formattedTime}`;\n    }\n  }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n","/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n    // however the durationchange event fires before this.player_.duration() is set,\n    // so the value cannot be written out using this method.\n    // Once the order of durationchange and this.player_.duration() being set is figured out,\n    // this can be updated.\n    this.on(player, 'timeupdate', this.updateContent);\n    this.on(player, 'loadedmetadata', this.updateContent);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-duration vjs-time-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-duration-display',\n      // label the duration time for screen reader users\n      innerHTML: `<span class=\"vjs-control-text\">${this.localize('Duration Time')}</span> 0:00`\n    }, {\n      // tell screen readers not to automatically read the time as it changes\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  /**\n   * Update duration time display\n   *\n   * @method updateContent\n   */\n  updateContent() {\n    let duration = this.player_.duration();\n    if (duration && this.duration_ !== duration) {\n      this.duration_ = duration;\n      let localizedText = this.localize('Duration Time');\n      let formattedTime = formatTime(duration);\n      this.contentEl_.innerHTML = `<span class=\"vjs-control-text\">${localizedText}</span> ${formattedTime}`; // label the duration time for screen reader users\n    }\n  }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n","/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.on(player, 'timeupdate', this.updateContent);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = super.createEl('div', {\n      className: 'vjs-remaining-time vjs-time-control vjs-control'\n    });\n\n    this.contentEl_ = Dom.createEl('div', {\n      className: 'vjs-remaining-time-display',\n      // label the remaining time for screen reader users\n      innerHTML: `<span class=\"vjs-control-text\">${this.localize('Remaining Time')}</span> -0:00`,\n    }, {\n      // tell screen readers not to automatically read the time as it changes\n      'aria-live': 'off'\n    });\n\n    el.appendChild(this.contentEl_);\n    return el;\n  }\n\n  /**\n   * Update remaining time display\n   *\n   * @method updateContent\n   */\n  updateContent() {\n    if (this.player_.duration()) {\n      const localizedText = this.localize('Remaining Time');\n      const formattedTime = formatTime(this.player_.remainingTime());\n      if (formattedTime !== this.formattedTime_) {\n        this.formattedTime_ = formattedTime;\n        this.contentEl_.innerHTML = `<span class=\"vjs-control-text\">${localizedText}</span> -${formattedTime}`;\n      }\n    }\n\n    // Allows for smooth scrubbing, when player can't keep up.\n    // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n    // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n  }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n","/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-time-control vjs-time-divider',\n      innerHTML: '<div><span>/</span></div>'\n    });\n  }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n","/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n  constructor(player, options){\n    super(player, options);\n    this.on(player, 'volumechange', this.updateARIAAttributes);\n    player.ready(Fn.bind(this, this.updateARIAAttributes));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-volume-bar vjs-slider-bar'\n    }, {\n      'aria-label': 'volume level'\n    });\n  }\n\n  /**\n   * Handle mouse move on volume bar\n   *\n   * @method handleMouseMove\n   */\n  handleMouseMove(event) {\n    this.checkMuted();\n    this.player_.volume(this.calculateDistance(event));\n  }\n\n  checkMuted() {\n    if (this.player_.muted()) {\n      this.player_.muted(false);\n    }\n  }\n\n  /**\n   * Get percent of volume level\n   *\n   * @retun {Number} Volume level percent\n   * @method getPercent\n   */\n  getPercent() {\n    if (this.player_.muted()) {\n      return 0;\n    } else {\n      return this.player_.volume();\n    }\n  }\n\n  /**\n   * Increase volume level for keyboard users\n   *\n   * @method stepForward\n   */\n  stepForward() {\n    this.checkMuted();\n    this.player_.volume(this.player_.volume() + 0.1);\n  }\n\n  /**\n   * Decrease volume level for keyboard users\n   *\n   * @method stepBack\n   */\n  stepBack() {\n    this.checkMuted();\n    this.player_.volume(this.player_.volume() - 0.1);\n  }\n\n  /**\n   * Update ARIA accessibility attributes\n   *\n   * @method updateARIAAttributes\n   */\n  updateARIAAttributes() {\n    // Current value of volume bar as a percentage\n    let volume = (this.player_.volume() * 100).toFixed(2);\n    this.el_.setAttribute('aria-valuenow', volume);\n    this.el_.setAttribute('aria-valuetext', volume + '%');\n  }\n\n}\n\nVolumeBar.prototype.options_ = {\n  children: [\n    'volumeLevel'\n  ],\n  'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n","/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n  constructor(player, options){\n    super(player, options);\n\n    // hide volume controls when they're not supported by the current tech\n    if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n      this.addClass('vjs-hidden');\n    }\n    this.on(player, 'loadstart', function(){\n      if (player.tech_['featuresVolumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    });\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-volume-control vjs-control'\n    });\n  }\n\n}\n\nVolumeControl.prototype.options_ = {\n  children: [\n    'volumeBar'\n  ]\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n","/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-volume-level',\n      innerHTML: '<span class=\"vjs-control-text\"></span>'\n    });\n  }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n","/**\n * @file volume-menu-button.js\n */\nimport * as Fn from '../utils/fn.js';\nimport Component from '../component.js';\nimport Popup from '../popup/popup.js';\nimport PopupButton from '../popup/popup-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume popup\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends PopupButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends PopupButton {\n\n  constructor(player, options={}){\n    // Default to inline\n    if (options.inline === undefined) {\n      options.inline = true;\n    }\n\n    // If the vertical option isn't passed at all, default to true.\n    if (options.vertical === undefined) {\n      // If an inline volumeMenuButton is used, we should default to using\n      // a horizontal slider for obvious reasons.\n      if (options.inline) {\n        options.vertical = false;\n      } else {\n        options.vertical = true;\n      }\n    }\n\n    // The vertical option needs to be set on the volumeBar as well,\n    // since that will need to be passed along to the VolumeBar constructor\n    options.volumeBar = options.volumeBar || {};\n    options.volumeBar.vertical = !!options.vertical;\n\n    super(player, options);\n\n    // Same listeners as MuteToggle\n    this.on(player, 'volumechange', this.volumeUpdate);\n    this.on(player, 'loadstart', this.volumeUpdate);\n\n    // hide mute toggle if the current tech doesn't support volume control\n    function updateVisibility() {\n      if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n        this.addClass('vjs-hidden');\n      } else {\n        this.removeClass('vjs-hidden');\n      }\n    }\n\n    updateVisibility.call(this);\n    this.on(player, 'loadstart', updateVisibility);\n\n    this.on(this.volumeBar, ['slideractive', 'focus'], function(){\n      this.addClass('vjs-slider-active');\n    });\n\n    this.on(this.volumeBar, ['sliderinactive', 'blur'], function(){\n      this.removeClass('vjs-slider-active');\n    });\n\n    this.on(this.volumeBar, ['focus'], function(){\n      this.addClass('vjs-lock-showing');\n    });\n\n    this.on(this.volumeBar, ['blur'], function(){\n      this.removeClass('vjs-lock-showing');\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    let orientationClass = '';\n    if (!!this.options_.vertical) {\n      orientationClass = 'vjs-volume-menu-button-vertical';\n    } else {\n      orientationClass = 'vjs-volume-menu-button-horizontal';\n    }\n\n    return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {Popup} The volume popup button\n   * @method createPopup\n   */\n  createPopup() {\n    let popup = new Popup(this.player_, {\n      contentElType: 'div'\n    });\n\n    let vb = new VolumeBar(this.player_, this.options_.volumeBar);\n\n    popup.addChild(vb);\n\n    this.menuContent = popup;\n    this.volumeBar = vb;\n\n    this.attachVolumeBarEvents();\n\n    return popup;\n  }\n\n  /**\n   * Handle click on volume popup and calls super\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    MuteToggle.prototype.handleClick.call(this);\n    super.handleClick();\n  }\n\n  attachVolumeBarEvents() {\n    this.menuContent.on(['mousedown', 'touchdown'], Fn.bind(this, this.handleMouseDown));\n  }\n\n  handleMouseDown(event) {\n    this.on(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));\n    this.on(this.el_.ownerDocument, ['mouseup', 'touchend'], this.handleMouseUp);\n  }\n\n  handleMouseUp(event) {\n    this.off(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));\n  }\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n","/**\n * @file error-display.js\n */\nimport Component from './component';\nimport ModalDialog from './modal-dialog';\n\nimport * as Dom from './utils/dom';\nimport mergeOptions from './utils/merge-options';\n\n/**\n * Display that an error has occurred making the video unplayable.\n *\n * @extends ModalDialog\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends ModalDialog {\n\n  /**\n   * Constructor for error display modal.\n   *\n   * @param  {Player} player\n   * @param  {Object} [options]\n   */\n  constructor(player, options) {\n    super(player, options);\n    this.on(player, 'error', this.open);\n  }\n\n  /**\n   * Include the old class for backward-compatibility.\n   *\n   * This can be removed in 6.0.\n   *\n   * @method buildCSSClass\n   * @deprecated\n   * @return {String}\n   */\n  buildCSSClass() {\n    return `vjs-error-display ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Generates the modal content based on the player error.\n   *\n   * @return {String|Null}\n   */\n  content() {\n    let error = this.player().error();\n    return error ? this.localize(error.message) : '';\n  }\n}\n\nErrorDisplay.prototype.options_ = mergeOptions(ModalDialog.prototype.options_, {\n  fillAlways: true,\n  temporary: false,\n  uncloseable: true\n});\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n","/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n  // Remove the addEventListener alias before calling Events.on\n  // so we don't get into an infinite type loop\n  let ael = this.addEventListener;\n  this.addEventListener = Function.prototype;\n  Events.on(this, type, fn);\n  this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n  Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n  Events.one(this, type, fn);\n};\n\nEventTarget.prototype.trigger = function(event) {\n  let type = event.type || event;\n\n  if (typeof event === 'string') {\n    event = {\n      type: type\n    };\n  }\n  event = Events.fixEvent(event);\n\n  if (this.allowedEvents_[type] && this['on' + type]) {\n    this['on' + type](event);\n  }\n\n  Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n","import log from './utils/log';\n\n/*\n * @file extend.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n  if (typeof superClass !== 'function' && superClass !== null) {\n    throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n\n  if (superClass) {\n    // node\n    subClass.super_ = superClass;\n  }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extend(Button, {\n *   constructor: function(player, options) {\n *     Button.call(this, player, options);\n *   },\n *   onClick: function() {\n *     // doSomething\n *   }\n * });\n * ```\n */\nconst extendFn = function(superClass, subClassMethods={}) {\n  let subClass = function() {\n    superClass.apply(this, arguments);\n  };\n  let methods = {};\n\n  if (typeof subClassMethods === 'object') {\n    if (typeof subClassMethods.init === 'function') {\n      log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n      subClassMethods.constructor = subClassMethods.init;\n    }\n    if (subClassMethods.constructor !== Object.prototype.constructor) {\n      subClass = subClassMethods.constructor;\n    }\n    methods = subClassMethods;\n  } else if (typeof subClassMethods === 'function') {\n    subClass = subClassMethods;\n  }\n\n  _inherits(subClass, superClass);\n\n  // Extend subObj's prototype with functions and other properties from props\n  for (var name in methods) {\n    if (methods.hasOwnProperty(name)) {\n      subClass.prototype[name] = methods[name];\n    }\n  }\n\n  return subClass;\n};\n\nexport default extendFn;\n","/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n  // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n  [\n    'requestFullscreen',\n    'exitFullscreen',\n    'fullscreenElement',\n    'fullscreenEnabled',\n    'fullscreenchange',\n    'fullscreenerror'\n  ],\n  // WebKit\n  [\n    'webkitRequestFullscreen',\n    'webkitExitFullscreen',\n    'webkitFullscreenElement',\n    'webkitFullscreenEnabled',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror'\n  ],\n  // Old WebKit (Safari 5.1)\n  [\n    'webkitRequestFullScreen',\n    'webkitCancelFullScreen',\n    'webkitCurrentFullScreenElement',\n    'webkitCancelFullScreen',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror'\n  ],\n  // Mozilla\n  [\n    'mozRequestFullScreen',\n    'mozCancelFullScreen',\n    'mozFullScreenElement',\n    'mozFullScreenEnabled',\n    'mozfullscreenchange',\n    'mozfullscreenerror'\n  ],\n  // Microsoft\n  [\n    'msRequestFullscreen',\n    'msExitFullscreen',\n    'msFullscreenElement',\n    'msFullscreenEnabled',\n    'MSFullscreenChange',\n    'MSFullscreenError'\n  ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n  // check for exitFullscreen function\n  if (apiMap[i][1] in document) {\n    browserApi = apiMap[i];\n    break;\n  }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n  for (let i=0; i<browserApi.length; i++) {\n    FullscreenApi[specApi[i]] = browserApi[i];\n  }\n}\n\nexport default FullscreenApi;\n","/**\n * @file loading-spinner.js\n */\nimport Component from './component';\n\n/* Loading Spinner\n================================================================================ */\n/**\n * Loading spinner for waiting events\n *\n * @extends Component\n * @class LoadingSpinner\n */\nclass LoadingSpinner extends Component {\n\n  /**\n   * Create the component's DOM element\n   *\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-loading-spinner',\n      dir: 'ltr'\n    });\n  }\n}\n\nComponent.registerComponent('LoadingSpinner', LoadingSpinner);\nexport default LoadingSpinner;\n","/**\n * @file media-error.js\n */\nimport assign from 'object.assign';\n\n/*\n * Custom MediaError to mimic the HTML5 MediaError\n *\n * @param {Number} code The media error code\n */\nlet MediaError = function(code){\n  if (typeof code === 'number') {\n    this.code = code;\n  } else if (typeof code === 'string') {\n    // default code is zero, so this is a custom error\n    this.message = code;\n  } else if (typeof code === 'object') { // object\n    assign(this, code);\n  }\n\n  if (!this.message) {\n    this.message = MediaError.defaultMessages[this.code] || '';\n  }\n};\n\n/*\n * The error code that refers two one of the defined\n * MediaError types\n *\n * @type {Number}\n */\nMediaError.prototype.code = 0;\n\n/*\n * An optional message to be shown with the error.\n * Message is not part of the HTML5 video spec\n * but allows for more informative custom errors.\n *\n * @type {String}\n */\nMediaError.prototype.message = '';\n\n/*\n * An optional status code that can be set by plugins\n * to allow even more detail about the error.\n * For example the HLS plugin might provide the specific\n * HTTP status code that was returned when the error\n * occurred, then allowing a custom error overlay\n * to display more information.\n *\n * @type {Array}\n */\nMediaError.prototype.status = null;\n\nMediaError.errorTypes = [\n  'MEDIA_ERR_CUSTOM',            // = 0\n  'MEDIA_ERR_ABORTED',           // = 1\n  'MEDIA_ERR_NETWORK',           // = 2\n  'MEDIA_ERR_DECODE',            // = 3\n  'MEDIA_ERR_SRC_NOT_SUPPORTED', // = 4\n  'MEDIA_ERR_ENCRYPTED'          // = 5\n];\n\nMediaError.defaultMessages = {\n  1: 'You aborted the media playback',\n  2: 'A network error caused the media download to fail part-way.',\n  3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',\n  4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',\n  5: 'The media is encrypted and we do not have the keys to decrypt it.'\n};\n\n// Add types as properties on MediaError\n// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\nfor (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {\n  MediaError[MediaError.errorTypes[errNum]] = errNum;\n  // values should be accessible on both the class and instance\n  MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;\n}\n\nexport default MediaError;\n","/**\n * @file menu-button.js\n */\nimport ClickableComponent from '../clickable-component.js';\nimport Component from '../component.js';\nimport Menu from './menu.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * A button class with a popup menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuButton\n */\nclass MenuButton extends ClickableComponent {\n\n  constructor(player, options={}){\n    super(player, options);\n\n    this.update();\n\n    this.enabled_ = true;\n\n    this.el_.setAttribute('aria-haspopup', 'true');\n    this.el_.setAttribute('role', 'menuitem');\n    this.on('keydown', this.handleSubmenuKeyPress);\n  }\n\n  /**\n   * Update menu\n   *\n   * @method update\n   */\n  update() {\n    let menu = this.createMenu();\n\n    if (this.menu) {\n      this.removeChild(this.menu);\n    }\n\n    this.menu = menu;\n    this.addChild(menu);\n\n    /**\n     * Track the state of the menu button\n     *\n     * @type {Boolean}\n     * @private\n     */\n    this.buttonPressed_ = false;\n    this.el_.setAttribute('aria-expanded', 'false');\n\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    } else if (this.items && this.items.length > 1) {\n      this.show();\n    }\n  }\n\n  /**\n   * Create menu\n   *\n   * @return {Menu} The constructed menu\n   * @method createMenu\n   */\n  createMenu() {\n    var menu = new Menu(this.player_);\n\n    // Add a title list item to the top\n    if (this.options_.title) {\n      let title = Dom.createEl('li', {\n        className: 'vjs-menu-title',\n        innerHTML: toTitleCase(this.options_.title),\n        tabIndex: -1\n      });\n      menu.children_.unshift(title);\n      Dom.insertElFirst(title, menu.contentEl());\n    }\n\n    this.items = this['createItems']();\n\n    if (this.items) {\n      // Add menu items to the menu\n      for (var i = 0; i < this.items.length; i++) {\n        menu.addItem(this.items[i]);\n      }\n    }\n\n    return menu;\n  }\n\n  /**\n   * Create the list of menu items. Specific to each subclass.\n   *\n   * @method createItems\n   */\n  createItems(){}\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass()\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    var menuButtonClass = 'vjs-menu-button';\n\n    // If the inline option is passed, we want to use different styles altogether.\n    if (this.options_.inline === true) {\n      menuButtonClass += '-inline';\n    } else {\n      menuButtonClass += '-popup';\n    }\n\n    return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * When you click the button it adds focus, which\n   * will show the menu indefinitely.\n   * So we'll remove focus when the mouse leaves the button.\n   * Focus is needed for tab navigation.\n   * Allow sub components to stack CSS class names\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.one('mouseout', Fn.bind(this, function(){\n      this.menu.unlockShowing();\n      this.el_.blur();\n    }));\n    if (this.buttonPressed_){\n      this.unpressButton();\n    } else {\n      this.pressButton();\n    }\n  }\n\n  /**\n   * Handle key press on menu\n   *\n   * @param {Object} event Key press event\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n\n    // Escape (27) key or Tab (9) key unpress the 'button'\n    if (event.which === 27 || event.which === 9) {\n      if (this.buttonPressed_) {\n        this.unpressButton();\n      }\n      // Don't preventDefault for Tab key - we still want to lose focus\n      if (event.which !== 9) {\n        event.preventDefault();\n      }\n    // Up (38) key or Down (40) key press the 'button'\n    } else if (event.which === 38 || event.which === 40) {\n      if (!this.buttonPressed_) {\n        this.pressButton();\n        event.preventDefault();\n      }\n    } else {\n      super.handleKeyPress(event);\n    }\n  }\n\n  /**\n   * Handle key press on submenu\n   *\n   * @param {Object} event Key press event\n   * @method handleSubmenuKeyPress\n   */\n  handleSubmenuKeyPress(event) {\n\n    // Escape (27) key or Tab (9) key unpress the 'button'\n    if (event.which === 27 || event.which === 9){\n      if (this.buttonPressed_){\n        this.unpressButton();\n      }\n      // Don't preventDefault for Tab key - we still want to lose focus\n      if (event.which !== 9) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  /**\n   * Makes changes based on button pressed\n   *\n   * @method pressButton\n   */\n  pressButton() {\n    if (this.enabled_) {\n      this.buttonPressed_ = true;\n      this.menu.lockShowing();\n      this.el_.setAttribute('aria-expanded', 'true');\n      this.menu.focus(); // set the focus into the submenu\n    }\n  }\n\n  /**\n   * Makes changes based on button unpressed\n   *\n   * @method unpressButton\n   */\n  unpressButton() {\n    if (this.enabled_) {\n      this.buttonPressed_ = false;\n      this.menu.unlockShowing();\n      this.el_.setAttribute('aria-expanded', 'false');\n      this.el_.focus(); // Set focus back to this menu button\n    }\n  }\n\n  /**\n   * Disable the menu button\n   *\n   * @return {Component}\n   * @method disable\n   */\n  disable() {\n    // Unpress, but don't force focus on this button\n    this.buttonPressed_ = false;\n    this.menu.unlockShowing();\n    this.el_.setAttribute('aria-expanded', 'false');\n\n    this.enabled_ = false;\n\n    return super.disable();\n  }\n\n  /**\n   * Enable the menu button\n   *\n   * @return {Component}\n   * @method disable\n   */\n  enable() {\n    this.enabled_ = true;\n\n    return super.enable();\n  }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n","/**\n * @file menu-item.js\n */\nimport ClickableComponent from '../clickable-component.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `<li>`\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends ClickableComponent {\n\n  constructor(player, options) {\n    super(player, options);\n\n    this.selectable = options['selectable'];\n\n    this.selected(options['selected']);\n\n    if (this.selectable) {\n      // TODO: May need to be either menuitemcheckbox or menuitemradio,\n      //       and may need logical grouping of menu items.\n      this.el_.setAttribute('role', 'menuitemcheckbox');\n    } else {\n      this.el_.setAttribute('role', 'menuitem');\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String=} type Desc\n   * @param {Object=} props Desc\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(type, props, attrs) {\n    return super.createEl('li', assign({\n      className: 'vjs-menu-item',\n      innerHTML: this.localize(this.options_['label']),\n      tabIndex: -1\n    }, props), attrs);\n  }\n\n  /**\n   * Handle a click on the menu item, and set it to selected\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    this.selected(true);\n  }\n\n  /**\n   * Set this menu item as selected or not\n   *\n   * @param  {Boolean} selected\n   * @method selected\n   */\n  selected(selected) {\n    if (this.selectable) {\n      if (selected) {\n        this.addClass('vjs-selected');\n        this.el_.setAttribute('aria-checked','true');\n        // aria-checked isn't fully supported by browsers/screen readers,\n        // so indicate selected state to screen reader in the control text.\n        this.controlText(', selected');\n      } else {\n        this.removeClass('vjs-selected');\n        this.el_.setAttribute('aria-checked','false');\n        // Indicate un-selected state to screen reader\n        // Note that a space clears out the selected state text\n        this.controlText(' ');\n      }\n    }\n  }\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n","/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n  constructor (player, options) {\n    super(player, options);\n\n    this.focusedChild_ = -1;\n\n    this.on('keydown', this.handleKeyPress);\n  }\n\n  /**\n   * Add a menu item to the menu\n   *\n   * @param {Object|String} component Component or component type to add\n   * @method addItem\n   */\n  addItem(component) {\n    this.addChild(component);\n    component.on('click', Fn.bind(this, function(){\n      this.unlockShowing();\n      //TODO: Need to set keyboard focus back to the menuButton\n    }));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let contentElType = this.options_.contentElType || 'ul';\n    this.contentEl_ = Dom.createEl(contentElType, {\n      className: 'vjs-menu-content'\n    });\n    this.contentEl_.setAttribute('role', 'menu');\n    var el = super.createEl('div', {\n      append: this.contentEl_,\n      className: 'vjs-menu'\n    });\n    el.setAttribute('role', 'presentation');\n    el.appendChild(this.contentEl_);\n\n    // Prevent clicks from bubbling up. Needed for Menu Buttons,\n    // where a click on the parent is significant\n    Events.on(el, 'click', function(event){\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    });\n\n    return el;\n  }\n\n  /**\n   * Handle key press for menu\n   *\n   * @param {Object} event Event object\n   * @method handleKeyPress\n   */\n  handleKeyPress (event) {\n    if (event.which === 37 || event.which === 40) { // Left and Down Arrows\n      event.preventDefault();\n      this.stepForward();\n    } else if (event.which === 38 || event.which === 39) { // Up and Right Arrows\n      event.preventDefault();\n      this.stepBack();\n    }\n  }\n\n  /**\n   * Move to next (lower) menu item for keyboard users\n   *\n   * @method stepForward\n   */\n   stepForward () {\n     let stepChild = 0;\n\n     if (this.focusedChild_ !== undefined) {\n       stepChild = this.focusedChild_ + 1;\n     }\n     this.focus(stepChild);\n   }\n\n   /**\n    * Move to previous (higher) menu item for keyboard users\n    *\n    * @method stepBack\n    */\n  stepBack () {\n    let stepChild = 0;\n\n    if (this.focusedChild_ !== undefined) {\n      stepChild = this.focusedChild_ - 1;\n    }\n    this.focus(stepChild);\n  }\n\n  /**\n   * Set focus on a menu item in the menu\n   *\n   * @param {Object|String} item Index of child item set focus on\n   * @method focus\n   */\n  focus (item = 0) {\n    let children = this.children().slice();\n    let haveTitle = children.length && children[0].className &&\n      /vjs-menu-title/.test(children[0].className);\n\n    if (haveTitle) {\n      children.shift();\n    }\n\n    if (children.length > 0) {\n      if (item < 0) {\n        item = 0;\n      } else if (item >= children.length) {\n        item = children.length - 1;\n      }\n\n      this.focusedChild_ = item;\n\n      children[item].el_.focus();\n    }\n  }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n","/**\n * @file modal-dialog.js\n */\nimport * as Dom from './utils/dom';\nimport * as Fn from './utils/fn';\nimport log from './utils/log';\n\nimport Component from './component';\nimport CloseButton from './close-button';\n\nconst MODAL_CLASS_NAME = 'vjs-modal-dialog';\nconst ESC = 27;\n\n/**\n * The `ModalDialog` displays over the video and its controls, which blocks\n * interaction with the player until it is closed.\n *\n * Modal dialogs include a \"Close\" button and will close when that button\n * is activated - or when ESC is pressed anywhere.\n *\n * @extends Component\n * @class ModalDialog\n */\nclass ModalDialog extends Component {\n\n  /**\n   * Constructor for modals.\n   *\n   * @param  {Player} player\n   * @param  {Object} [options]\n   * @param  {Mixed} [options.content=undefined]\n   *         Provide customized content for this modal.\n   *\n   * @param  {String} [options.description]\n   *         A text description for the modal, primarily for accessibility.\n   *\n   * @param  {Boolean} [options.fillAlways=false]\n   *         Normally, modals are automatically filled only the first time\n   *         they open. This tells the modal to refresh its content\n   *         every time it opens.\n   *\n   * @param  {String} [options.label]\n   *         A text label for the modal, primarily for accessibility.\n   *\n   * @param  {Boolean} [options.temporary=true]\n   *         If `true`, the modal can only be opened once; it will be\n   *         disposed as soon as it's closed.\n   *\n   * @param  {Boolean} [options.uncloseable=false]\n   *         If `true`, the user will not be able to close the modal\n   *         through the UI in the normal ways. Programmatic closing is\n   *         still possible.\n   *\n   */\n  constructor(player, options) {\n    super(player, options);\n    this.opened_ = this.hasBeenOpened_ = this.hasBeenFilled_ = false;\n\n    this.closeable(!this.options_.uncloseable);\n    this.content(this.options_.content);\n\n    // Make sure the contentEl is defined AFTER any children are initialized\n    // because we only want the contents of the modal in the contentEl\n    // (not the UI elements like the close button).\n    this.contentEl_ = Dom.createEl('div', {\n      className: `${MODAL_CLASS_NAME}-content`\n    }, {\n      role: 'document'\n    });\n\n    this.descEl_ = Dom.createEl('p', {\n      className: `${MODAL_CLASS_NAME}-description vjs-offscreen`,\n      id: this.el().getAttribute('aria-describedby')\n    });\n\n    Dom.textContent(this.descEl_, this.description());\n    this.el_.appendChild(this.descEl_);\n    this.el_.appendChild(this.contentEl_);\n  }\n\n  /**\n   * Create the modal's DOM element\n   *\n   * @method createEl\n   * @return {Element}\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass(),\n      tabIndex: -1\n    }, {\n      'aria-describedby': `${this.id()}_description`,\n      'aria-hidden': 'true',\n      'aria-label': this.label(),\n      role: 'dialog'\n    });\n  }\n\n  /**\n   * Build the modal's CSS class.\n   *\n   * @method buildCSSClass\n   * @return {String}\n   */\n  buildCSSClass() {\n    return `${MODAL_CLASS_NAME} vjs-hidden ${super.buildCSSClass()}`;\n  }\n\n  /**\n   * Handles key presses on the document, looking for ESC, which closes\n   * the modal.\n   *\n   * @method handleKeyPress\n   * @param  {Event} e\n   */\n  handleKeyPress(e) {\n    if (e.which === ESC && this.closeable()) {\n      this.close();\n    }\n  }\n\n  /**\n   * Returns the label string for this modal. Primarily used for accessibility.\n   *\n   * @return {String}\n   */\n  label() {\n    return this.options_.label || this.localize('Modal Window');\n  }\n\n  /**\n   * Returns the description string for this modal. Primarily used for\n   * accessibility.\n   *\n   * @return {String}\n   */\n  description() {\n    let desc = this.options_.description || this.localize('This is a modal window.');\n\n    // Append a universal closeability message if the modal is closeable.\n    if (this.closeable()) {\n      desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');\n    }\n\n    return desc;\n  }\n\n  /**\n   * Opens the modal.\n   *\n   * @method open\n   * @return {ModalDialog}\n   */\n  open() {\n    if (!this.opened_) {\n      let player = this.player();\n\n      this.trigger('beforemodalopen');\n      this.opened_ = true;\n\n      // Fill content if the modal has never opened before and\n      // never been filled.\n      if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {\n        this.fill();\n      }\n\n      // If the player was playing, pause it and take note of its previously\n      // playing state.\n      this.wasPlaying_ = !player.paused();\n\n      if (this.wasPlaying_) {\n        player.pause();\n      }\n\n      if (this.closeable()) {\n        this.on(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));\n      }\n\n      player.controls(false);\n      this.show();\n      this.el().setAttribute('aria-hidden', 'false');\n      this.trigger('modalopen');\n      this.hasBeenOpened_ = true;\n    }\n    return this;\n  }\n\n  /**\n   * Whether or not the modal is opened currently.\n   *\n   * @method opened\n   * @param  {Boolean} [value]\n   *         If given, it will open (`true`) or close (`false`) the modal.\n   *\n   * @return {Boolean}\n   */\n  opened(value) {\n    if (typeof value === 'boolean') {\n      this[value ? 'open' : 'close']();\n    }\n    return this.opened_;\n  }\n\n  /**\n   * Closes the modal.\n   *\n   * @method close\n   * @return {ModalDialog}\n   */\n  close() {\n    if (this.opened_) {\n      let player = this.player();\n\n      this.trigger('beforemodalclose');\n      this.opened_ = false;\n\n      if (this.wasPlaying_) {\n        player.play();\n      }\n\n      if (this.closeable()) {\n        this.off(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));\n      }\n\n      player.controls(true);\n      this.hide();\n      this.el().setAttribute('aria-hidden', 'true');\n      this.trigger('modalclose');\n\n      if (this.options_.temporary) {\n        this.dispose();\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Whether or not the modal is closeable via the UI.\n   *\n   * @method closeable\n   * @param  {Boolean} [value]\n   *         If given as a Boolean, it will set the `closeable` option.\n   *\n   * @return {Boolean}\n   */\n  closeable(value) {\n    if (typeof value === 'boolean') {\n      let closeable = this.closeable_ = !!value;\n      let close = this.getChild('closeButton');\n\n      // If this is being made closeable and has no close button, add one.\n      if (closeable && !close) {\n\n        // The close button should be a child of the modal - not its\n        // content element, so temporarily change the content element.\n        let temp = this.contentEl_;\n        this.contentEl_ = this.el_;\n        close = this.addChild('closeButton');\n        this.contentEl_ = temp;\n        this.on(close, 'close', this.close);\n      }\n\n      // If this is being made uncloseable and has a close button, remove it.\n      if (!closeable && close) {\n        this.off(close, 'close', this.close);\n        this.removeChild(close);\n        close.dispose();\n      }\n    }\n    return this.closeable_;\n  }\n\n  /**\n   * Fill the modal's content element with the modal's \"content\" option.\n   *\n   * The content element will be emptied before this change takes place.\n   *\n   * @method fill\n   * @return {ModalDialog}\n   */\n  fill() {\n    return this.fillWith(this.content());\n  }\n\n  /**\n   * Fill the modal's content element with arbitrary content.\n   *\n   * The content element will be emptied before this change takes place.\n   *\n   * @method fillWith\n   * @param  {Mixed} [content]\n   *         The same rules apply to this as apply to the `content` option.\n   *\n   * @return {ModalDialog}\n   */\n  fillWith(content) {\n    let contentEl = this.contentEl();\n    let parentEl = contentEl.parentNode;\n    let nextSiblingEl = contentEl.nextSibling;\n\n    this.trigger('beforemodalfill');\n    this.hasBeenFilled_ = true;\n\n    // Detach the content element from the DOM before performing\n    // manipulation to avoid modifying the live DOM multiple times.\n    parentEl.removeChild(contentEl);\n    this.empty();\n    Dom.insertContent(contentEl, content);\n    this.trigger('modalfill');\n\n    // Re-inject the re-filled content element.\n    if (nextSiblingEl) {\n      parentEl.insertBefore(contentEl, nextSiblingEl);\n    } else {\n      parentEl.appendChild(contentEl);\n    }\n\n    return this;\n  }\n\n  /**\n   * Empties the content element.\n   *\n   * This happens automatically anytime the modal is filled.\n   *\n   * @method empty\n   * @return {ModalDialog}\n   */\n  empty() {\n    this.trigger('beforemodalempty');\n    Dom.emptyEl(this.contentEl());\n    this.trigger('modalempty');\n    return this;\n  }\n\n  /**\n   * Gets or sets the modal content, which gets normalized before being\n   * rendered into the DOM.\n   *\n   * This does not update the DOM or fill the modal, but it is called during\n   * that process.\n   *\n   * @method content\n   * @param  {Mixed} [value]\n   *         If defined, sets the internal content value to be used on the\n   *         next call(s) to `fill`. This value is normalized before being\n   *         inserted. To \"clear\" the internal content value, pass `null`.\n   *\n   * @return {Mixed}\n   */\n  content(value) {\n    if (typeof value !== 'undefined') {\n      this.content_ = value;\n    }\n    return this.content_;\n  }\n}\n\n/*\n * Modal dialog default options.\n *\n * @type {Object}\n * @private\n */\nModalDialog.prototype.options_ = {\n  temporary: true\n};\n\nComponent.registerComponent('ModalDialog', ModalDialog);\nexport default ModalDialog;\n","/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\nimport ModalDialog from './modal-dialog';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Tech from './tech/tech.js';\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * <video id=\"example_video_1\" data-setup='{}' controls>\n *   <source src=\"my-source.mp4\" type=\"video/mp4\">\n * </video>\n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag        The original video tag used for configuring options\n * @param {Object=} options    Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n  /**\n   * player's constructor function\n   *\n   * @constructs\n   * @method init\n   * @param {Element} tag        The original video tag used for configuring options\n   * @param {Object=} options    Player options\n   * @param {Function=} ready    Ready callback function\n   */\n  constructor(tag, options, ready){\n    // Make sure tag ID exists\n    tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n    // Set Options\n    // The options argument overrides options set in the video tag\n    // which overrides globally set options.\n    // This latter part coincides with the load order\n    // (tag must exist before Player)\n    options = assign(Player.getTagSettings(tag), options);\n\n    // Delay the initialization of children because we need to set up\n    // player properties first, and can't use `this` before `super()`\n    options.initChildren = false;\n\n    // Same with creating the element\n    options.createEl = false;\n\n    // we don't want the player to report touch activity on itself\n    // see enableTouchActivity in Component\n    options.reportTouchActivity = false;\n\n    // Run base component initializing with new options\n    super(null, options, ready);\n\n    // if the global option object was accidentally blown away by\n    // someone, bail early with an informative error\n    if (!this.options_ ||\n        !this.options_.techOrder ||\n        !this.options_.techOrder.length) {\n      throw new Error('No techOrder specified. Did you overwrite ' +\n                      'videojs.options instead of just changing the ' +\n                      'properties you want to override?');\n    }\n\n    this.tag = tag; // Store the original tag used to set options\n\n    // Store the tag attributes used to restore html5 element\n    this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n    // Update current language\n    this.language(this.options_.language);\n\n    // Update Supported Languages\n    if (options.languages) {\n      // Normalise player option languages to lowercase\n      let languagesToLower = {};\n\n      Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n        languagesToLower[name.toLowerCase()] = options.languages[name];\n      });\n      this.languages_ = languagesToLower;\n    } else {\n      this.languages_ = Player.prototype.options_.languages;\n    }\n\n    // Cache for video property values.\n    this.cache_ = {};\n\n    // Set poster\n    this.poster_ = options.poster || '';\n\n    // Set controls\n    this.controls_ = !!options.controls;\n\n    // Original tag settings stored in options\n    // now remove immediately so native controls don't flash.\n    // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n    tag.controls = false;\n\n    /*\n     * Store the internal state of scrubbing\n     *\n     * @private\n     * @return {Boolean} True if the user is scrubbing\n     */\n    this.scrubbing_ = false;\n\n    this.el_ = this.createEl();\n\n    // We also want to pass the original player options to each component and plugin\n    // as well so they don't need to reach back into the player for options later.\n    // We also need to do another copy of this.options_ so we don't end up with\n    // an infinite loop.\n    let playerOptionsCopy = mergeOptions(this.options_);\n\n    // Load plugins\n    if (options.plugins) {\n      let plugins = options.plugins;\n\n      Object.getOwnPropertyNames(plugins).forEach(function(name){\n        if (typeof this[name] === 'function') {\n          this[name](plugins[name]);\n        } else {\n          log.error('Unable to find plugin:', name);\n        }\n      }, this);\n    }\n\n    this.options_.playerOptions = playerOptionsCopy;\n\n    this.initChildren();\n\n    // Set isAudio based on whether or not an audio tag was used\n    this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n    // Update controls className. Can't do this when the controls are initially\n    // set because the element doesn't exist yet.\n    if (this.controls()) {\n      this.addClass('vjs-controls-enabled');\n    } else {\n      this.addClass('vjs-controls-disabled');\n    }\n\n    // Set ARIA label and region role depending on player type\n    this.el_.setAttribute('role', 'region');\n    if (this.isAudio()) {\n      this.el_.setAttribute('aria-label', 'audio player');\n    } else {\n      this.el_.setAttribute('aria-label', 'video player');\n    }\n\n    if (this.isAudio()) {\n      this.addClass('vjs-audio');\n    }\n\n    if (this.flexNotSupported_()) {\n      this.addClass('vjs-no-flex');\n    }\n\n    // TODO: Make this smarter. Toggle user state between touching/mousing\n    // using events, since devices can have both touch and mouse events.\n    // if (browser.TOUCH_ENABLED) {\n    //   this.addClass('vjs-touch-enabled');\n    // }\n\n    // iOS Safari has broken hover handling\n    if (!browser.IS_IOS) {\n      this.addClass('vjs-workinghover');\n    }\n\n    // Make player easily findable by ID\n    Player.players[this.id_] = this;\n\n    // When the player is first initialized, trigger activity so components\n    // like the control bar show themselves if needed\n    this.userActive(true);\n    this.reportUserActivity();\n    this.listenForUserActivity_();\n\n    this.on('fullscreenchange', this.handleFullscreenChange_);\n    this.on('stageclick', this.handleStageClick_);\n  }\n\n  /**\n   * Destroys the video player and does any necessary cleanup\n   * ```js\n   *     myPlayer.dispose();\n   * ```\n   * This is especially helpful if you are dynamically adding and removing videos\n   * to/from the DOM.\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.trigger('dispose');\n    // prevent dispose from being called twice\n    this.off('dispose');\n\n    if (this.styleEl_ && this.styleEl_.parentNode) {\n      this.styleEl_.parentNode.removeChild(this.styleEl_);\n    }\n\n    // Kill reference to this player\n    Player.players[this.id_] = null;\n    if (this.tag && this.tag.player) { this.tag.player = null; }\n    if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n    if (this.tech_) { this.tech_.dispose(); }\n\n    super.dispose();\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = this.el_ = super.createEl('div');\n    let tag = this.tag;\n\n    // Remove width/height attrs from tag so CSS can make it 100% width/height\n    tag.removeAttribute('width');\n    tag.removeAttribute('height');\n\n    // Copy over all the attributes from the tag, including ID and class\n    // ID will now reference player box, not the video tag\n    const attrs = Dom.getElAttributes(tag);\n\n    Object.getOwnPropertyNames(attrs).forEach(function(attr){\n      // workaround so we don't totally break IE7\n      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n      if (attr === 'class') {\n        el.className = attrs[attr];\n      } else {\n        el.setAttribute(attr, attrs[attr]);\n      }\n    });\n\n    // Update tag id/class for use as HTML5 playback tech\n    // Might think we should do this after embedding in container so .vjs-tech class\n    // doesn't flash 100% width/height, but class only applies with .video-js parent\n    tag.playerId = tag.id;\n    tag.id += '_html5_api';\n    tag.className = 'vjs-tech';\n\n    // Make player findable on elements\n    tag.player = el.player = this;\n    // Default state of video is paused\n    this.addClass('vjs-paused');\n\n    // Add a style element in the player that we'll use to set the width/height\n    // of the player in a way that's still overrideable by CSS, just like the\n    // video element\n    if (window.VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n      this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n      let defaultsStyleEl = Dom.$('.vjs-styles-defaults');\n      let head = Dom.$('head');\n      head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n    }\n\n    // Pass in the width/height/aspectRatio options which will update the style el\n    this.width(this.options_.width);\n    this.height(this.options_.height);\n    this.fluid(this.options_.fluid);\n    this.aspectRatio(this.options_.aspectRatio);\n\n    // Hide any links within the video/audio tag, because IE doesn't hide them completely.\n    let links = tag.getElementsByTagName('a');\n    for (let i = 0; i < links.length; i++) {\n      let linkEl = links.item(i);\n      Dom.addElClass(linkEl, 'vjs-hidden');\n      linkEl.setAttribute('hidden', 'hidden');\n    }\n\n    // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n    // keep track of the original for later so we can know if the source originally failed\n    tag.initNetworkState_ = tag.networkState;\n\n    // Wrap video tag in div (el/box) container\n    if (tag.parentNode) {\n      tag.parentNode.insertBefore(el, tag);\n    }\n\n    // insert the tag as the first child of the player element\n    // then manually add it to the children array so that this.addChild\n    // will work properly for other components\n    Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n    this.children_.unshift(tag);\n\n    this.el_ = el;\n\n    return el;\n  }\n\n  /**\n   * Get/set player width\n   *\n   * @param {Number=} value Value for width\n   * @return {Number} Width when getting\n   * @method width\n   */\n  width(value) {\n    return this.dimension('width', value);\n  }\n\n  /**\n   * Get/set player height\n   *\n   * @param {Number=} value Value for height\n   * @return {Number} Height when getting\n   * @method height\n   */\n  height(value) {\n    return this.dimension('height', value);\n  }\n\n  /**\n   * Get/set dimension for player\n   *\n   * @param {String} dimension Either width or height\n   * @param {Number=} value Value for dimension\n   * @return {Component}\n   * @method dimension\n   */\n  dimension(dimension, value) {\n    let privDimension = dimension + '_';\n\n    if (value === undefined) {\n      return this[privDimension] || 0;\n    }\n\n    if (value === '') {\n      // If an empty string is given, reset the dimension to be automatic\n      this[privDimension] = undefined;\n    } else {\n      let parsedVal = parseFloat(value);\n\n      if (isNaN(parsedVal)) {\n        log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n        return this;\n      }\n\n      this[privDimension] = parsedVal;\n    }\n\n    this.updateStyleEl_();\n    return this;\n  }\n\n  /**\n   * Add/remove the vjs-fluid class\n   *\n   * @param {Boolean} bool Value of true adds the class, value of false removes the class\n   * @method fluid\n   */\n  fluid(bool) {\n    if (bool === undefined) {\n      return !!this.fluid_;\n    }\n\n    this.fluid_ = !!bool;\n\n    if (bool) {\n      this.addClass('vjs-fluid');\n    } else {\n      this.removeClass('vjs-fluid');\n    }\n  }\n\n  /**\n   * Get/Set the aspect ratio\n   *\n   * @param {String=} ratio Aspect ratio for player\n   * @return aspectRatio\n   * @method aspectRatio\n   */\n  aspectRatio(ratio) {\n    if (ratio === undefined) {\n      return this.aspectRatio_;\n    }\n\n    // Check for width:height format\n    if (!/^\\d+\\:\\d+$/.test(ratio)) {\n      throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n    }\n    this.aspectRatio_ = ratio;\n\n    // We're assuming if you set an aspect ratio you want fluid mode,\n    // because in fixed mode you could calculate width and height yourself.\n    this.fluid(true);\n\n    this.updateStyleEl_();\n  }\n\n  /**\n   * Update styles of the player element (height, width and aspect ratio)\n   *\n   * @method updateStyleEl_\n   */\n  updateStyleEl_() {\n    if (window.VIDEOJS_NO_DYNAMIC_STYLE === true) {\n      const width = typeof this.width_ === 'number' ? this.width_ : this.options_.width;\n      const height = typeof this.height_ === 'number' ? this.height_ : this.options_.height;\n      let techEl = this.tech_ && this.tech_.el();\n\n      if (techEl) {\n        if (width >= 0) {\n          techEl.width = width;\n        }\n        if (height >= 0) {\n          techEl.height = height;\n        }\n      }\n\n      return;\n    }\n\n    let width;\n    let height;\n    let aspectRatio;\n    let idClass;\n\n    // The aspect ratio is either used directly or to calculate width and height.\n    if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n      // Use any aspectRatio that's been specifically set\n      aspectRatio = this.aspectRatio_;\n    } else if (this.videoWidth()) {\n      // Otherwise try to get the aspect ratio from the video metadata\n      aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n    } else {\n      // Or use a default. The video element's is 2:1, but 16:9 is more common.\n      aspectRatio = '16:9';\n    }\n\n    // Get the ratio as a decimal we can use to calculate dimensions\n    let ratioParts = aspectRatio.split(':');\n    let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n    if (this.width_ !== undefined) {\n      // Use any width that's been specifically set\n      width = this.width_;\n    } else if (this.height_ !== undefined) {\n      // Or calulate the width from the aspect ratio if a height has been set\n      width = this.height_ / ratioMultiplier;\n    } else {\n      // Or use the video's metadata, or use the video el's default of 300\n      width = this.videoWidth() || 300;\n    }\n\n    if (this.height_ !== undefined) {\n      // Use any height that's been specifically set\n      height = this.height_;\n    } else {\n      // Otherwise calculate the height from the ratio and the width\n      height = width  * ratioMultiplier;\n    }\n\n    // Ensure the CSS class is valid by starting with an alpha character\n    if (/^[^a-zA-Z]/.test(this.id())) {\n      idClass = 'dimensions-'+this.id();\n    } else {\n      idClass = this.id()+'-dimensions';\n    }\n\n    // Ensure the right class is still on the player for the style element\n    this.addClass(idClass);\n\n    stylesheet.setTextContent(this.styleEl_, `\n      .${idClass} {\n        width: ${width}px;\n        height: ${height}px;\n      }\n\n      .${idClass}.vjs-fluid {\n        padding-top: ${ratioMultiplier * 100}%;\n      }\n    `);\n  }\n\n  /**\n   * Load the Media Playback Technology (tech)\n   * Load/Create an instance of playback technology including element and API methods\n   * And append playback element in player div.\n   *\n   * @param {String} techName Name of the playback technology\n   * @param {String} source Video source\n   * @method loadTech_\n   * @private\n   */\n  loadTech_(techName, source) {\n\n    // Pause and remove current playback technology\n    if (this.tech_) {\n      this.unloadTech_();\n    }\n\n    // get rid of the HTML5 video tag as soon as we are using another tech\n    if (techName !== 'Html5' && this.tag) {\n      Tech.getTech('Html5').disposeMediaElement(this.tag);\n      this.tag.player = null;\n      this.tag = null;\n    }\n\n    this.techName_ = techName;\n\n    // Turn off API access because we're loading a new tech that might load asynchronously\n    this.isReady_ = false;\n\n    // Grab tech-specific options from player options and add source and parent element to use.\n    var techOptions = assign({\n      'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n      'source': source,\n      'playerId': this.id(),\n      'techId': `${this.id()}_${techName}_api`,\n      'textTracks': this.textTracks_,\n      'autoplay': this.options_.autoplay,\n      'preload': this.options_.preload,\n      'loop': this.options_.loop,\n      'muted': this.options_.muted,\n      'poster': this.poster(),\n      'language': this.language(),\n      'vtt.js': this.options_['vtt.js']\n    }, this.options_[techName.toLowerCase()]);\n\n    if (this.tag) {\n      techOptions.tag = this.tag;\n    }\n\n    if (source) {\n      this.currentType_ = source.type;\n      if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n        techOptions.startTime = this.cache_.currentTime;\n      }\n\n      this.cache_.src = source.src;\n    }\n\n    // Initialize tech instance\n    let techComponent = Tech.getTech(techName);\n    // Support old behavior of techs being registered as components.\n    // Remove once that deprecated behavior is removed.\n    if (!techComponent) {\n      techComponent = Component.getComponent(techName);\n    }\n    this.tech_ = new techComponent(techOptions);\n\n    // player.triggerReady is always async, so don't need this to be async\n    this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n    textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n    // Listen to all HTML5-defined events and trigger them on the player\n    this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n    this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n    this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n    this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n    this.on(this.tech_, 'playing', this.handleTechPlaying_);\n    this.on(this.tech_, 'ended', this.handleTechEnded_);\n    this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n    this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n    this.on(this.tech_, 'play', this.handleTechPlay_);\n    this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n    this.on(this.tech_, 'pause', this.handleTechPause_);\n    this.on(this.tech_, 'progress', this.handleTechProgress_);\n    this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n    this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n    this.on(this.tech_, 'error', this.handleTechError_);\n    this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n    this.on(this.tech_, 'abort', this.handleTechAbort_);\n    this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n    this.on(this.tech_, 'stalled', this.handleTechStalled_);\n    this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n    this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n    this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n    this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n    this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n    this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n    this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n    this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n\n    this.usingNativeControls(this.techGet_('controls'));\n\n    if (this.controls() && !this.usingNativeControls()) {\n      this.addTechControlsListeners_();\n    }\n\n    // Add the tech element in the DOM if it was not already there\n    // Make sure to not insert the original video element if using Html5\n    if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n      Dom.insertElFirst(this.tech_.el(), this.el());\n    }\n\n    // Get rid of the original video tag reference after the first tech is loaded\n    if (this.tag) {\n      this.tag.player = null;\n      this.tag = null;\n    }\n  }\n\n  /**\n   * Unload playback technology\n   *\n   * @method unloadTech_\n   * @private\n   */\n  unloadTech_() {\n    // Save the current text tracks so that we can reuse the same text tracks with the next tech\n    this.textTracks_ = this.textTracks();\n    this.textTracksJson_ = textTrackConverter.textTracksToJson(this.tech_);\n\n    this.isReady_ = false;\n\n    this.tech_.dispose();\n\n    this.tech_ = false;\n  }\n\n  /**\n   * Return a reference to the current tech.\n   * It will only return a reference to the tech if given an object with the\n   * `IWillNotUseThisInPlugins` property on it. This is try and prevent misuse\n   * of techs by plugins.\n   *\n   * @param {Object}\n   * @return {Object} The Tech\n   * @method tech\n   */\n  tech(safety) {\n    if (safety && safety.IWillNotUseThisInPlugins) {\n      return this.tech_;\n    }\n    let errorText = `\n      Please make sure that you are not using this inside of a plugin.\n      To disable this alert and error, please pass in an object with\n      \\`IWillNotUseThisInPlugins\\` to the \\`tech\\` method. See\n      https://github.com/videojs/video.js/issues/2617 for more info.\n    `;\n    window.alert(errorText);\n    throw new Error(errorText);\n  }\n\n  /**\n   * Set up click and touch listeners for the playback element\n   *\n   * On desktops, a click on the video itself will toggle playback,\n   * on a mobile device a click on the video toggles controls.\n   * (toggling controls is done by toggling the user state between active and\n   * inactive)\n   * A tap can signal that a user has become active, or has become inactive\n   * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n   * quick tap should hide them again (signaling the user is in an inactive\n   * viewing state)\n   * In addition to this, we still want the user to be considered inactive after\n   * a few seconds of inactivity.\n   * Note: the only part of iOS interaction we can't mimic with this setup\n   * is a touch and hold on the video element counting as activity in order to\n   * keep the controls showing, but that shouldn't be an issue. A touch and hold\n   * on any controls will still keep the user active\n   *\n   * @private\n   * @method addTechControlsListeners_\n   */\n  addTechControlsListeners_() {\n    // Make sure to remove all the previous listeners in case we are called multiple times.\n    this.removeTechControlsListeners_();\n\n    // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n    // trigger mousedown/up.\n    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n    // Any touch events are set to block the mousedown event from happening\n    this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n    // If the controls were hidden we don't want that to change without a tap event\n    // so we'll check if the controls were already showing before reporting user\n    // activity\n    this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n    this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n    this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n    // The tap listener needs to come after the touchend listener because the tap\n    // listener cancels out any reportedUserActivity when setting userActive(false)\n    this.on(this.tech_, 'tap', this.handleTechTap_);\n  }\n\n  /**\n   * Remove the listeners used for click and tap controls. This is needed for\n   * toggling to controls disabled, where a tap/touch should do nothing.\n   *\n   * @method removeTechControlsListeners_\n   * @private\n   */\n  removeTechControlsListeners_() {\n    // We don't want to just use `this.off()` because there might be other needed\n    // listeners added by techs that extend this.\n    this.off(this.tech_, 'tap', this.handleTechTap_);\n    this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n    this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n    this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n    this.off(this.tech_, 'mousedown', this.handleTechClick_);\n  }\n\n  /**\n   * Player waits for the tech to be ready\n   *\n   * @method handleTechReady_\n   * @private\n   */\n  handleTechReady_() {\n    this.triggerReady();\n\n    // Keep the same volume as before\n    if (this.cache_.volume) {\n      this.techCall_('setVolume', this.cache_.volume);\n    }\n\n    // Look if the tech found a higher resolution poster while loading\n    this.handleTechPosterChange_();\n\n    // Update the duration if available\n    this.handleTechDurationChange_();\n\n    // Chrome and Safari both have issues with autoplay.\n    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n    // This fixes both issues. Need to wait for API, so it updates displays correctly\n    if (this.src() && this.tag && this.options_.autoplay && this.paused()) {\n      delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n      this.play();\n    }\n  }\n\n  /**\n   * Fired when the user agent begins looking for media data\n   *\n   * @private\n   * @method handleTechLoadStart_\n   */\n  handleTechLoadStart_() {\n    // TODO: Update to use `emptied` event instead. See #1277.\n\n    this.removeClass('vjs-ended');\n\n    // reset the error state\n    this.error(null);\n\n    // If it's already playing we want to trigger a firstplay event now.\n    // The firstplay event relies on both the play and loadstart events\n    // which can happen in any order for a new source\n    if (!this.paused()) {\n      this.trigger('loadstart');\n      this.trigger('firstplay');\n    } else {\n      // reset the hasStarted state\n      this.hasStarted(false);\n      this.trigger('loadstart');\n    }\n  }\n\n  /**\n   * Add/remove the vjs-has-started class\n   *\n   * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n   * @return {Boolean} Boolean value if has started\n   * @private\n   * @method hasStarted\n   */\n  hasStarted(hasStarted) {\n    if (hasStarted !== undefined) {\n      // only update if this is a new value\n      if (this.hasStarted_ !== hasStarted) {\n        this.hasStarted_ = hasStarted;\n        if (hasStarted) {\n          this.addClass('vjs-has-started');\n          // trigger the firstplay event if this newly has played\n          this.trigger('firstplay');\n        } else {\n          this.removeClass('vjs-has-started');\n        }\n      }\n      return this;\n    }\n    return !!this.hasStarted_;\n  }\n\n  /**\n   * Fired whenever the media begins or resumes playback\n   *\n   * @private\n   * @method handleTechPlay_\n   */\n  handleTechPlay_() {\n    this.removeClass('vjs-ended');\n    this.removeClass('vjs-paused');\n    this.addClass('vjs-playing');\n\n    // hide the poster when the user hits play\n    // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n    this.hasStarted(true);\n\n    this.trigger('play');\n  }\n\n  /**\n   * Fired whenever the media begins waiting\n   *\n   * @private\n   * @method handleTechWaiting_\n   */\n  handleTechWaiting_() {\n    this.addClass('vjs-waiting');\n    this.trigger('waiting');\n    this.one('timeupdate', () => this.removeClass('vjs-waiting'));\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechCanPlay_\n   */\n  handleTechCanPlay_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('canplay');\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechCanPlayThrough_\n   */\n  handleTechCanPlayThrough_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('canplaythrough');\n  }\n\n  /**\n   * A handler for events that signal that waiting has ended\n   * which is not consistent between browsers. See #1351\n   *\n   * @private\n   * @method handleTechPlaying_\n   */\n  handleTechPlaying_() {\n    this.removeClass('vjs-waiting');\n    this.trigger('playing');\n  }\n\n  /**\n   * Fired whenever the player is jumping to a new time\n   *\n   * @private\n   * @method handleTechSeeking_\n   */\n  handleTechSeeking_() {\n    this.addClass('vjs-seeking');\n    this.trigger('seeking');\n  }\n\n  /**\n   * Fired when the player has finished jumping to a new time\n   *\n   * @private\n   * @method handleTechSeeked_\n   */\n  handleTechSeeked_() {\n    this.removeClass('vjs-seeking');\n    this.trigger('seeked');\n  }\n\n  /**\n   * Fired the first time a video is played\n   * Not part of the HLS spec, and we're not sure if this is the best\n   * implementation yet, so use sparingly. If you don't have a reason to\n   * prevent playback, use `myPlayer.one('play');` instead.\n   *\n   * @private\n   * @method handleTechFirstPlay_\n   */\n  handleTechFirstPlay_() {\n    //If the first starttime attribute is specified\n    //then we will start at the given offset in seconds\n    if(this.options_.starttime){\n      this.currentTime(this.options_.starttime);\n    }\n\n    this.addClass('vjs-has-started');\n    this.trigger('firstplay');\n  }\n\n  /**\n   * Fired whenever the media has been paused\n   *\n   * @private\n   * @method handleTechPause_\n   */\n  handleTechPause_() {\n    this.removeClass('vjs-playing');\n    this.addClass('vjs-paused');\n    this.trigger('pause');\n  }\n\n  /**\n   * Fired while the user agent is downloading media data\n   *\n   * @private\n   * @method handleTechProgress_\n   */\n  handleTechProgress_() {\n    this.trigger('progress');\n  }\n\n  /**\n   * Fired when the end of the media resource is reached (currentTime == duration)\n   *\n   * @private\n   * @method handleTechEnded_\n   */\n  handleTechEnded_() {\n    this.addClass('vjs-ended');\n    if (this.options_.loop) {\n      this.currentTime(0);\n      this.play();\n    } else if (!this.paused()) {\n      this.pause();\n    }\n\n    this.trigger('ended');\n  }\n\n  /**\n   * Fired when the duration of the media resource is first known or changed\n   *\n   * @private\n   * @method handleTechDurationChange_\n   */\n  handleTechDurationChange_() {\n    this.duration(this.techGet_('duration'));\n  }\n\n  /**\n   * Handle a click on the media element to play/pause\n   *\n   * @param {Object=} event Event object\n   * @private\n   * @method handleTechClick_\n   */\n  handleTechClick_(event) {\n    // We're using mousedown to detect clicks thanks to Flash, but mousedown\n    // will also be triggered with right-clicks, so we need to prevent that\n    if (event.button !== 0) return;\n\n    // When controls are disabled a click should not toggle playback because\n    // the click is considered a control\n    if (this.controls()) {\n      if (this.paused()) {\n        this.play();\n      } else {\n        this.pause();\n      }\n    }\n  }\n\n  /**\n   * Handle a tap on the media element. It will toggle the user\n   * activity state, which hides and shows the controls.\n   *\n   * @private\n   * @method handleTechTap_\n   */\n  handleTechTap_() {\n    this.userActive(!this.userActive());\n  }\n\n  /**\n   * Handle touch to start\n   *\n   * @private\n   * @method handleTechTouchStart_\n   */\n  handleTechTouchStart_() {\n    this.userWasActive = this.userActive();\n  }\n\n  /**\n   * Handle touch to move\n   *\n   * @private\n   * @method handleTechTouchMove_\n   */\n  handleTechTouchMove_() {\n    if (this.userWasActive){\n      this.reportUserActivity();\n    }\n  }\n\n  /**\n   * Handle touch to end\n   *\n   * @private\n   * @method handleTechTouchEnd_\n   */\n  handleTechTouchEnd_(event) {\n    // Stop the mouse events from also happening\n    event.preventDefault();\n  }\n\n  /**\n   * Fired when the player switches in or out of fullscreen mode\n   *\n   * @private\n   * @method handleFullscreenChange_\n   */\n  handleFullscreenChange_() {\n    if (this.isFullscreen()) {\n      this.addClass('vjs-fullscreen');\n    } else {\n      this.removeClass('vjs-fullscreen');\n    }\n  }\n\n  /**\n   * native click events on the SWF aren't triggered on IE11, Win8.1RT\n   * use stageclick events triggered from inside the SWF instead\n   *\n   * @private\n   * @method handleStageClick_\n   */\n  handleStageClick_() {\n    this.reportUserActivity();\n  }\n\n  /**\n   * Handle Tech Fullscreen Change\n   *\n   * @private\n   * @method handleTechFullscreenChange_\n   */\n  handleTechFullscreenChange_(event, data) {\n    if (data) {\n      this.isFullscreen(data.isFullscreen);\n    }\n    this.trigger('fullscreenchange');\n  }\n\n  /**\n   * Fires when an error occurred during the loading of an audio/video\n   *\n   * @private\n   * @method handleTechError_\n   */\n  handleTechError_() {\n    let error = this.tech_.error();\n    this.error(error && error.code);\n  }\n\n  /**\n   * Fires when the browser is intentionally not getting media data\n   *\n   * @private\n   * @method handleTechSuspend_\n   */\n  handleTechSuspend_() {\n    this.trigger('suspend');\n  }\n\n  /**\n   * Fires when the loading of an audio/video is aborted\n   *\n   * @private\n   * @method handleTechAbort_\n   */\n  handleTechAbort_() {\n    this.trigger('abort');\n  }\n\n  /**\n   * Fires when the current playlist is empty\n   *\n   * @private\n   * @method handleTechEmptied_\n   */\n  handleTechEmptied_() {\n    this.trigger('emptied');\n  }\n\n  /**\n   * Fires when the browser is trying to get media data, but data is not available\n   *\n   * @private\n   * @method handleTechStalled_\n   */\n  handleTechStalled_() {\n    this.trigger('stalled');\n  }\n\n  /**\n   * Fires when the browser has loaded meta data for the audio/video\n   *\n   * @private\n   * @method handleTechLoadedMetaData_\n   */\n  handleTechLoadedMetaData_() {\n    this.trigger('loadedmetadata');\n  }\n\n  /**\n   * Fires when the browser has loaded the current frame of the audio/video\n   *\n   * @private\n   * @method handleTechLoadedData_\n   */\n  handleTechLoadedData_() {\n    this.trigger('loadeddata');\n  }\n\n  /**\n   * Fires when the current playback position has changed\n   *\n   * @private\n   * @method handleTechTimeUpdate_\n   */\n  handleTechTimeUpdate_() {\n    this.trigger('timeupdate');\n  }\n\n  /**\n   * Fires when the playing speed of the audio/video is changed\n   *\n   * @private\n   * @method handleTechRateChange_\n   */\n  handleTechRateChange_() {\n    this.trigger('ratechange');\n  }\n\n  /**\n   * Fires when the volume has been changed\n   *\n   * @private\n   * @method handleTechVolumeChange_\n   */\n  handleTechVolumeChange_() {\n    this.trigger('volumechange');\n  }\n\n  /**\n   * Fires when the text track has been changed\n   *\n   * @private\n   * @method handleTechTextTrackChange_\n   */\n  handleTechTextTrackChange_() {\n    this.trigger('texttrackchange');\n  }\n\n  /**\n   * Get object for cached values.\n   *\n   * @return {Object}\n   * @method getCache\n   */\n  getCache() {\n    return this.cache_;\n  }\n\n  /**\n   * Pass values to the playback tech\n   *\n   * @param {String=} method Method\n   * @param {Object=} arg Argument\n   * @private\n   * @method techCall_\n   */\n  techCall_(method, arg) {\n    // If it's not ready yet, call method when it is\n    if (this.tech_ && !this.tech_.isReady_) {\n      this.tech_.ready(function(){\n        this[method](arg);\n      }, true);\n\n    // Otherwise call method now\n    } else {\n      try {\n        this.tech_[method](arg);\n      } catch(e) {\n        log(e);\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Get calls can't wait for the tech, and sometimes don't need to.\n   *\n   * @param {String} method Tech method\n   * @return {Method}\n   * @private\n   * @method techGet_\n   */\n  techGet_(method) {\n    if (this.tech_ && this.tech_.isReady_) {\n\n      // Flash likes to die and reload when you hide or reposition it.\n      // In these cases the object methods go away and we get errors.\n      // When that happens we'll catch the errors and inform tech that it's not ready any more.\n      try {\n        return this.tech_[method]();\n      } catch(e) {\n        // When building additional tech libs, an expected method may not be defined yet\n        if (this.tech_[method] === undefined) {\n          log(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e);\n        } else {\n          // When a method isn't available on the object it throws a TypeError\n          if (e.name === 'TypeError') {\n            log(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e);\n            this.tech_.isReady_ = false;\n          } else {\n            log(e);\n          }\n        }\n        throw e;\n      }\n    }\n\n    return;\n  }\n\n  /**\n   * start media playback\n   * ```js\n   *     myPlayer.play();\n   * ```\n   *\n   * @return {Player} self\n   * @method play\n   */\n  play() {\n    this.techCall_('play');\n    return this;\n  }\n\n  /**\n   * Pause the video playback\n   * ```js\n   *     myPlayer.pause();\n   * ```\n   *\n   * @return {Player} self\n   * @method pause\n   */\n  pause() {\n    this.techCall_('pause');\n    return this;\n  }\n\n  /**\n   * Check if the player is paused\n   * ```js\n   *     var isPaused = myPlayer.paused();\n   *     var isPlaying = !myPlayer.paused();\n   * ```\n   *\n   * @return {Boolean} false if the media is currently playing, or true otherwise\n   * @method paused\n   */\n  paused() {\n    // The initial state of paused should be true (in Safari it's actually false)\n    return (this.techGet_('paused') === false) ? false : true;\n  }\n\n  /**\n   * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n   * has clicked the progress bar handle and is dragging it along the progress bar.\n   *\n   * @param  {Boolean} isScrubbing   True/false the user is scrubbing\n   * @return {Boolean}               The scrubbing status when getting\n   * @return {Object}                The player when setting\n   * @method scrubbing\n   */\n  scrubbing(isScrubbing) {\n    if (isScrubbing !== undefined) {\n      this.scrubbing_ = !!isScrubbing;\n\n      if (isScrubbing) {\n        this.addClass('vjs-scrubbing');\n      } else {\n        this.removeClass('vjs-scrubbing');\n      }\n\n      return this;\n    }\n\n    return this.scrubbing_;\n  }\n\n  /**\n   * Get or set the current time (in seconds)\n   * ```js\n   *     // get\n   *     var whereYouAt = myPlayer.currentTime();\n   *     // set\n   *     myPlayer.currentTime(120); // 2 minutes into the video\n   * ```\n   *\n   * @param  {Number|String=} seconds The time to seek to\n   * @return {Number}        The time in seconds, when not setting\n   * @return {Player}    self, when the current time is set\n   * @method currentTime\n   */\n  currentTime(seconds) {\n    if (seconds !== undefined) {\n\n      this.techCall_('setCurrentTime', seconds);\n\n      return this;\n    }\n\n    // cache last currentTime and return. default to 0 seconds\n    //\n    // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n    // currentTime when scrubbing, but may not provide much performance benefit afterall.\n    // Should be tested. Also something has to read the actual current time or the cache will\n    // never get updated.\n    return this.cache_.currentTime = (this.techGet_('currentTime') || 0);\n  }\n\n  /**\n   * Get the length in time of the video in seconds\n   * ```js\n   *     var lengthOfVideo = myPlayer.duration();\n   * ```\n   * **NOTE**: The video must have started loading before the duration can be\n   * known, and in the case of Flash, may not be known until the video starts\n   * playing.\n   *\n   * @param {Number} seconds Duration when setting\n   * @return {Number} The duration of the video in seconds when getting\n   * @method duration\n   */\n  duration(seconds) {\n    if (seconds === undefined) {\n      return this.cache_.duration || 0;\n    }\n\n    seconds = parseFloat(seconds) || 0;\n\n    // Standardize on Inifity for signaling video is live\n    if (seconds < 0) {\n      seconds = Infinity;\n    }\n\n    if (seconds !== this.cache_.duration) {\n      // Cache the last set value for optimized scrubbing (esp. Flash)\n      this.cache_.duration = seconds;\n\n      if (seconds === Infinity) {\n        this.addClass('vjs-live');\n      } else {\n        this.removeClass('vjs-live');\n      }\n\n      this.trigger('durationchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * Calculates how much time is left.\n   * ```js\n   *     var timeLeft = myPlayer.remainingTime();\n   * ```\n   * Not a native video element function, but useful\n   *\n   * @return {Number} The time remaining in seconds\n   * @method remainingTime\n   */\n  remainingTime() {\n    return this.duration() - this.currentTime();\n  }\n\n  // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n  // Buffered returns a timerange object.\n  // Kind of like an array of portions of the video that have been downloaded.\n\n  /**\n   * Get a TimeRange object with the times of the video that have been downloaded\n   * If you just want the percent of the video that's been downloaded,\n   * use bufferedPercent.\n   * ```js\n   *     // Number of different ranges of time have been buffered. Usually 1.\n   *     numberOfRanges = bufferedTimeRange.length,\n   *     // Time in seconds when the first range starts. Usually 0.\n   *     firstRangeStart = bufferedTimeRange.start(0),\n   *     // Time in seconds when the first range ends\n   *     firstRangeEnd = bufferedTimeRange.end(0),\n   *     // Length in seconds of the first time range\n   *     firstRangeLength = firstRangeEnd - firstRangeStart;\n   * ```\n   *\n   * @return {Object} A mock TimeRange object (following HTML spec)\n   * @method buffered\n   */\n  buffered() {\n    var buffered = this.techGet_('buffered');\n\n    if (!buffered || !buffered.length) {\n      buffered = createTimeRange(0,0);\n    }\n\n    return buffered;\n  }\n\n  /**\n   * Get the percent (as a decimal) of the video that's been downloaded\n   * ```js\n   *     var howMuchIsDownloaded = myPlayer.bufferedPercent();\n   * ```\n   * 0 means none, 1 means all.\n   * (This method isn't in the HTML5 spec, but it's very convenient)\n   *\n   * @return {Number} A decimal between 0 and 1 representing the percent\n   * @method bufferedPercent\n   */\n  bufferedPercent() {\n    return bufferedPercent(this.buffered(), this.duration());\n  }\n\n  /**\n   * Get the ending time of the last buffered time range\n   * This is used in the progress bar to encapsulate all time ranges.\n   *\n   * @return {Number} The end of the last buffered time range\n   * @method bufferedEnd\n   */\n  bufferedEnd() {\n    var buffered = this.buffered(),\n        duration = this.duration(),\n        end = buffered.end(buffered.length-1);\n\n    if (end > duration) {\n      end = duration;\n    }\n\n    return end;\n  }\n\n  /**\n   * Get or set the current volume of the media\n   * ```js\n   *     // get\n   *     var howLoudIsIt = myPlayer.volume();\n   *     // set\n   *     myPlayer.volume(0.5); // Set volume to half\n   * ```\n   * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n   *\n   * @param  {Number} percentAsDecimal The new volume as a decimal percent\n   * @return {Number}              The current volume when getting\n   * @return {Player}              self when setting\n   * @method volume\n   */\n  volume(percentAsDecimal) {\n    let vol;\n\n    if (percentAsDecimal !== undefined) {\n      vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n      this.cache_.volume = vol;\n      this.techCall_('setVolume', vol);\n\n      return this;\n    }\n\n    // Default to 1 when returning current volume.\n    vol = parseFloat(this.techGet_('volume'));\n    return (isNaN(vol)) ? 1 : vol;\n  }\n\n\n  /**\n   * Get the current muted state, or turn mute on or off\n   * ```js\n   *     // get\n   *     var isVolumeMuted = myPlayer.muted();\n   *     // set\n   *     myPlayer.muted(true); // mute the volume\n   * ```\n   *\n   * @param  {Boolean=} muted True to mute, false to unmute\n   * @return {Boolean} True if mute is on, false if not when getting\n   * @return {Player} self when setting mute\n   * @method muted\n   */\n  muted(muted) {\n    if (muted !== undefined) {\n      this.techCall_('setMuted', muted);\n      return this;\n    }\n    return this.techGet_('muted') || false; // Default to false\n  }\n\n  // Check if current tech can support native fullscreen\n  // (e.g. with built in controls like iOS, so not our flash swf)\n  /**\n   * Check to see if fullscreen is supported\n   *\n   * @return {Boolean}\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    return this.techGet_('supportsFullScreen') || false;\n  }\n\n  /**\n   * Check if the player is in fullscreen mode\n   * ```js\n   *     // get\n   *     var fullscreenOrNot = myPlayer.isFullscreen();\n   *     // set\n   *     myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n   * ```\n   * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n   * property and instead document.fullscreenElement is used. But isFullscreen is\n   * still a valuable property for internal player workings.\n   *\n   * @param  {Boolean=} isFS Update the player's fullscreen state\n   * @return {Boolean} true if fullscreen false if not when getting\n   * @return {Player} self when setting\n   * @method isFullscreen\n   */\n  isFullscreen(isFS) {\n    if (isFS !== undefined) {\n      this.isFullscreen_ = !!isFS;\n      return this;\n    }\n    return !!this.isFullscreen_;\n  }\n\n  /**\n   * Increase the size of the video to full screen\n   * ```js\n   *     myPlayer.requestFullscreen();\n   * ```\n   * In some browsers, full screen is not supported natively, so it enters\n   * \"full window mode\", where the video fills the browser window.\n   * In browsers and devices that support native full screen, sometimes the\n   * browser's default controls will be shown, and not the Video.js custom skin.\n   * This includes most mobile devices (iOS, Android) and older versions of\n   * Safari.\n   *\n   * @return {Player} self\n   * @method requestFullscreen\n   */\n  requestFullscreen() {\n    var fsApi = FullscreenApi;\n\n    this.isFullscreen(true);\n\n    if (fsApi.requestFullscreen) {\n      // the browser supports going fullscreen at the element level so we can\n      // take the controls fullscreen as well as the video\n\n      // Trigger fullscreenchange event after change\n      // We have to specifically add this each time, and remove\n      // when canceling fullscreen. Otherwise if there's multiple\n      // players on a page, they would all be reacting to the same fullscreen\n      // events\n      Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n        this.isFullscreen(document[fsApi.fullscreenElement]);\n\n        // If cancelling fullscreen, remove event listener.\n        if (this.isFullscreen() === false) {\n          Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n        }\n\n        this.trigger('fullscreenchange');\n      }));\n\n      this.el_[fsApi.requestFullscreen]();\n\n    } else if (this.tech_.supportsFullScreen()) {\n      // we can't take the video.js controls fullscreen but we can go fullscreen\n      // with native controls\n      this.techCall_('enterFullScreen');\n    } else {\n      // fullscreen isn't supported so we'll just stretch the video element to\n      // fill the viewport\n      this.enterFullWindow();\n      this.trigger('fullscreenchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * Return the video to its normal size after having been in full screen mode\n   * ```js\n   *     myPlayer.exitFullscreen();\n   * ```\n   *\n   * @return {Player} self\n   * @method exitFullscreen\n   */\n  exitFullscreen() {\n    var fsApi = FullscreenApi;\n    this.isFullscreen(false);\n\n    // Check for browser element fullscreen support\n    if (fsApi.requestFullscreen) {\n      document[fsApi.exitFullscreen]();\n    } else if (this.tech_.supportsFullScreen()) {\n     this.techCall_('exitFullScreen');\n    } else {\n     this.exitFullWindow();\n     this.trigger('fullscreenchange');\n    }\n\n    return this;\n  }\n\n  /**\n   * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n   *\n   * @method enterFullWindow\n   */\n  enterFullWindow() {\n    this.isFullWindow = true;\n\n    // Storing original doc overflow value to return to when fullscreen is off\n    this.docOrigOverflow = document.documentElement.style.overflow;\n\n    // Add listener for esc key to exit fullscreen\n    Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n    // Hide any scroll bars\n    document.documentElement.style.overflow = 'hidden';\n\n    // Apply fullscreen styles\n    Dom.addElClass(document.body, 'vjs-full-window');\n\n    this.trigger('enterFullWindow');\n  }\n\n  /**\n   * Check for call to either exit full window or full screen on ESC key\n   *\n   * @param {String} event Event to check for key press\n   * @method fullWindowOnEscKey\n   */\n  fullWindowOnEscKey(event) {\n    if (event.keyCode === 27) {\n      if (this.isFullscreen() === true) {\n        this.exitFullscreen();\n      } else {\n        this.exitFullWindow();\n      }\n    }\n  }\n\n  /**\n   * Exit full window\n   *\n   * @method exitFullWindow\n   */\n  exitFullWindow() {\n    this.isFullWindow = false;\n    Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n    // Unhide scroll bars.\n    document.documentElement.style.overflow = this.docOrigOverflow;\n\n    // Remove fullscreen styles\n    Dom.removeElClass(document.body, 'vjs-full-window');\n\n    // Resize the box, controller, and poster to original sizes\n    // this.positionAll();\n    this.trigger('exitFullWindow');\n  }\n\n  /**\n   * Check whether the player can play a given mimetype\n   *\n   * @param {String} type The mimetype to check\n   * @return {String} 'probably', 'maybe', or '' (empty string)\n   * @method canPlayType\n   */\n  canPlayType(type) {\n    let can;\n\n    // Loop through each playback technology in the options order\n    for (let i = 0, j = this.options_.techOrder; i < j.length; i++) {\n      let techName = toTitleCase(j[i]);\n      let tech = Tech.getTech(techName);\n\n      // Support old behavior of techs being registered as components.\n      // Remove once that deprecated behavior is removed.\n      if (!tech) {\n        tech = Component.getComponent(techName);\n      }\n\n      // Check if the current tech is defined before continuing\n      if (!tech) {\n        log.error(`The \"${techName}\" tech is undefined. Skipped browser support check for that tech.`);\n        continue;\n      }\n\n      // Check if the browser supports this technology\n      if (tech.isSupported()) {\n        can = tech.canPlayType(type);\n\n        if (can) {\n          return can;\n        }\n      }\n    }\n\n    return '';\n  }\n\n  /**\n   * Select source based on tech-order or source-order\n   * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,\n   * defaults to tech-order selection\n   *\n   * @param {Array} sources The sources for a media asset\n   * @return {Object|Boolean} Object of source and tech order, otherwise false\n   * @method selectSource\n   */\n  selectSource(sources) {\n    // Get only the techs specified in `techOrder` that exist and are supported by the\n    // current platform\n    let techs =\n      this.options_.techOrder\n        .map(toTitleCase)\n        .map((techName) => {\n          // `Component.getComponent(...)` is for support of old behavior of techs\n          // being registered as components.\n          // Remove once that deprecated behavior is removed.\n          return [techName, Tech.getTech(techName) || Component.getComponent(techName)];\n        })\n        .filter(([techName, tech]) => {\n          // Check if the current tech is defined before continuing\n          if (tech) {\n            // Check if the browser supports this technology\n            return tech.isSupported();\n          }\n\n          log.error(`The \"${techName}\" tech is undefined. Skipped browser support check for that tech.`);\n          return false;\n        });\n\n    // Iterate over each `innerArray` element once per `outerArray` element and execute\n    // `tester` with both. If `tester` returns a non-falsy value, exit early and return\n    // that value.\n    let findFirstPassingTechSourcePair = function (outerArray, innerArray, tester) {\n      let found;\n\n      outerArray.some((outerChoice) => {\n        return innerArray.some((innerChoice) => {\n          found = tester(outerChoice, innerChoice);\n\n          if (found) {\n            return true;\n          }\n        });\n      });\n\n      return found;\n    };\n\n    let foundSourceAndTech;\n    let flip = (fn) => (a, b) => fn(b, a);\n    let finder = ([techName, tech], source) => {\n      if (tech.canPlaySource(source)) {\n        return {source: source, tech: techName};\n      }\n    };\n\n    // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources\n    // to select from them based on their priority.\n    if (this.options_.sourceOrder) {\n      // Source-first ordering\n      foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder));\n    } else {\n      // Tech-first ordering\n      foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder);\n    }\n\n    return foundSourceAndTech || false;\n  }\n\n  /**\n   * The source function updates the video source\n   * There are three types of variables you can pass as the argument.\n   * **URL String**: A URL to the the video file. Use this method if you are sure\n   * the current playback technology (HTML5/Flash) can support the source you\n   * provide. Currently only MP4 files can be used in both HTML5 and Flash.\n   * ```js\n   *     myPlayer.src(\"http://www.example.com/path/to/video.mp4\");\n   * ```\n   * **Source Object (or element):* * A javascript object containing information\n   * about the source file. Use this method if you want the player to determine if\n   * it can support the file using the type information.\n   * ```js\n   *     myPlayer.src({ type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" });\n   * ```\n   * **Array of Source Objects:* * To provide multiple versions of the source so\n   * that it can be played using HTML5 across browsers you can use an array of\n   * source objects. Video.js will detect which version is supported and load that\n   * file.\n   * ```js\n   *     myPlayer.src([\n   *       { type: \"video/mp4\", src: \"http://www.example.com/path/to/video.mp4\" },\n   *       { type: \"video/webm\", src: \"http://www.example.com/path/to/video.webm\" },\n   *       { type: \"video/ogg\", src: \"http://www.example.com/path/to/video.ogv\" }\n   *     ]);\n   * ```\n   *\n   * @param  {String|Object|Array=} source The source URL, object, or array of sources\n   * @return {String} The current video source when getting\n   * @return {String} The player when setting\n   * @method src\n   */\n  src(source) {\n    if (source === undefined) {\n      return this.techGet_('src');\n    }\n\n    let currentTech = Tech.getTech(this.techName_);\n    // Support old behavior of techs being registered as components.\n    // Remove once that deprecated behavior is removed.\n    if (!currentTech) {\n      currentTech = Component.getComponent(this.techName_);\n    }\n\n    // case: Array of source objects to choose from and pick the best to play\n    if (Array.isArray(source)) {\n      this.sourceList_(source);\n\n    // case: URL String (http://myvideo...)\n    } else if (typeof source === 'string') {\n      // create a source object from the string\n      this.src({ src: source });\n\n    // case: Source object { src: '', type: '' ... }\n    } else if (source instanceof Object) {\n      // check if the source has a type and the loaded tech cannot play the source\n      // if there's no type we'll just try the current tech\n      if (source.type && !currentTech.canPlaySource(source)) {\n        // create a source list with the current source and send through\n        // the tech loop to check for a compatible technology\n        this.sourceList_([source]);\n      } else {\n        this.cache_.src = source.src;\n        this.currentType_ = source.type || '';\n\n        // wait until the tech is ready to set the source\n        this.ready(function(){\n\n          // The setSource tech method was added with source handlers\n          // so older techs won't support it\n          // We need to check the direct prototype for the case where subclasses\n          // of the tech do not support source handlers\n          if (currentTech.prototype.hasOwnProperty('setSource')) {\n            this.techCall_('setSource', source);\n          } else {\n            this.techCall_('src', source.src);\n          }\n\n          if (this.options_.preload === 'auto') {\n            this.load();\n          }\n\n          if (this.options_.autoplay) {\n            this.play();\n          }\n\n        // Set the source synchronously if possible (#2326)\n        }, true);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Handle an array of source objects\n   *\n   * @param  {Array} sources Array of source objects\n   * @private\n   * @method sourceList_\n   */\n  sourceList_(sources) {\n    var sourceTech = this.selectSource(sources);\n\n    if (sourceTech) {\n      if (sourceTech.tech === this.techName_) {\n        // if this technology is already loaded, set the source\n        this.src(sourceTech.source);\n      } else {\n        // load this technology with the chosen source\n        this.loadTech_(sourceTech.tech, sourceTech.source);\n      }\n    } else {\n      // We need to wrap this in a timeout to give folks a chance to add error event handlers\n      this.setTimeout( function() {\n        this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) });\n      }, 0);\n\n      // we could not find an appropriate tech, but let's still notify the delegate that this is it\n      // this needs a better comment about why this is needed\n      this.triggerReady();\n    }\n  }\n\n  /**\n   * Begin loading the src data.\n   *\n   * @return {Player} Returns the player\n   * @method load\n   */\n  load() {\n    this.techCall_('load');\n    return this;\n  }\n\n  /**\n   * Reset the player. Loads the first tech in the techOrder,\n   * and calls `reset` on the tech`.\n   *\n   * @return {Player} Returns the player\n   * @method reset\n   */\n  reset() {\n    this.loadTech_(toTitleCase(this.options_.techOrder[0]), null);\n    this.techCall_('reset');\n    return this;\n  }\n\n  /**\n   * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4\n   * Can be used in conjuction with `currentType` to assist in rebuilding the current source object.\n   *\n   * @return {String} The current source\n   * @method currentSrc\n   */\n  currentSrc() {\n    return this.techGet_('currentSrc') || this.cache_.src || '';\n  }\n\n  /**\n   * Get the current source type e.g. video/mp4\n   * This can allow you rebuild the current source object so that you could load the same\n   * source and tech later\n   *\n   * @return {String} The source MIME type\n   * @method currentType\n   */\n  currentType() {\n    return this.currentType_ || '';\n  }\n\n  /**\n   * Get or set the preload attribute\n   *\n   * @param {Boolean} value Boolean to determine if preload should be used\n   * @return {String} The preload attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method preload\n   */\n  preload(value) {\n    if (value !== undefined) {\n      this.techCall_('setPreload', value);\n      this.options_.preload = value;\n      return this;\n    }\n    return this.techGet_('preload');\n  }\n\n  /**\n   * Get or set the autoplay attribute.\n   *\n   * @param {Boolean} value Boolean to determine if video should autoplay\n   * @return {String} The autoplay attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method autoplay\n   */\n  autoplay(value) {\n    if (value !== undefined) {\n      this.techCall_('setAutoplay', value);\n      this.options_.autoplay = value;\n      return this;\n    }\n    return this.techGet_('autoplay', value);\n  }\n\n  /**\n   * Get or set the loop attribute on the video element.\n   *\n   * @param {Boolean} value Boolean to determine if video should loop\n   * @return {String} The loop attribute value when getting\n   * @return {Player} Returns the player when setting\n   * @method loop\n   */\n  loop(value) {\n    if (value !== undefined) {\n      this.techCall_('setLoop', value);\n      this.options_['loop'] = value;\n      return this;\n    }\n    return this.techGet_('loop');\n  }\n\n  /**\n   * Get or set the poster image source url\n   *\n   * ##### EXAMPLE:\n   * ```js\n   *     // get\n   *     var currentPoster = myPlayer.poster();\n   *     // set\n   *     myPlayer.poster('http://example.com/myImage.jpg');\n   * ```\n   *\n   * @param  {String=} src Poster image source URL\n   * @return {String} poster URL when getting\n   * @return {Player} self when setting\n   * @method poster\n   */\n  poster(src) {\n    if (src === undefined) {\n      return this.poster_;\n    }\n\n    // The correct way to remove a poster is to set as an empty string\n    // other falsey values will throw errors\n    if (!src) {\n      src = '';\n    }\n\n    // update the internal poster variable\n    this.poster_ = src;\n\n    // update the tech's poster\n    this.techCall_('setPoster', src);\n\n    // alert components that the poster has been set\n    this.trigger('posterchange');\n\n    return this;\n  }\n\n  /**\n   * Some techs (e.g. YouTube) can provide a poster source in an\n   * asynchronous way. We want the poster component to use this\n   * poster source so that it covers up the tech's controls.\n   * (YouTube's play button). However we only want to use this\n   * soruce if the player user hasn't set a poster through\n   * the normal APIs.\n   *\n   * @private\n   * @method handleTechPosterChange_\n   */\n  handleTechPosterChange_() {\n    if (!this.poster_ && this.tech_ && this.tech_.poster) {\n      this.poster_ = this.tech_.poster() || '';\n\n      // Let components know the poster has changed\n      this.trigger('posterchange');\n    }\n  }\n\n  /**\n   * Get or set whether or not the controls are showing.\n   *\n   * @param  {Boolean} bool Set controls to showing or not\n   * @return {Boolean}    Controls are showing\n   * @method controls\n   */\n  controls(bool) {\n    if (bool !== undefined) {\n      bool = !!bool; // force boolean\n      // Don't trigger a change event unless it actually changed\n      if (this.controls_ !== bool) {\n        this.controls_ = bool;\n\n        if (this.usingNativeControls()) {\n          this.techCall_('setControls', bool);\n        }\n\n        if (bool) {\n          this.removeClass('vjs-controls-disabled');\n          this.addClass('vjs-controls-enabled');\n          this.trigger('controlsenabled');\n\n          if (!this.usingNativeControls()) {\n            this.addTechControlsListeners_();\n          }\n        } else {\n          this.removeClass('vjs-controls-enabled');\n          this.addClass('vjs-controls-disabled');\n          this.trigger('controlsdisabled');\n\n          if (!this.usingNativeControls()) {\n            this.removeTechControlsListeners_();\n          }\n        }\n      }\n      return this;\n    }\n    return !!this.controls_;\n  }\n\n  /**\n   * Toggle native controls on/off. Native controls are the controls built into\n   * devices (e.g. default iPhone controls), Flash, or other techs\n   * (e.g. Vimeo Controls)\n   * **This should only be set by the current tech, because only the tech knows\n   * if it can support native controls**\n   *\n   * @param  {Boolean} bool    True signals that native controls are on\n   * @return {Player}      Returns the player\n   * @private\n   * @method usingNativeControls\n   */\n  usingNativeControls(bool) {\n    if (bool !== undefined) {\n      bool = !!bool; // force boolean\n      // Don't trigger a change event unless it actually changed\n      if (this.usingNativeControls_ !== bool) {\n        this.usingNativeControls_ = bool;\n        if (bool) {\n          this.addClass('vjs-using-native-controls');\n\n          /**\n            * player is using the native device controls\n           *\n            * @event usingnativecontrols\n            * @memberof Player\n            * @instance\n            * @private\n            */\n          this.trigger('usingnativecontrols');\n        } else {\n          this.removeClass('vjs-using-native-controls');\n\n          /**\n            * player is using the custom HTML controls\n           *\n            * @event usingcustomcontrols\n            * @memberof Player\n            * @instance\n            * @private\n            */\n          this.trigger('usingcustomcontrols');\n        }\n      }\n      return this;\n    }\n    return !!this.usingNativeControls_;\n  }\n\n  /**\n   * Set or get the current MediaError\n   *\n   * @param  {*} err A MediaError or a String/Number to be turned into a MediaError\n   * @return {MediaError|null}     when getting\n   * @return {Player}              when setting\n   * @method error\n   */\n  error(err) {\n    if (err === undefined) {\n      return this.error_ || null;\n    }\n\n    // restoring to default\n    if (err === null) {\n      this.error_ = err;\n      this.removeClass('vjs-error');\n      this.errorDisplay.close();\n      return this;\n    }\n\n    // error instance\n    if (err instanceof MediaError) {\n      this.error_ = err;\n    } else {\n      this.error_ = new MediaError(err);\n    }\n\n    // add the vjs-error classname to the player\n    this.addClass('vjs-error');\n\n    // log the name of the error type and any message\n    // ie8 just logs \"[object object]\" if you just log the error object\n    log.error(`(CODE:${this.error_.code} ${MediaError.errorTypes[this.error_.code]})`, this.error_.message, this.error_);\n\n    // fire an error event on the player\n    this.trigger('error');\n\n    return this;\n  }\n\n  /**\n   * Returns whether or not the player is in the \"ended\" state.\n   *\n   * @return {Boolean} True if the player is in the ended state, false if not.\n   * @method ended\n   */\n  ended() { return this.techGet_('ended'); }\n\n  /**\n   * Returns whether or not the player is in the \"seeking\" state.\n   *\n   * @return {Boolean} True if the player is in the seeking state, false if not.\n   * @method seeking\n   */\n  seeking() { return this.techGet_('seeking'); }\n\n  /**\n   * Returns the TimeRanges of the media that are currently available\n   * for seeking to.\n   *\n   * @return {TimeRanges} the seekable intervals of the media timeline\n   * @method seekable\n   */\n  seekable() { return this.techGet_('seekable'); }\n\n  /**\n   * Report user activity\n   *\n   * @param {Object} event Event object\n   * @method reportUserActivity\n   */\n  reportUserActivity(event) {\n    this.userActivity_ = true;\n  }\n\n  /**\n   * Get/set if user is active\n   *\n   * @param {Boolean} bool Value when setting\n   * @return {Boolean} Value if user is active user when getting\n   * @method userActive\n   */\n  userActive(bool) {\n    if (bool !== undefined) {\n      bool = !!bool;\n      if (bool !== this.userActive_) {\n        this.userActive_ = bool;\n        if (bool) {\n          // If the user was inactive and is now active we want to reset the\n          // inactivity timer\n          this.userActivity_ = true;\n          this.removeClass('vjs-user-inactive');\n          this.addClass('vjs-user-active');\n          this.trigger('useractive');\n        } else {\n          // We're switching the state to inactive manually, so erase any other\n          // activity\n          this.userActivity_ = false;\n\n          // Chrome/Safari/IE have bugs where when you change the cursor it can\n          // trigger a mousemove event. This causes an issue when you're hiding\n          // the cursor when the user is inactive, and a mousemove signals user\n          // activity. Making it impossible to go into inactive mode. Specifically\n          // this happens in fullscreen when we really need to hide the cursor.\n          //\n          // When this gets resolved in ALL browsers it can be removed\n          // https://code.google.com/p/chromium/issues/detail?id=103041\n          if(this.tech_) {\n            this.tech_.one('mousemove', function(e){\n              e.stopPropagation();\n              e.preventDefault();\n            });\n          }\n\n          this.removeClass('vjs-user-active');\n          this.addClass('vjs-user-inactive');\n          this.trigger('userinactive');\n        }\n      }\n      return this;\n    }\n    return this.userActive_;\n  }\n\n  /**\n   * Listen for user activity based on timeout value\n   *\n   * @private\n   * @method listenForUserActivity_\n   */\n  listenForUserActivity_() {\n    let mouseInProgress, lastMoveX, lastMoveY;\n\n    let handleActivity = Fn.bind(this, this.reportUserActivity);\n\n    let handleMouseMove = function(e) {\n      // #1068 - Prevent mousemove spamming\n      // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970\n      if(e.screenX !== lastMoveX || e.screenY !== lastMoveY) {\n        lastMoveX = e.screenX;\n        lastMoveY = e.screenY;\n        handleActivity();\n      }\n    };\n\n    let handleMouseDown = function() {\n      handleActivity();\n      // For as long as the they are touching the device or have their mouse down,\n      // we consider them active even if they're not moving their finger or mouse.\n      // So we want to continue to update that they are active\n      this.clearInterval(mouseInProgress);\n      // Setting userActivity=true now and setting the interval to the same time\n      // as the activityCheck interval (250) should ensure we never miss the\n      // next activityCheck\n      mouseInProgress = this.setInterval(handleActivity, 250);\n    };\n\n    let handleMouseUp = function(event) {\n      handleActivity();\n      // Stop the interval that maintains activity if the mouse/touch is down\n      this.clearInterval(mouseInProgress);\n    };\n\n    // Any mouse movement will be considered user activity\n    this.on('mousedown', handleMouseDown);\n    this.on('mousemove', handleMouseMove);\n    this.on('mouseup', handleMouseUp);\n\n    // Listen for keyboard navigation\n    // Shouldn't need to use inProgress interval because of key repeat\n    this.on('keydown', handleActivity);\n    this.on('keyup', handleActivity);\n\n    // Run an interval every 250 milliseconds instead of stuffing everything into\n    // the mousemove/touchmove function itself, to prevent performance degradation.\n    // `this.reportUserActivity` simply sets this.userActivity_ to true, which\n    // then gets picked up by this loop\n    // http://ejohn.org/blog/learning-from-twitter/\n    let inactivityTimeout;\n    let activityCheck = this.setInterval(function() {\n      // Check to see if mouse/touch activity has happened\n      if (this.userActivity_) {\n        // Reset the activity tracker\n        this.userActivity_ = false;\n\n        // If the user state was inactive, set the state to active\n        this.userActive(true);\n\n        // Clear any existing inactivity timeout to start the timer over\n        this.clearTimeout(inactivityTimeout);\n\n        var timeout = this.options_['inactivityTimeout'];\n        if (timeout > 0) {\n          // In <timeout> milliseconds, if no more activity has occurred the\n          // user will be considered inactive\n          inactivityTimeout = this.setTimeout(function () {\n            // Protect against the case where the inactivityTimeout can trigger just\n            // before the next user activity is picked up by the activityCheck loop\n            // causing a flicker\n            if (!this.userActivity_) {\n                this.userActive(false);\n            }\n          }, timeout);\n        }\n      }\n    }, 250);\n  }\n\n  /**\n   * Gets or sets the current playback rate.  A playback rate of\n   * 1.0 represents normal speed and 0.5 would indicate half-speed\n   * playback, for instance.\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n   *\n   * @param  {Number} rate    New playback rate to set.\n   * @return {Number}         Returns the new playback rate when setting\n   * @return {Number}         Returns the current playback rate when getting\n   * @method playbackRate\n   */\n  playbackRate(rate) {\n    if (rate !== undefined) {\n      this.techCall_('setPlaybackRate', rate);\n      return this;\n    }\n\n    if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n      return this.techGet_('playbackRate');\n    } else {\n      return 1.0;\n    }\n  }\n\n  /**\n   * Gets or sets the audio flag\n   *\n   * @param  {Boolean} bool    True signals that this is an audio player.\n   * @return {Boolean}         Returns true if player is audio, false if not when getting\n   * @return {Player}      Returns the player if setting\n   * @private\n   * @method isAudio\n   */\n  isAudio(bool) {\n    if (bool !== undefined) {\n      this.isAudio_ = !!bool;\n      return this;\n    }\n\n    return !!this.isAudio_;\n  }\n\n  /**\n   * Returns the current state of network activity for the element, from\n   * the codes in the list below.\n   * - NETWORK_EMPTY (numeric value 0)\n   *   The element has not yet been initialised. All attributes are in\n   *   their initial states.\n   * - NETWORK_IDLE (numeric value 1)\n   *   The element's resource selection algorithm is active and has\n   *   selected a resource, but it is not actually using the network at\n   *   this time.\n   * - NETWORK_LOADING (numeric value 2)\n   *   The user agent is actively trying to download data.\n   * - NETWORK_NO_SOURCE (numeric value 3)\n   *   The element's resource selection algorithm is active, but it has\n   *   not yet found a resource to use.\n   *\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n   * @return {Number} the current network activity state\n   * @method networkState\n   */\n  networkState() {\n    return this.techGet_('networkState');\n  }\n\n  /**\n   * Returns a value that expresses the current state of the element\n   * with respect to rendering the current playback position, from the\n   * codes in the list below.\n   * - HAVE_NOTHING (numeric value 0)\n   *   No information regarding the media resource is available.\n   * - HAVE_METADATA (numeric value 1)\n   *   Enough of the resource has been obtained that the duration of the\n   *   resource is available.\n   * - HAVE_CURRENT_DATA (numeric value 2)\n   *   Data for the immediate current playback position is available.\n   * - HAVE_FUTURE_DATA (numeric value 3)\n   *   Data for the immediate current playback position is available, as\n   *   well as enough data for the user agent to advance the current\n   *   playback position in the direction of playback.\n   * - HAVE_ENOUGH_DATA (numeric value 4)\n   *   The user agent estimates that enough data is available for\n   *   playback to proceed uninterrupted.\n   *\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n   * @return {Number} the current playback rendering state\n   * @method readyState\n   */\n  readyState() {\n    return this.techGet_('readyState');\n  }\n\n  /**\n   * Text tracks are tracks of timed text events.\n   * Captions - text displayed over the video for the hearing impaired\n   * Subtitles - text displayed over the video for those who don't understand language in the video\n   * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n   * Descriptions - audio descriptions that are read back to the user by a screen reading device\n   */\n\n  /**\n   * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n   *\n   * @return {Array}           Array of track objects\n   * @method textTracks\n   */\n  textTracks() {\n    // cannot use techGet_ directly because it checks to see whether the tech is ready.\n    // Flash is unlikely to be ready in time but textTracks should still work.\n    return this.tech_ && this.tech_['textTracks']();\n  }\n\n  /**\n   * Get an array of remote text tracks\n   *\n   * @return {Array}\n   * @method remoteTextTracks\n   */\n  remoteTextTracks() {\n    return this.tech_ && this.tech_['remoteTextTracks']();\n  }\n\n  /**\n   * Get an array of remote html track elements\n   *\n   * @return {HTMLTrackElement[]}\n   * @method remoteTextTrackEls\n   */\n  remoteTextTrackEls() {\n    return this.tech_ && this.tech_['remoteTextTrackEls']();\n  }\n\n  /**\n   * Add a text track\n   * In addition to the W3C settings we allow adding additional info through options.\n   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n   *\n   * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata\n   * @param {String=} label       Optional label\n   * @param {String=} language    Optional language\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n  }\n\n  /**\n   * Add a remote text track\n   *\n   * @param {Object} options    Options for remote text track\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options) {\n    return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n  }\n\n  /**\n   * Remove a remote text track\n   *\n   * @param {Object} track    Remote text track to remove\n   * @method removeRemoteTextTrack\n   */\n  // destructure the input into an object with a track argument, defaulting to arguments[0]\n  // default the whole argument to an empty object if nothing was passed in\n  removeRemoteTextTrack({track = arguments[0]} = {}) { // jshint ignore:line\n    this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n  }\n\n  /**\n   * Get video width\n   *\n   * @return {Number} Video width\n   * @method videoWidth\n   */\n  videoWidth() {\n    return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n  }\n\n  /**\n   * Get video height\n   *\n   * @return {Number} Video height\n   * @method videoHeight\n   */\n  videoHeight() {\n    return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n  }\n\n  // Methods to add support for\n  // initialTime: function(){ return this.techCall_('initialTime'); },\n  // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n  // played: function(){ return this.techCall_('played'); },\n  // videoTracks: function(){ return this.techCall_('videoTracks'); },\n  // audioTracks: function(){ return this.techCall_('audioTracks'); },\n  // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n  // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n  /**\n   * The player's language code\n   * NOTE: The language should be set in the player options if you want the\n   * the controls to be built with a specific language. Changing the lanugage\n   * later will not update controls text.\n   *\n   * @param {String} code  The locale string\n   * @return {String}      The locale string when getting\n   * @return {Player}      self when setting\n   * @method language\n   */\n  language(code) {\n    if (code === undefined) {\n      return this.language_;\n    }\n\n    this.language_ = (''+code).toLowerCase();\n    return this;\n  }\n\n  /**\n   * Get the player's language dictionary\n   * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n   * Languages specified directly in the player options have precedence\n   *\n   * @return {Array} Array of languages\n   * @method languages\n   */\n  languages() {\n    return  mergeOptions(Player.prototype.options_.languages, this.languages_);\n  }\n\n  /**\n   * Converts track info to JSON\n   *\n   * @return {Object} JSON object of options\n   * @method toJSON\n   */\n  toJSON() {\n    let options = mergeOptions(this.options_);\n    let tracks = options.tracks;\n\n    options.tracks = [];\n\n    for (let i = 0; i < tracks.length; i++) {\n      let track = tracks[i];\n\n      // deep merge tracks and null out player so no circular references\n      track = mergeOptions(track);\n      track.player = undefined;\n      options.tracks[i] = track;\n    }\n\n    return options;\n  }\n\n  /**\n   * Creates a simple modal dialog (an instance of the `ModalDialog`\n   * component) that immediately overlays the player with arbitrary\n   * content and removes itself when closed.\n   *\n   * @param {String|Function|Element|Array|Null} content\n   *        Same as `ModalDialog#content`'s param of the same name.\n   *\n   *        The most straight-forward usage is to provide a string or DOM\n   *        element.\n   *\n   * @param {Object} [options]\n   *        Extra options which will be passed on to the `ModalDialog`.\n   *\n   * @return {ModalDialog}\n   */\n  createModal(content, options) {\n    let player = this;\n\n    options = options || {};\n    options.content = content || '';\n\n    let modal = new ModalDialog(player, options);\n\n    player.addChild(modal);\n    modal.on('dispose', function() {\n      player.removeChild(modal);\n    });\n\n    return modal.open();\n  }\n\n  /**\n   * Gets tag settings\n   *\n   * @param {Element} tag The player tag\n   * @return {Array} An array of sources and track objects\n   * @static\n   * @method getTagSettings\n   */\n  static getTagSettings(tag) {\n    let baseOptions = {\n      'sources': [],\n      'tracks': []\n    };\n\n    const tagOptions = Dom.getElAttributes(tag);\n    const dataSetup = tagOptions['data-setup'];\n\n    // Check if data-setup attr exists.\n    if (dataSetup !== null){\n      // Parse options JSON\n      // If empty string, make it a parsable json object.\n      const [err, data] = safeParseTuple(dataSetup || '{}');\n      if (err) {\n        log.error(err);\n      }\n      assign(tagOptions, data);\n    }\n\n    assign(baseOptions, tagOptions);\n\n    // Get tag children settings\n    if (tag.hasChildNodes()) {\n      const children = tag.childNodes;\n\n      for (let i=0, j=children.length; i<j; i++) {\n        const child = children[i];\n        // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/\n        const childName = child.nodeName.toLowerCase();\n        if (childName === 'source') {\n          baseOptions.sources.push(Dom.getElAttributes(child));\n        } else if (childName === 'track') {\n          baseOptions.tracks.push(Dom.getElAttributes(child));\n        }\n      }\n    }\n\n    return baseOptions;\n  }\n\n}\n\n/*\n * Global player list\n *\n * @type {Object}\n */\nPlayer.players = {};\n\nlet navigator = window.navigator;\n/*\n * Player instance options, surfaced using options\n * options = Player.prototype.options_\n * Make changes in options, not here.\n *\n * @type {Object}\n * @private\n */\nPlayer.prototype.options_ = {\n  // Default order of fallback technology\n  techOrder: ['html5','flash'],\n  // techOrder: ['flash','html5'],\n\n  html5: {},\n  flash: {},\n\n  // defaultVolume: 0.85,\n  defaultVolume: 0.00, // The freakin seaguls are driving me crazy!\n\n  // default inactivity timeout\n  inactivityTimeout: 2000,\n\n  // default playback rates\n  playbackRates: [],\n  // Add playback rate selection by adding rates\n  // 'playbackRates': [0.5, 1, 1.5, 2],\n\n  // Included control sets\n  children: [\n    'mediaLoader',\n    'posterImage',\n    'textTrackDisplay',\n    'loadingSpinner',\n    'bigPlayButton',\n    'controlBar',\n    'errorDisplay',\n    'textTrackSettings'\n  ],\n\n  language: document.getElementsByTagName('html')[0].getAttribute('lang') || navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language || 'en',\n\n  // locales and their language translations\n  languages: {},\n\n  // Default message to show when a video cannot be played.\n  notSupportedMessage: 'No compatible source was found for this media.'\n};\n\n/**\n * Fired when the player has initial duration and dimension information\n *\n * @event loadedmetadata\n */\nPlayer.prototype.handleLoadedMetaData_;\n\n/**\n * Fired when the player has downloaded data at the current playback position\n *\n * @event loadeddata\n */\nPlayer.prototype.handleLoadedData_;\n\n/**\n * Fired when the user is active, e.g. moves the mouse over the player\n *\n * @event useractive\n */\nPlayer.prototype.handleUserActive_;\n\n/**\n * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction\n *\n * @event userinactive\n */\nPlayer.prototype.handleUserInactive_;\n\n/**\n * Fired when the current playback position has changed *\n * During playback this is fired every 15-250 milliseconds, depending on the\n * playback technology in use.\n *\n * @event timeupdate\n */\nPlayer.prototype.handleTimeUpdate_;\n\n/**\n * Fired when video playback ends\n *\n * @event ended\n */\nPlayer.prototype.handleTechEnded_;\n\n/**\n * Fired when the volume changes\n *\n * @event volumechange\n */\nPlayer.prototype.handleVolumeChange_;\n\n/**\n * Fired when an error occurs\n *\n * @event error\n */\nPlayer.prototype.handleError_;\n\nPlayer.prototype.flexNotSupported_ = function() {\n  var elem = document.createElement('i');\n\n  // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more\n  // common flex features that we can rely on when checking for flex support.\n  return !('flexBasis' in elem.style ||\n          'webkitFlexBasis' in elem.style ||\n          'mozFlexBasis' in elem.style ||\n          'msFlexBasis' in elem.style ||\n          'msFlexOrder' in elem.style /* IE10-specific (2012 flex spec)  */);\n};\n\nComponent.registerComponent('Player', Player);\nexport default Player;\n","/**\n * @file plugins.js\n */\nimport Player from './player.js';\n\n/**\n * The method for registering a video.js plugin\n *\n * @param  {String} name The name of the plugin\n * @param  {Function} init The function that is run when the player inits\n * @method plugin\n */\nvar plugin = function(name, init){\n  Player.prototype[name] = init;\n};\n\nexport default plugin;\n","/**\n * @file popup-button.js\n */\nimport ClickableComponent from '../clickable-component.js';\nimport Component from '../component.js';\nimport Popup from './popup.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * A button class with a popup control\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends ClickableComponent\n * @class PopupButton\n */\nclass PopupButton extends ClickableComponent {\n\n  constructor(player, options={}){\n    super(player, options);\n\n    this.update();\n  }\n\n  /**\n   * Update popup\n   *\n   * @method update\n   */\n  update() {\n    let popup = this.createPopup();\n\n    if (this.popup) {\n      this.removeChild(this.popup);\n    }\n\n    this.popup = popup;\n    this.addChild(popup);\n\n    if (this.items && this.items.length === 0) {\n      this.hide();\n    } else if (this.items && this.items.length > 1) {\n      this.show();\n    }\n  }\n\n  /**\n   * Create popup - Override with specific functionality for component\n   *\n   * @return {Popup} The constructed popup\n   * @method createPopup\n   */\n  createPopup() {}\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: this.buildCSSClass()\n    });\n  }\n\n  /**\n   * Allow sub components to stack CSS class names\n   *\n   * @return {String} The constructed class name\n   * @method buildCSSClass\n   */\n  buildCSSClass() {\n    var menuButtonClass = 'vjs-menu-button';\n\n    // If the inline option is passed, we want to use different styles altogether.\n    if (this.options_.inline === true) {\n      menuButtonClass += '-inline';\n    } else {\n      menuButtonClass += '-popup';\n    }\n\n    return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n  }\n\n}\n\nComponent.registerComponent('PopupButton', PopupButton);\nexport default PopupButton;\n","/**\n * @file popup.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Popup component is used to build pop up controls.\n *\n * @extends Component\n * @class Popup\n */\nclass Popup extends Component {\n\n  /**\n   * Add a popup item to the popup\n   *\n   * @param {Object|String} component Component or component type to add\n   * @method addItem\n   */\n  addItem(component) {\n    this.addChild(component);\n    component.on('click', Fn.bind(this, function(){\n      this.unlockShowing();\n    }));\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let contentElType = this.options_.contentElType || 'ul';\n    this.contentEl_ = Dom.createEl(contentElType, {\n      className: 'vjs-menu-content'\n    });\n    var el = super.createEl('div', {\n      append: this.contentEl_,\n      className: 'vjs-menu'\n    });\n    el.appendChild(this.contentEl_);\n\n    // Prevent clicks from bubbling up. Needed for Popup Buttons,\n    // where a click on the parent is significant\n    Events.on(el, 'click', function(event){\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    });\n\n    return el;\n  }\n}\n\nComponent.registerComponent('Popup', Popup);\nexport default Popup;\n","/**\n * @file poster-image.js\n */\nimport ClickableComponent from './clickable-component.js';\nimport Component from './component.js';\nimport * as Fn from './utils/fn.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\n\n/**\n * The component that handles showing the poster image.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PosterImage\n */\nclass PosterImage extends ClickableComponent {\n\n  constructor(player, options){\n    super(player, options);\n\n    this.update();\n    player.on('posterchange', Fn.bind(this, this.update));\n  }\n\n  /**\n   * Clean up the poster image\n   *\n   * @method dispose\n   */\n  dispose() {\n    this.player().off('posterchange', this.update);\n    super.dispose();\n  }\n\n  /**\n   * Create the poster's image element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = Dom.createEl('div', {\n      className: 'vjs-poster',\n\n      // Don't want poster to be tabbable.\n      tabIndex: -1\n    });\n\n    // To ensure the poster image resizes while maintaining its original aspect\n    // ratio, use a div with `background-size` when available. For browsers that\n    // do not support `background-size` (e.g. IE8), fall back on using a regular\n    // img element.\n    if (!browser.BACKGROUND_SIZE_SUPPORTED) {\n      this.fallbackImg_ = Dom.createEl('img');\n      el.appendChild(this.fallbackImg_);\n    }\n\n    return el;\n  }\n\n  /**\n   * Event handler for updates to the player's poster source\n   *\n   * @method update\n   */\n  update() {\n    let url = this.player().poster();\n\n    this.setSrc(url);\n\n    // If there's no poster source we should display:none on this component\n    // so it's not still clickable or right-clickable\n    if (url) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Set the poster source depending on the display method\n   *\n   * @param {String} url The URL to the poster source\n   * @method setSrc\n   */\n  setSrc(url) {\n    if (this.fallbackImg_) {\n      this.fallbackImg_.src = url;\n    } else {\n      let backgroundImage = '';\n      // Any falsey values should stay as an empty string, otherwise\n      // this will throw an extra error\n      if (url) {\n        backgroundImage = `url(\"${url}\")`;\n      }\n\n      this.el_.style.backgroundImage = backgroundImage;\n    }\n  }\n\n  /**\n   * Event handler for clicks on the poster image\n   *\n   * @method handleClick\n   */\n  handleClick() {\n    // We don't want a click to trigger playback when controls are disabled\n    // but CSS should be hiding the poster to prevent that from happening\n    if (this.player_.paused()) {\n      this.player_.play();\n    } else {\n      this.player_.pause();\n    }\n  }\n\n}\n\nComponent.registerComponent('PosterImage', PosterImage);\nexport default PosterImage;\n","/**\n * @file setup.js\n *\n * Functions for automatically setting up a player\n * based on the data-setup attribute of the video tag\n */\nimport * as Events from './utils/events.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nlet _windowLoaded = false;\nlet videojs;\n\n\n// Automatically set up any tags that have a data-setup attribute\nvar autoSetup = function(){\n  // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*\n  // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));\n  // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));\n  // var mediaEls = vids.concat(audios);\n\n  // Because IE8 doesn't support calling slice on a node list, we need to loop through each list of elements\n  // to build up a new, combined list of elements.\n  var vids = document.getElementsByTagName('video');\n  var audios = document.getElementsByTagName('audio');\n  var mediaEls = [];\n  if (vids && vids.length > 0) {\n    for(let i=0, e=vids.length; i<e; i++) {\n      mediaEls.push(vids[i]);\n    }\n  }\n  if (audios && audios.length > 0) {\n    for(let i=0, e=audios.length; i<e; i++) {\n      mediaEls.push(audios[i]);\n    }\n  }\n\n  // Check if any media elements exist\n  if (mediaEls && mediaEls.length > 0) {\n\n    for (let i=0, e=mediaEls.length; i<e; i++) {\n      let mediaEl = mediaEls[i];\n\n      // Check if element exists, has getAttribute func.\n      // IE seems to consider typeof el.getAttribute == 'object' instead of 'function' like expected, at least when loading the player immediately.\n      if (mediaEl && mediaEl.getAttribute) {\n\n        // Make sure this player hasn't already been set up.\n        if (mediaEl['player'] === undefined) {\n          let options = mediaEl.getAttribute('data-setup');\n\n          // Check if data-setup attr exists.\n          // We only auto-setup if they've added the data-setup attr.\n          if (options !== null) {\n            // Create new video.js instance.\n            let player = videojs(mediaEl);\n          }\n        }\n\n      // If getAttribute isn't defined, we need to wait for the DOM.\n      } else {\n        autoSetupTimeout(1);\n        break;\n      }\n    }\n\n  // No videos were found, so keep looping unless page is finished loading.\n  } else if (!_windowLoaded) {\n    autoSetupTimeout(1);\n  }\n};\n\n// Pause to let the DOM keep processing\nvar autoSetupTimeout = function(wait, vjs){\n  if (vjs) {\n    videojs = vjs;\n  }\n\n  setTimeout(autoSetup, wait);\n};\n\nif (document.readyState === 'complete') {\n  _windowLoaded = true;\n} else {\n  Events.one(window, 'load', function(){\n    _windowLoaded = true;\n  });\n}\n\nvar hasLoaded = function() {\n  return _windowLoaded;\n};\n\nexport { autoSetup, autoSetupTimeout, hasLoaded };\n","/**\n * @file slider.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport assign from 'object.assign';\n\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class Slider\n */\nclass Slider extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n\n    // Set property names to bar to match with the child Slider class is looking for\n    this.bar = this.getChild(this.options_.barName);\n\n    // Set a horizontal or vertical class on the slider depending on the slider type\n    this.vertical(!!this.options_.vertical);\n\n    this.on('mousedown', this.handleMouseDown);\n    this.on('touchstart', this.handleMouseDown);\n    this.on('focus', this.handleFocus);\n    this.on('blur', this.handleBlur);\n    this.on('click', this.handleClick);\n\n    this.on(player, 'controlsvisible', this.update);\n    this.on(player, this.playerEvent, this.update);\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @param {String} type Type of element to create\n   * @param {Object=} props List of properties in Object form\n   * @return {Element}\n   * @method createEl\n   */\n  createEl(type, props={}, attributes={}) {\n    // Add the slider element class to all sub classes\n    props.className = props.className + ' vjs-slider';\n    props = assign({\n      tabIndex: 0\n    }, props);\n\n    attributes = assign({\n      'role': 'slider',\n      'aria-valuenow': 0,\n      'aria-valuemin': 0,\n      'aria-valuemax': 100,\n      tabIndex: 0\n    }, attributes);\n\n    return super.createEl(type, props, attributes);\n  }\n\n  /**\n   * Handle mouse down on slider\n   *\n   * @param {Object} event Mouse down event object\n   * @method handleMouseDown\n   */\n  handleMouseDown(event) {\n    let doc = this.bar.el_.ownerDocument;\n\n    event.preventDefault();\n    Dom.blockTextSelection();\n\n    this.addClass('vjs-sliding');\n    this.trigger('slideractive');\n\n    this.on(doc, 'mousemove', this.handleMouseMove);\n    this.on(doc, 'mouseup', this.handleMouseUp);\n    this.on(doc, 'touchmove', this.handleMouseMove);\n    this.on(doc, 'touchend', this.handleMouseUp);\n\n    this.handleMouseMove(event);\n  }\n\n  /**\n   * To be overridden by a subclass\n   *\n   * @method handleMouseMove\n   */\n  handleMouseMove() {}\n\n  /**\n   * Handle mouse up on Slider\n   *\n   * @method handleMouseUp\n   */\n  handleMouseUp() {\n    let doc = this.bar.el_.ownerDocument;\n\n    Dom.unblockTextSelection();\n\n    this.removeClass('vjs-sliding');\n    this.trigger('sliderinactive');\n\n    this.off(doc, 'mousemove', this.handleMouseMove);\n    this.off(doc, 'mouseup', this.handleMouseUp);\n    this.off(doc, 'touchmove', this.handleMouseMove);\n    this.off(doc, 'touchend', this.handleMouseUp);\n\n    this.update();\n  }\n\n  /**\n   * Update slider\n   *\n   * @method update\n   */\n  update() {\n    // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n    // execution stack. The player is destroyed before then update will cause an error\n    if (!this.el_) return;\n\n    // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n    // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n    // var progress =  (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n    let progress = this.getPercent();\n    let bar = this.bar;\n\n    // If there's no bar...\n    if (!bar) return;\n\n    // Protect against no duration and other division issues\n    if (typeof progress !== 'number' ||\n        progress !== progress ||\n        progress < 0 ||\n        progress === Infinity) {\n          progress = 0;\n    }\n\n    // Convert to a percentage for setting\n    let percentage = (progress * 100).toFixed(2) + '%';\n\n    // Set the new bar width or height\n    if (this.vertical()) {\n      bar.el().style.height = percentage;\n    } else {\n      bar.el().style.width = percentage;\n    }\n  }\n\n  /**\n   * Calculate distance for slider\n   *\n   * @param {Object} event Event object\n   * @method calculateDistance\n   */\n  calculateDistance(event){\n    let position = Dom.getPointerPosition(this.el_, event);\n    if (this.vertical()) {\n      return position.y;\n    }\n    return position.x;\n  }\n\n  /**\n   * Handle on focus for slider\n   *\n   * @method handleFocus\n   */\n  handleFocus() {\n    this.on(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);\n  }\n\n  /**\n   * Handle key press for slider\n   *\n   * @param {Object} event Event object\n   * @method handleKeyPress\n   */\n  handleKeyPress(event) {\n    if (event.which === 37 || event.which === 40) { // Left and Down Arrows\n      event.preventDefault();\n      this.stepBack();\n    } else if (event.which === 38 || event.which === 39) { // Up and Right Arrows\n      event.preventDefault();\n      this.stepForward();\n    }\n  }\n\n  /**\n   * Handle on blur for slider\n   *\n   * @method handleBlur\n   */\n  handleBlur() {\n    this.off(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);\n  }\n\n  /**\n   * Listener for click events on slider, used to prevent clicks\n   *   from bubbling up to parent elements like button menus.\n   *\n   * @param {Object} event Event object\n   * @method handleClick\n   */\n  handleClick(event) {\n    event.stopImmediatePropagation();\n    event.preventDefault();\n  }\n\n  /**\n   * Get/set if slider is horizontal for vertical\n   *\n   * @param {Boolean} bool True if slider is vertical, false is horizontal\n   * @return {Boolean} True if slider is vertical, false is horizontal\n   * @method vertical\n   */\n  vertical(bool) {\n    if (bool === undefined) {\n      return this.vertical_ || false;\n    }\n\n    this.vertical_ = !!bool;\n\n    if (this.vertical_) {\n      this.addClass('vjs-slider-vertical');\n    } else {\n      this.addClass('vjs-slider-horizontal');\n    }\n\n    return this;\n  }\n\n}\n\nComponent.registerComponent('Slider', Slider);\nexport default Slider;\n","/**\n * @file flash-rtmp.js\n */\nfunction FlashRtmpDecorator(Flash) {\n  Flash.streamingFormats = {\n    'rtmp/mp4': 'MP4',\n    'rtmp/flv': 'FLV'\n  };\n\n  Flash.streamFromParts = function(connection, stream) {\n    return connection + '&' + stream;\n  };\n\n  Flash.streamToParts = function(src) {\n    let parts = {\n      connection: '',\n      stream: ''\n    };\n\n    if (!src) return parts;\n\n    // Look for the normal URL separator we expect, '&'.\n    // If found, we split the URL into two pieces around the\n    // first '&'.\n    let connEnd = src.search(/&(?!\\w+=)/);\n    let streamBegin;\n    if (connEnd !== -1) {\n      streamBegin = connEnd + 1;\n    }\n    else {\n      // If there's not a '&', we use the last '/' as the delimiter.\n      connEnd = streamBegin = src.lastIndexOf('/') + 1;\n      if (connEnd === 0) {\n        // really, there's not a '/'?\n        connEnd = streamBegin = src.length;\n      }\n    }\n    parts.connection = src.substring(0, connEnd);\n    parts.stream = src.substring(streamBegin, src.length);\n\n    return parts;\n  };\n\n  Flash.isStreamingType = function(srcType) {\n    return srcType in Flash.streamingFormats;\n  };\n\n  // RTMP has four variations, any string starting\n  // with one of these protocols should be valid\n  Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\n  Flash.isStreamingSrc = function(src) {\n    return Flash.RTMP_RE.test(src);\n  };\n\n  /**\n   * A source handler for RTMP urls\n   * @type {Object}\n   */\n  Flash.rtmpSourceHandler = {};\n\n  /**\n   * Check if Flash can play the given videotype\n   * @param  {String} type    The mimetype to check\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  Flash.rtmpSourceHandler.canPlayType = function(type){\n    if (Flash.isStreamingType(type)) {\n      return 'maybe';\n    }\n\n    return '';\n  };\n\n  /**\n   * Check if Flash can handle the source natively\n   * @param  {Object} source  The source object\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  Flash.rtmpSourceHandler.canHandleSource = function(source){\n    let can = Flash.rtmpSourceHandler.canPlayType(source.type);\n\n    if (can) {\n      return can;\n    }\n\n    if (Flash.isStreamingSrc(source.src)) {\n      return 'maybe';\n    }\n\n    return '';\n  };\n\n  /**\n   * Pass the source to the flash object\n   * Adaptive source handlers will have more complicated workflows before passing\n   * video data to the video element\n   * @param  {Object} source    The source object\n   * @param  {Flash} tech   The instance of the Flash tech\n   */\n  Flash.rtmpSourceHandler.handleSource = function(source, tech){\n    let srcParts = Flash.streamToParts(source.src);\n\n    tech['setRtmpConnection'](srcParts.connection);\n    tech['setRtmpStream'](srcParts.stream);\n  };\n\n  // Register the native source handler\n  Flash.registerSourceHandler(Flash.rtmpSourceHandler);\n\n  return Flash;\n}\n\nexport default FlashRtmpDecorator;\n","/**\n * @file flash.js\n * VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\nimport Tech from './tech';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport { createTimeRange } from '../utils/time-ranges.js';\nimport FlashRtmpDecorator from './flash-rtmp';\nimport Component from '../component';\nimport window from 'global/window';\nimport assign from 'object.assign';\n\nlet navigator = window.navigator;\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Flash\n */\nclass Flash extends Tech {\n\n  constructor(options, ready){\n    super(options, ready);\n\n    // Set the source when ready\n    if (options.source) {\n      this.ready(function(){\n        this.setSource(options.source);\n      }, true);\n    }\n\n    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n    // This allows resetting the playhead when we catch the reload\n    if (options.startTime) {\n      this.ready(function(){\n        this.load();\n        this.play();\n        this.currentTime(options.startTime);\n      }, true);\n    }\n\n    // Add global window functions that the swf expects\n    // A 4.x workflow we weren't able to solve for in 5.0\n    // because of the need to hard code these functions\n    // into the swf for security reasons\n    window.videojs = window.videojs || {};\n    window.videojs.Flash = window.videojs.Flash || {};\n    window.videojs.Flash.onReady = Flash.onReady;\n    window.videojs.Flash.onEvent = Flash.onEvent;\n    window.videojs.Flash.onError = Flash.onError;\n\n    this.on('seeked', function() {\n      this.lastSeekTarget_ = undefined;\n    });\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let options = this.options_;\n\n    // If video.js is hosted locally you should also set the location\n    // for the hosted swf, which should be relative to the page (not video.js)\n    // Otherwise this adds a CDN url.\n    // The CDN also auto-adds a swf URL for that specific version.\n    if (!options.swf) {\n      options.swf = '//vjs.zencdn.net/swf/__SWF_VERSION__/video-js.swf';\n    }\n\n    // Generate ID for swf object\n    let objId = options.techId;\n\n    // Merge default flashvars with ones passed in to init\n    let flashVars = assign({\n\n      // SWF Callback Functions\n      'readyFunction': 'videojs.Flash.onReady',\n      'eventProxyFunction': 'videojs.Flash.onEvent',\n      'errorEventProxyFunction': 'videojs.Flash.onError',\n\n      // Player Settings\n      'autoplay': options.autoplay,\n      'preload': options.preload,\n      'loop': options.loop,\n      'muted': options.muted\n\n    }, options.flashVars);\n\n    // Merge default parames with ones passed in\n    let params = assign({\n      'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n      'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n    }, options.params);\n\n    // Merge default attributes with ones passed in\n    let attributes = assign({\n      'id': objId,\n      'name': objId, // Both ID and Name needed or swf to identify itself\n      'class': 'vjs-tech'\n    }, options.attributes);\n\n    this.el_ = Flash.embed(options.swf, flashVars, params, attributes);\n    this.el_.tech = this;\n\n    return this.el_;\n  }\n\n  /**\n   * Play for flash tech\n   *\n   * @method play\n   */\n  play() {\n    if (this.ended()) {\n      this.setCurrentTime(0);\n    }\n    this.el_.vjs_play();\n  }\n\n  /**\n   * Pause for flash tech\n   *\n   * @method pause\n   */\n  pause() {\n    this.el_.vjs_pause();\n  }\n\n  /**\n   * Get/set video\n   *\n   * @param {Object=} src Source object\n   * @return {Object}\n   * @method src\n   */\n  src(src) {\n    if (src === undefined) {\n      return this.currentSrc();\n    }\n\n    // Setting src through `src` not `setSrc` will be deprecated\n    return this.setSrc(src);\n  }\n\n  /**\n   * Set video\n   *\n   * @param {Object=} src Source object\n   * @deprecated\n   * @method setSrc\n   */\n  setSrc(src) {\n    // Make sure source URL is absolute.\n    src = Url.getAbsoluteURL(src);\n    this.el_.vjs_src(src);\n\n    // Currently the SWF doesn't autoplay if you load a source later.\n    // e.g. Load player w/ no source, wait 2s, set src.\n    if (this.autoplay()) {\n      var tech = this;\n      this.setTimeout(function(){ tech.play(); }, 0);\n    }\n  }\n\n  /**\n   * Returns true if the tech is currently seeking.\n   * @return {boolean} true if seeking\n   */\n  seeking() {\n    return this.lastSeekTarget_ !== undefined;\n  }\n\n  /**\n   * Set current time\n   *\n   * @param {Number} time Current time of video\n   * @method setCurrentTime\n   */\n  setCurrentTime(time) {\n    let seekable = this.seekable();\n    if (seekable.length) {\n      // clamp to the current seekable range\n      time = time > seekable.start(0) ? time : seekable.start(0);\n      time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n      this.lastSeekTarget_ = time;\n      this.trigger('seeking');\n      this.el_.vjs_setProperty('currentTime', time);\n      super.setCurrentTime();\n    }\n  }\n\n  /**\n   * Get current time\n   *\n   * @param {Number=} time Current time of video\n   * @return {Number} Current time\n   * @method currentTime\n   */\n  currentTime(time) {\n    // when seeking make the reported time keep up with the requested time\n    // by reading the time we're seeking to\n    if (this.seeking()) {\n      return this.lastSeekTarget_ || 0;\n    }\n    return this.el_.vjs_getProperty('currentTime');\n  }\n\n  /**\n   * Get current source\n   *\n   * @method currentSrc\n   */\n  currentSrc() {\n    if (this.currentSource_) {\n      return this.currentSource_.src;\n    } else {\n      return this.el_.vjs_getProperty('currentSrc');\n    }\n  }\n\n  /**\n   * Load media into player\n   *\n   * @method load\n   */\n  load() {\n    this.el_.vjs_load();\n  }\n\n  /**\n   * Get poster\n   *\n   * @method poster\n   */\n  poster() {\n    this.el_.vjs_getProperty('poster');\n  }\n\n  /**\n   * Poster images are not handled by the Flash tech so make this a no-op\n   *\n   * @method setPoster\n   */\n  setPoster() {}\n\n  /**\n   * Determine if can seek in media\n   *\n   * @return {TimeRangeObject}\n   * @method seekable\n   */\n  seekable() {\n    const duration = this.duration();\n    if (duration === 0) {\n      return createTimeRange();\n    }\n    return createTimeRange(0, duration);\n  }\n\n  /**\n   * Get buffered time range\n   *\n   * @return {TimeRangeObject}\n   * @method buffered\n   */\n  buffered() {\n    let ranges = this.el_.vjs_getProperty('buffered');\n    if (ranges.length === 0) {\n      return createTimeRange();\n    }\n    return createTimeRange(ranges[0][0], ranges[0][1]);\n  }\n\n  /**\n   * Get fullscreen support -\n   * Flash does not allow fullscreen through javascript\n   * so always returns false\n   *\n   * @return {Boolean} false\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    return false; // Flash does not allow fullscreen through javascript\n  }\n\n  /**\n   * Request to enter fullscreen\n   * Flash does not allow fullscreen through javascript\n   * so always returns false\n   *\n   * @return {Boolean} false\n   * @method enterFullScreen\n   */\n  enterFullScreen() {\n    return false;\n  }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n  _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n  _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n  _createGetter(_readWrite[i]);\n  _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n  _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n  return Flash.version()[0] >= 10;\n  // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param  {Object} source   The source object\n * @param  {Flash} tech  The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/**\n * Check if Flash can play the given videotype\n * @param  {String} type    The mimetype to check\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canPlayType = function(type){\n  if (type in Flash.formats) {\n    return 'maybe';\n  }\n\n  return '';\n};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param  {Object} source  The source object\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n  var type;\n\n  function guessMimeType(src) {\n    var ext = Url.getFileExtension(src);\n    if (ext) {\n      return `video/${ext}`;\n    }\n    return '';\n  }\n\n  if (!source.type) {\n    type = guessMimeType(source.src);\n  } else {\n    // Strip code information from the type because we don't get that specific\n    type = source.type.replace(/;.*/, '').toLowerCase();\n  }\n\n  return Flash.nativeSourceHandler.canPlayType(type);\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param  {Object} source    The source object\n * @param  {Flash} tech   The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n  tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n  'video/flv': 'FLV',\n  'video/x-flv': 'FLV',\n  'video/mp4': 'MP4',\n  'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n  let el = Dom.getEl(currSwf);\n  let tech = el && el.tech;\n\n  // if there is no el then the tech has been disposed\n  // and the tech element was removed from the player div\n  if (tech && tech.el()) {\n    // check that the flash object is really ready\n    Flash.checkReady(tech);\n  }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n  // stop worrying if the tech has been disposed\n  if (!tech.el()) {\n    return;\n  }\n\n  // check if API property exists\n  if (tech.el().vjs_getProperty) {\n    // tell tech it's ready\n    tech.triggerReady();\n  } else {\n    // wait longer\n    this.setTimeout(function(){\n      Flash['checkReady'](tech);\n    }, 50);\n  }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n  let tech = Dom.getEl(swfID).tech;\n  tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n  const tech = Dom.getEl(swfID).tech;\n\n  // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n  if (err === 'srcnotfound') {\n    return tech.error(4);\n  }\n\n  // trigger a custom error\n  tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n  let version = '0,0,0';\n\n  // IE\n  try {\n    version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n  // other browsers\n  } catch(e) {\n    try {\n      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n      }\n    } catch(err) {}\n  }\n  return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n  const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n  // Get element by embedding code and retrieving created element\n  const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n  return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n  const objTag = '<object type=\"application/x-shockwave-flash\" ';\n  let flashVarsString = '';\n  let paramsString = '';\n  let attrsString = '';\n\n  // Convert flash vars to string\n  if (flashVars) {\n    Object.getOwnPropertyNames(flashVars).forEach(function(key){\n      flashVarsString += `${key}=${flashVars[key]}&amp;`;\n    });\n  }\n\n  // Add swf, flashVars, and other default params\n  params = assign({\n    'movie': swf,\n    'flashvars': flashVarsString,\n    'allowScriptAccess': 'always', // Required to talk to swf\n    'allowNetworking': 'all' // All should be default, but having security issues.\n  }, params);\n\n  // Create param tags string\n  Object.getOwnPropertyNames(params).forEach(function(key){\n    paramsString += `<param name=\"${key}\" value=\"${params[key]}\" />`;\n  });\n\n  attributes = assign({\n    // Add swf to attributes (need both for IE and Others to work)\n    'data': swf,\n\n    // Default to 100% width/height\n    'width': '100%',\n    'height': '100%'\n\n  }, attributes);\n\n  // Create Attributes string\n  Object.getOwnPropertyNames(attributes).forEach(function(key){\n    attrsString += `${key}=\"${attributes[key]}\" `;\n  });\n\n  return `${objTag}${attrsString}>${paramsString}</object>`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nTech.registerTech('Flash', Flash);\nexport default Flash;\n","/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n  constructor(options, ready){\n    super(options, ready);\n\n    const source = options.source;\n\n    // Set the source if one is provided\n    // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n    // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n    // anyway so the error gets fired.\n    if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n      this.setSource(source);\n    } else {\n      this.handleLateInit_(this.el_);\n    }\n\n    if (this.el_.hasChildNodes()) {\n\n      let nodes = this.el_.childNodes;\n      let nodesLength = nodes.length;\n      let removeNodes = [];\n\n      while (nodesLength--) {\n        let node = nodes[nodesLength];\n        let nodeName = node.nodeName.toLowerCase();\n\n        if (nodeName === 'track') {\n          if (!this.featuresNativeTextTracks) {\n            // Empty video tag tracks so the built-in player doesn't use them also.\n            // This may not be fast enough to stop HTML5 browsers from reading the tags\n            // so we'll need to turn off any default tracks if we're manually doing\n            // captions and subtitles. videoElement.textTracks\n            removeNodes.push(node);\n          } else {\n            // store HTMLTrackElement and TextTrack to remote list\n            this.remoteTextTrackEls().addTrackElement_(node);\n            this.remoteTextTracks().addTrack_(node.track);\n          }\n        }\n      }\n\n      for (let i=0; i<removeNodes.length; i++) {\n        this.el_.removeChild(removeNodes[i]);\n      }\n    }\n\n    if (this.featuresNativeTextTracks) {\n      this.handleTextTrackChange_ = Fn.bind(this, this.handleTextTrackChange);\n      this.handleTextTrackAdd_ = Fn.bind(this, this.handleTextTrackAdd);\n      this.handleTextTrackRemove_ = Fn.bind(this, this.handleTextTrackRemove);\n      this.proxyNativeTextTracks_();\n    }\n\n    // Determine if native controls should be used\n    // Our goal should be to get the custom controls on mobile solid everywhere\n    // so we can remove this all together. Right now this will block custom\n    // controls on touch enabled laptops like the Chrome Pixel\n    if (browser.TOUCH_ENABLED && options.nativeControlsForTouch === true ||\n        browser.IS_IPHONE ||\n        browser.IS_NATIVE_ANDROID) {\n      this.setControls(true);\n    }\n\n    this.triggerReady();\n  }\n\n  /**\n   * Dispose of html5 media element\n   *\n   * @method dispose\n   */\n  dispose() {\n    let tt = this.el().textTracks;\n    let emulatedTt = this.textTracks();\n\n    // remove native event listeners\n    if (tt && tt.removeEventListener) {\n      tt.removeEventListener('change', this.handleTextTrackChange_);\n      tt.removeEventListener('addtrack', this.handleTextTrackAdd_);\n      tt.removeEventListener('removetrack', this.handleTextTrackRemove_);\n    }\n\n    // clearout the emulated text track list.\n    let i = emulatedTt.length;\n\n    while (i--) {\n      emulatedTt.removeTrack_(emulatedTt[i]);\n    }\n\n\n    Html5.disposeMediaElement(this.el_);\n    super.dispose();\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    let el = this.options_.tag;\n\n    // Check if this browser supports moving the element into the box.\n    // On the iPhone video will break if you move the element,\n    // So we have to create a brand new element.\n    if (!el || this['movingMediaElementInDOM'] === false) {\n\n      // If the original tag is still there, clone and remove it.\n      if (el) {\n        const clone = el.cloneNode(true);\n        el.parentNode.insertBefore(clone, el);\n        Html5.disposeMediaElement(el);\n        el = clone;\n      } else {\n        el = document.createElement('video');\n\n        // determine if native controls should be used\n        let tagAttributes = this.options_.tag && Dom.getElAttributes(this.options_.tag);\n        let attributes = mergeOptions({}, tagAttributes);\n        if (!browser.TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) {\n          delete attributes.controls;\n        }\n\n        Dom.setElAttributes(el,\n          assign(attributes, {\n            id: this.options_.techId,\n            class: 'vjs-tech'\n          })\n        );\n      }\n    }\n\n    // Update specific tag settings, in case they were overridden\n    let settingsAttrs = ['autoplay','preload','loop','muted'];\n    for (let i = settingsAttrs.length - 1; i >= 0; i--) {\n      const attr = settingsAttrs[i];\n      let overwriteAttrs = {};\n      if (typeof this.options_[attr] !== 'undefined') {\n        overwriteAttrs[attr] = this.options_[attr];\n      }\n      Dom.setElAttributes(el, overwriteAttrs);\n    }\n\n    return el;\n    // jenniisawesome = true;\n  }\n\n  // If we're loading the playback object after it has started loading\n  // or playing the video (often with autoplay on) then the loadstart event\n  // has already fired and we need to fire it manually because many things\n  // rely on it.\n  handleLateInit_(el) {\n    if (el.networkState === 0 || el.networkState === 3) {\n      // The video element hasn't started loading the source yet\n      // or didn't find a source\n      return;\n    }\n\n    if (el.readyState === 0) {\n      // NetworkState is set synchronously BUT loadstart is fired at the\n      // end of the current stack, usually before setInterval(fn, 0).\n      // So at this point we know loadstart may have already fired or is\n      // about to fire, and either way the player hasn't seen it yet.\n      // We don't want to fire loadstart prematurely here and cause a\n      // double loadstart so we'll wait and see if it happens between now\n      // and the next loop, and fire it if not.\n      // HOWEVER, we also want to make sure it fires before loadedmetadata\n      // which could also happen between now and the next loop, so we'll\n      // watch for that also.\n      let loadstartFired = false;\n      let setLoadstartFired = function() {\n        loadstartFired = true;\n      };\n      this.on('loadstart', setLoadstartFired);\n\n      let triggerLoadstart = function() {\n        // We did miss the original loadstart. Make sure the player\n        // sees loadstart before loadedmetadata\n        if (!loadstartFired) {\n          this.trigger('loadstart');\n        }\n      };\n      this.on('loadedmetadata', triggerLoadstart);\n\n      this.ready(function(){\n        this.off('loadstart', setLoadstartFired);\n        this.off('loadedmetadata', triggerLoadstart);\n\n        if (!loadstartFired) {\n          // We did miss the original native loadstart. Fire it now.\n          this.trigger('loadstart');\n        }\n      });\n\n      return;\n    }\n\n    // From here on we know that loadstart already fired and we missed it.\n    // The other readyState events aren't as much of a problem if we double\n    // them, so not going to go to as much trouble as loadstart to prevent\n    // that unless we find reason to.\n    let eventsToTrigger = ['loadstart'];\n\n    // loadedmetadata: newly equal to HAVE_METADATA (1) or greater\n    eventsToTrigger.push('loadedmetadata');\n\n    // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\n    if (el.readyState >= 2) {\n      eventsToTrigger.push('loadeddata');\n    }\n\n    // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\n    if (el.readyState >= 3) {\n      eventsToTrigger.push('canplay');\n    }\n\n    // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\n    if (el.readyState >= 4) {\n      eventsToTrigger.push('canplaythrough');\n    }\n\n    // We still need to give the player time to add event listeners\n    this.ready(function(){\n      eventsToTrigger.forEach(function(type){\n        this.trigger(type);\n      }, this);\n    });\n  }\n\n  proxyNativeTextTracks_() {\n    let tt = this.el().textTracks;\n\n    if (tt) {\n      // Add tracks - if player is initialised after DOM loaded, textTracks\n      // will not trigger addtrack\n      for (let i = 0; i < tt.length; i++) {\n        this.textTracks().addTrack_(tt[i]);\n      }\n\n      if (tt.addEventListener) {\n        tt.addEventListener('change', this.handleTextTrackChange_);\n        tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n        tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n      }\n    }\n  }\n\n  handleTextTrackChange(e) {\n    let tt = this.textTracks();\n    this.textTracks().trigger({\n      type: 'change',\n      target: tt,\n      currentTarget: tt,\n      srcElement: tt\n    });\n  }\n\n  handleTextTrackAdd(e) {\n    this.textTracks().addTrack_(e.track);\n  }\n\n  handleTextTrackRemove(e) {\n    this.textTracks().removeTrack_(e.track);\n  }\n\n  /**\n   * Play for html5 tech\n   *\n   * @method play\n   */\n  play() { this.el_.play(); }\n\n  /**\n   * Pause for html5 tech\n   *\n   * @method pause\n   */\n  pause() { this.el_.pause(); }\n\n  /**\n   * Paused for html5 tech\n   *\n   * @return {Boolean}\n   * @method paused\n   */\n  paused() { return this.el_.paused; }\n\n  /**\n   * Get current time\n   *\n   * @return {Number}\n   * @method currentTime\n   */\n  currentTime() { return this.el_.currentTime; }\n\n  /**\n   * Set current time\n   *\n   * @param {Number} seconds Current time of video\n   * @method setCurrentTime\n   */\n  setCurrentTime(seconds) {\n    try {\n      this.el_.currentTime = seconds;\n    } catch(e) {\n      log(e, 'Video is not ready. (Video.js)');\n      // this.warning(VideoJS.warnings.videoNotReady);\n    }\n  }\n\n  /**\n   * Get duration\n   *\n   * @return {Number}\n   * @method duration\n   */\n  duration() { return this.el_.duration || 0; }\n\n  /**\n   * Get a TimeRange object that represents the intersection\n   * of the time ranges for which the user agent has all\n   * relevant media\n   *\n   * @return {TimeRangeObject}\n   * @method buffered\n   */\n  buffered() { return this.el_.buffered; }\n\n  /**\n   * Get volume level\n   *\n   * @return {Number}\n   * @method volume\n   */\n  volume() { return this.el_.volume; }\n\n  /**\n   * Set volume level\n   *\n   * @param {Number} percentAsDecimal Volume percent as a decimal\n   * @method setVolume\n   */\n  setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n  /**\n   * Get if muted\n   *\n   * @return {Boolean}\n   * @method muted\n   */\n  muted() { return this.el_.muted; }\n\n  /**\n   * Set muted\n   *\n   * @param {Boolean} If player is to be muted or note\n   * @method setMuted\n   */\n  setMuted(muted) { this.el_.muted = muted; }\n\n  /**\n   * Get player width\n   *\n   * @return {Number}\n   * @method width\n   */\n  width() { return this.el_.offsetWidth; }\n\n  /**\n   * Get player height\n   *\n   * @return {Number}\n   * @method height\n   */\n  height() {  return this.el_.offsetHeight; }\n\n  /**\n   * Get if there is fullscreen support\n   *\n   * @return {Boolean}\n   * @method supportsFullScreen\n   */\n  supportsFullScreen() {\n    if (typeof this.el_.webkitEnterFullScreen === 'function') {\n      let userAgent = window.navigator.userAgent;\n      // Seems to be broken in Chromium/Chrome && Safari in Leopard\n      if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Request to enter fullscreen\n   *\n   * @method enterFullScreen\n   */\n  enterFullScreen() {\n    var video = this.el_;\n\n    if ('webkitDisplayingFullscreen' in video) {\n      this.one('webkitbeginfullscreen', function() {\n        this.one('webkitendfullscreen', function() {\n          this.trigger('fullscreenchange', { isFullscreen: false });\n        });\n\n        this.trigger('fullscreenchange', { isFullscreen: true });\n      });\n    }\n\n    if (video.paused && video.networkState <= video.HAVE_METADATA) {\n      // attempt to prime the video element for programmatic access\n      // this isn't necessary on the desktop but shouldn't hurt\n      this.el_.play();\n\n      // playing and pausing synchronously during the transition to fullscreen\n      // can get iOS ~6.1 devices into a play/pause loop\n      this.setTimeout(function(){\n        video.pause();\n        video.webkitEnterFullScreen();\n      }, 0);\n    } else {\n      video.webkitEnterFullScreen();\n    }\n  }\n\n  /**\n   * Request to exit fullscreen\n   *\n   * @method exitFullScreen\n   */\n  exitFullScreen() {\n    this.el_.webkitExitFullScreen();\n  }\n\n  /**\n   * Get/set video\n   *\n   * @param {Object=} src Source object\n   * @return {Object}\n   * @method src\n   */\n  src(src) {\n    if (src === undefined) {\n      return this.el_.src;\n    } else {\n      // Setting src through `src` instead of `setSrc` will be deprecated\n      this.setSrc(src);\n    }\n  }\n\n  /**\n   * Set video\n   *\n   * @param {Object} src Source object\n   * @deprecated\n   * @method setSrc\n   */\n  setSrc(src) {\n    this.el_.src = src;\n  }\n\n  /**\n   * Load media into player\n   *\n   * @method load\n   */\n  load(){\n    this.el_.load();\n  }\n\n  /**\n   * Reset the tech. Removes all sources and calls `load`.\n   *\n   * @method reset\n   */\n  reset() {\n    Html5.resetMediaElement(this.el_);\n  }\n\n  /**\n   * Get current source\n   *\n   * @return {Object}\n   * @method currentSrc\n   */\n  currentSrc() {\n    if (this.currentSource_) {\n      return this.currentSource_.src;\n    } else {\n      return this.el_.currentSrc;\n    }\n  }\n\n  /**\n   * Get poster\n   *\n   * @return {String}\n   * @method poster\n   */\n  poster() { return this.el_.poster; }\n\n  /**\n   * Set poster\n   *\n   * @param {String} val URL to poster image\n   * @method\n   */\n  setPoster(val) { this.el_.poster = val; }\n\n  /**\n   * Get preload attribute\n   *\n   * @return {String}\n   * @method preload\n   */\n  preload() { return this.el_.preload; }\n\n  /**\n   * Set preload attribute\n   *\n   * @param {String} val Value for preload attribute\n   * @method setPreload\n   */\n  setPreload(val) { this.el_.preload = val; }\n\n  /**\n   * Get autoplay attribute\n   *\n   * @return {String}\n   * @method autoplay\n   */\n  autoplay() { return this.el_.autoplay; }\n\n  /**\n   * Set autoplay attribute\n   *\n   * @param {String} val Value for preload attribute\n   * @method setAutoplay\n   */\n  setAutoplay(val) { this.el_.autoplay = val; }\n\n  /**\n   * Get controls attribute\n   *\n   * @return {String}\n   * @method controls\n   */\n  controls() { return this.el_.controls; }\n\n  /**\n   * Set controls attribute\n   *\n   * @param {String} val Value for controls attribute\n   * @method setControls\n   */\n  setControls(val) { this.el_.controls = !!val; }\n\n  /**\n   * Get loop attribute\n   *\n   * @return {String}\n   * @method loop\n   */\n  loop() { return this.el_.loop; }\n\n  /**\n   * Set loop attribute\n   *\n   * @param {String} val Value for loop attribute\n   * @method setLoop\n   */\n  setLoop(val) { this.el_.loop = val; }\n\n  /**\n   * Get error value\n   *\n   * @return {String}\n   * @method error\n   */\n  error() { return this.el_.error; }\n\n  /**\n   * Get whether or not the player is in the \"seeking\" state\n   *\n   * @return {Boolean}\n   * @method seeking\n   */\n  seeking() { return this.el_.seeking; }\n\n  /**\n   * Get a TimeRanges object that represents the\n   * ranges of the media resource to which it is possible\n   * for the user agent to seek.\n   *\n   * @return {TimeRangeObject}\n   * @method seekable\n   */\n  seekable() { return this.el_.seekable; }\n\n  /**\n   * Get if video ended\n   *\n   * @return {Boolean}\n   * @method ended\n   */\n  ended() { return this.el_.ended; }\n\n  /**\n   * Get the value of the muted content attribute\n   * This attribute has no dynamic effect, it only\n   * controls the default state of the element\n   *\n   * @return {Boolean}\n   * @method defaultMuted\n   */\n  defaultMuted() { return this.el_.defaultMuted; }\n\n  /**\n   * Get desired speed at which the media resource is to play\n   *\n   * @return {Number}\n   * @method playbackRate\n   */\n  playbackRate() { return this.el_.playbackRate; }\n\n  /**\n   * Returns a TimeRanges object that represents the ranges of the\n   * media resource that the user agent has played.\n   * @return {TimeRangeObject} the range of points on the media\n   * timeline that has been reached through normal playback\n   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n   */\n  played() { return this.el_.played; }\n\n  /**\n   * Set desired speed at which the media resource is to play\n   *\n   * @param {Number} val Speed at which the media resource is to play\n   * @method setPlaybackRate\n   */\n  setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n  /**\n   * Get the current state of network activity for the element, from\n   * the list below\n   * NETWORK_EMPTY (numeric value 0)\n   * NETWORK_IDLE (numeric value 1)\n   * NETWORK_LOADING (numeric value 2)\n   * NETWORK_NO_SOURCE (numeric value 3)\n   *\n   * @return {Number}\n   * @method networkState\n   */\n  networkState() { return this.el_.networkState; }\n\n  /**\n   * Get a value that expresses the current state of the element\n   * with respect to rendering the current playback position, from\n   * the codes in the list below\n   * HAVE_NOTHING (numeric value 0)\n   * HAVE_METADATA (numeric value 1)\n   * HAVE_CURRENT_DATA (numeric value 2)\n   * HAVE_FUTURE_DATA (numeric value 3)\n   * HAVE_ENOUGH_DATA (numeric value 4)\n   *\n   * @return {Number}\n   * @method readyState\n   */\n  readyState() { return this.el_.readyState; }\n\n  /**\n   * Get width of video\n   *\n   * @return {Number}\n   * @method videoWidth\n   */\n  videoWidth() { return this.el_.videoWidth; }\n\n  /**\n   * Get height of video\n   *\n   * @return {Number}\n   * @method videoHeight\n   */\n  videoHeight() { return this.el_.videoHeight; }\n\n  /**\n   * Get text tracks\n   *\n   * @return {TextTrackList}\n   * @method textTracks\n   */\n  textTracks() {\n    return super.textTracks();\n  }\n\n  /**\n   * Creates and returns a text track object\n   *\n   * @param {String} kind Text track kind (subtitles, captions, descriptions\n   *                                       chapters and metadata)\n   * @param {String=} label Label to identify the text track\n   * @param {String=} language Two letter language abbreviation\n   * @return {TextTrackObject}\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    if (!this['featuresNativeTextTracks']) {\n      return super.addTextTrack(kind, label, language);\n    }\n\n    return this.el_.addTextTrack(kind, label, language);\n  }\n\n  /**\n   * Creates a remote text track object and returns a html track element\n   *\n   * @param {Object} options The object should contain values for\n   * kind, language, label and src (location of the WebVTT file)\n   * @return {HTMLTrackElement}\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options={}) {\n    if (!this['featuresNativeTextTracks']) {\n      return super.addRemoteTextTrack(options);\n    }\n\n    let htmlTrackElement = document.createElement('track');\n\n    if (options.kind) {\n      htmlTrackElement.kind = options.kind;\n    }\n    if (options.label) {\n      htmlTrackElement.label = options.label;\n    }\n    if (options.language || options.srclang) {\n      htmlTrackElement.srclang = options.language || options.srclang;\n    }\n    if (options.default) {\n      htmlTrackElement.default = options.default;\n    }\n    if (options.id) {\n      htmlTrackElement.id = options.id;\n    }\n    if (options.src) {\n      htmlTrackElement.src = options.src;\n    }\n\n    this.el().appendChild(htmlTrackElement);\n\n    // store HTMLTrackElement and TextTrack to remote list\n    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n    this.remoteTextTracks().addTrack_(htmlTrackElement.track);\n\n    return htmlTrackElement;\n  }\n\n  /**\n   * Remove remote text track from TextTrackList object\n   *\n   * @param {TextTrackObject} track Texttrack object to remove\n   * @method removeRemoteTextTrack\n   */\n  removeRemoteTextTrack(track) {\n    if (!this['featuresNativeTextTracks']) {\n      return super.removeRemoteTextTrack(track);\n    }\n\n    let tracks, i;\n\n    let trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n    // remove HTMLTrackElement and TextTrack from remote list\n    this.remoteTextTrackEls().removeTrackElement_(trackElement);\n    this.remoteTextTracks().removeTrack_(track);\n\n    tracks = this.$$('track');\n\n    i = tracks.length;\n    while (i--) {\n      if (track === tracks[i] || track === tracks[i].track) {\n        this.el().removeChild(tracks[i]);\n      }\n    }\n  }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n  // IE9 with no Media Player is a LIAR! (#984)\n  try {\n    Html5.TEST_VID['volume'] = 0.5;\n  } catch (e) {\n    return false;\n  }\n\n  return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param  {Object} source   The source object\n * @param  {Html5} tech  The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can play the given videotype\n *\n * @param  {String} type    The mimetype to check\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canPlayType = function(type){\n  // IE9 on Windows 7 without MediaPlayer throws an error here\n  // https://github.com/videojs/video.js/issues/519\n  try {\n    return Html5.TEST_VID.canPlayType(type);\n  } catch(e) {\n    return '';\n  }\n};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param  {Object} source  The source object\n * @return {String}         'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n  var match, ext;\n\n  // If a type was provided we should rely on that\n  if (source.type) {\n    return Html5.nativeSourceHandler.canPlayType(source.type);\n  } else if (source.src) {\n    // If no type, fall back to checking 'video/[EXTENSION]'\n    ext = Url.getFileExtension(source.src);\n\n    return Html5.nativeSourceHandler.canPlayType(`video/${ext}`);\n  }\n\n  return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param  {Object} source    The source object\n * @param  {Html5} tech   The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n  tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n  var volume =  Html5.TEST_VID.volume;\n  Html5.TEST_VID.volume = (volume / 2) + 0.1;\n  return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Boolean}\n */\nHtml5.canControlPlaybackRate = function(){\n  // Playback rate API is implemented in Android Chrome, but doesn't do anything\n  // https://github.com/videojs/video.js/issues/3180\n  if (browser.IS_ANDROID && browser.IS_CHROME) {\n    return false;\n  }\n  var playbackRate = Html5.TEST_VID.playbackRate;\n  Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n  return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n  var supportsTextTracks;\n\n  // Figure out native text track support\n  // If mode is a number, we cannot change it because it'll disappear from view.\n  // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n  // Firefox isn't playing nice either with modifying the mode\n  // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n  supportsTextTracks = !!Html5.TEST_VID.textTracks;\n  if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n    supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n  }\n  if (supportsTextTracks && browser.IS_FIREFOX) {\n    supportsTextTracks = false;\n  }\n  if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n    supportsTextTracks = false;\n  }\n\n  return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n  'loadstart',\n  'suspend',\n  'abort',\n  'error',\n  'emptied',\n  'stalled',\n  'loadedmetadata',\n  'loadeddata',\n  'canplay',\n  'canplaythrough',\n  'playing',\n  'waiting',\n  'seeking',\n  'seeked',\n  'ended',\n  'durationchange',\n  'timeupdate',\n  'progress',\n  'play',\n  'pause',\n  'ratechange',\n  'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n  // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n  if (browser.ANDROID_VERSION >= 4.0) {\n    if (!canPlayType) {\n      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n    }\n\n    Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n      if (type && mpegurlRE.test(type)) {\n        return 'maybe';\n      }\n      return canPlayType.call(this, type);\n    };\n  }\n\n  // Override Android 2.2 and less canPlayType method which is broken\n  if (browser.IS_OLD_ANDROID) {\n    if (!canPlayType) {\n      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n    }\n\n    Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n      if (type && mp4RE.test(type)) {\n        return 'maybe';\n      }\n      return canPlayType.call(this, type);\n    };\n  }\n};\n\nHtml5.unpatchCanPlayType = function() {\n  var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n  Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n  canPlayType = null;\n  return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n  if (!el) { return; }\n\n  if (el.parentNode) {\n    el.parentNode.removeChild(el);\n  }\n\n  // remove any child track or source nodes to prevent their loading\n  while(el.hasChildNodes()) {\n    el.removeChild(el.firstChild);\n  }\n\n  // remove any src reference. not setting `src=''` because that causes a warning\n  // in firefox\n  el.removeAttribute('src');\n\n  // force the media element to update its loading state by calling load()\n  // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n  if (typeof el.load === 'function') {\n    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n    (function() {\n      try {\n        el.load();\n      } catch (e) {\n        // not supported\n      }\n    })();\n  }\n};\n\nHtml5.resetMediaElement = function(el){\n  if (!el) { return; }\n\n  let sources = el.querySelectorAll('source');\n  let i = sources.length;\n  while (i--) {\n    el.removeChild(sources[i]);\n  }\n\n  // remove any src reference.\n  // not setting `src=''` because that throws an error\n  el.removeAttribute('src');\n\n  if (typeof el.load === 'function') {\n    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n    (function() {\n      try {\n        el.load();\n      } catch (e) {}\n    })();\n  }\n};\n\nComponent.registerComponent('Html5', Html5);\nTech.registerTech('Html5', Html5);\nexport default Html5;\n","/**\n * @file loader.js\n */\nimport Component from '../component.js';\nimport Tech from './tech.js';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n\n    // If there are no sources when the player is initialized,\n    // load the first supported playback technology.\n\n    if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n      for (let i=0, j=options.playerOptions['techOrder']; i<j.length; i++) {\n        let techName = toTitleCase(j[i]);\n        let tech = Tech.getTech(techName);\n        // Support old behavior of techs being registered as components.\n        // Remove once that deprecated behavior is removed.\n        if (!techName) {\n          tech = Component.getComponent(techName);\n        }\n\n        // Check if the browser supports this technology\n        if (tech && tech.isSupported()) {\n          player.loadTech_(techName);\n          break;\n        }\n      }\n    } else {\n      // // Loop through playback technologies (HTML5, Flash) and check for support.\n      // // Then load the best source.\n      // // A few assumptions here:\n      // //   All playback technologies respect preload false.\n      player.src(options.playerOptions['sources']);\n    }\n  }\n}\n\nComponent.registerComponent('MediaLoader', MediaLoader);\nexport default MediaLoader;\n","/**\n * @file tech.js\n * Media Technology Controller - Base class for media playback\n * technology controllers like Flash and HTML5\n */\n\nimport Component from '../component';\nimport HTMLTrackElement from '../tracks/html-track-element';\nimport HTMLTrackElementList from '../tracks/html-track-element-list';\nimport mergeOptions from '../utils/merge-options.js';\nimport TextTrack from '../tracks/text-track';\nimport TextTrackList from '../tracks/text-track-list';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport { createTimeRange } from '../utils/time-ranges.js';\nimport { bufferedPercent } from '../utils/buffer.js';\nimport MediaError from '../media-error.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Base class for media (HTML5 Video, Flash) controllers\n *\n * @param {Object=} options Options object\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Tech\n */\nclass Tech extends Component {\n\n  constructor(options={}, ready=function(){}){\n    // we don't want the tech to report user activity automatically.\n    // This is done manually in addControlsListeners\n    options.reportTouchActivity = false;\n    super(null, options, ready);\n\n    // keep track of whether the current source has played at all to\n    // implement a very limited played()\n    this.hasStarted_ = false;\n    this.on('playing', function() {\n      this.hasStarted_ = true;\n    });\n    this.on('loadstart', function() {\n      this.hasStarted_ = false;\n    });\n\n    this.textTracks_ = options.textTracks;\n\n    // Manually track progress in cases where the browser/flash player doesn't report it.\n    if (!this.featuresProgressEvents) {\n      this.manualProgressOn();\n    }\n\n    // Manually track timeupdates in cases where the browser/flash player doesn't report it.\n    if (!this.featuresTimeupdateEvents) {\n      this.manualTimeUpdatesOn();\n    }\n\n    if (options.nativeCaptions === false || options.nativeTextTracks === false) {\n      this.featuresNativeTextTracks = false;\n    }\n\n    if (!this.featuresNativeTextTracks) {\n      this.on('ready', this.emulateTextTracks);\n    }\n\n    this.initTextTrackListeners();\n\n    // Turn on component tap events\n    this.emitTapEvents();\n  }\n\n  /* Fallbacks for unsupported event types\n  ================================================================================ */\n  // Manually trigger progress events based on changes to the buffered amount\n  // Many flash players and older HTML5 browsers don't send progress or progress-like events\n  /**\n   * Turn on progress events\n   *\n   * @method manualProgressOn\n   */\n  manualProgressOn() {\n    this.on('durationchange', this.onDurationChange);\n\n    this.manualProgress = true;\n\n    // Trigger progress watching when a source begins loading\n    this.one('ready', this.trackProgress);\n  }\n\n  /**\n   * Turn off progress events\n   *\n   * @method manualProgressOff\n   */\n  manualProgressOff() {\n    this.manualProgress = false;\n    this.stopTrackingProgress();\n\n    this.off('durationchange', this.onDurationChange);\n  }\n\n  /**\n   * Track progress\n   *\n   * @method trackProgress\n   */\n  trackProgress() {\n    this.stopTrackingProgress();\n    this.progressInterval = this.setInterval(Fn.bind(this, function(){\n      // Don't trigger unless buffered amount is greater than last time\n\n      let numBufferedPercent = this.bufferedPercent();\n\n      if (this.bufferedPercent_ !== numBufferedPercent) {\n        this.trigger('progress');\n      }\n\n      this.bufferedPercent_ = numBufferedPercent;\n\n      if (numBufferedPercent === 1) {\n        this.stopTrackingProgress();\n      }\n    }), 500);\n  }\n\n  /**\n   * Update duration\n   *\n   * @method onDurationChange\n   */\n  onDurationChange() {\n    this.duration_ = this.duration();\n  }\n\n  /**\n   * Create and get TimeRange object for buffering\n   *\n   * @return {TimeRangeObject}\n   * @method buffered\n   */\n  buffered() {\n    return createTimeRange(0, 0);\n  }\n\n  /**\n   * Get buffered percent\n   *\n   * @return {Number}\n   * @method bufferedPercent\n   */\n  bufferedPercent() {\n    return bufferedPercent(this.buffered(), this.duration_);\n  }\n\n  /**\n   * Stops tracking progress by clearing progress interval\n   *\n   * @method stopTrackingProgress\n   */\n  stopTrackingProgress() {\n    this.clearInterval(this.progressInterval);\n  }\n\n  /*! Time Tracking -------------------------------------------------------------- */\n  /**\n   * Set event listeners for on play and pause and tracking current time\n   *\n   * @method manualTimeUpdatesOn\n   */\n  manualTimeUpdatesOn() {\n    this.manualTimeUpdates = true;\n\n    this.on('play', this.trackCurrentTime);\n    this.on('pause', this.stopTrackingCurrentTime);\n  }\n\n  /**\n   * Remove event listeners for on play and pause and tracking current time\n   *\n   * @method manualTimeUpdatesOff\n   */\n  manualTimeUpdatesOff() {\n    this.manualTimeUpdates = false;\n    this.stopTrackingCurrentTime();\n    this.off('play', this.trackCurrentTime);\n    this.off('pause', this.stopTrackingCurrentTime);\n  }\n\n  /**\n   * Tracks current time\n   *\n   * @method trackCurrentTime\n   */\n  trackCurrentTime() {\n    if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n    this.currentTimeInterval = this.setInterval(function(){\n      this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n    }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n  }\n\n  /**\n   * Turn off play progress tracking (when paused or dragging)\n   *\n   * @method stopTrackingCurrentTime\n   */\n  stopTrackingCurrentTime() {\n    this.clearInterval(this.currentTimeInterval);\n\n    // #1002 - if the video ends right before the next timeupdate would happen,\n    // the progress bar won't make it all the way to the end\n    this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n  }\n\n  /**\n   * Turn off any manual progress or timeupdate tracking\n   *\n   * @method dispose\n   */\n  dispose() {\n    // clear out text tracks because we can't reuse them between techs\n    let textTracks = this.textTracks();\n\n    if (textTracks) {\n      let i = textTracks.length;\n      while(i--) {\n        this.removeRemoteTextTrack(textTracks[i]);\n      }\n    }\n\n    // Turn off any manual progress or timeupdate tracking\n    if (this.manualProgress) { this.manualProgressOff(); }\n\n    if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n    super.dispose();\n  }\n\n  /**\n   * Reset the tech. Removes all sources and resets readyState.\n   *\n   * @method reset\n   */\n  reset() {}\n\n  /**\n   * When invoked without an argument, returns a MediaError object\n   * representing the current error state of the player or null if\n   * there is no error. When invoked with an argument, set the current\n   * error state of the player.\n   * @param {MediaError=} err    Optional an error object\n   * @return {MediaError}        the current error object or null\n   * @method error\n   */\n  error(err) {\n    if (err !== undefined) {\n      if (err instanceof MediaError) {\n        this.error_ = err;\n      } else {\n        this.error_ = new MediaError(err);\n      }\n      this.trigger('error');\n    }\n    return this.error_;\n  }\n\n  /**\n   * Return the time ranges that have been played through for the\n   * current source. This implementation is incomplete. It does not\n   * track the played time ranges, only whether the source has played\n   * at all or not.\n   * @return {TimeRangeObject} a single time range if this video has\n   * played or an empty set of ranges if not.\n   * @method played\n   */\n  played() {\n    if (this.hasStarted_) {\n      return createTimeRange(0, 0);\n    }\n    return createTimeRange();\n  }\n\n  /**\n   * Set current time\n   *\n   * @method setCurrentTime\n   */\n  setCurrentTime() {\n    // improve the accuracy of manual timeupdates\n    if (this.manualTimeUpdates) { this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true }); }\n  }\n\n  /**\n   * Initialize texttrack listeners\n   *\n   * @method initTextTrackListeners\n   */\n  initTextTrackListeners() {\n    let textTrackListChanges = Fn.bind(this, function() {\n      this.trigger('texttrackchange');\n    });\n\n    let tracks = this.textTracks();\n\n    if (!tracks) return;\n\n    tracks.addEventListener('removetrack', textTrackListChanges);\n    tracks.addEventListener('addtrack', textTrackListChanges);\n\n    this.on('dispose', Fn.bind(this, function() {\n      tracks.removeEventListener('removetrack', textTrackListChanges);\n      tracks.removeEventListener('addtrack', textTrackListChanges);\n    }));\n  }\n\n  /**\n   * Emulate texttracks\n   *\n   * @method emulateTextTracks\n   */\n  emulateTextTracks() {\n    let tracks = this.textTracks();\n    if (!tracks) {\n      return;\n    }\n\n    if (!window['WebVTT'] && this.el().parentNode != null) {\n      let script = document.createElement('script');\n      script.src = this.options_['vtt.js'] || '../node_modules/videojs-vtt.js/dist/vtt.js';\n      script.onload = () => {\n        this.trigger('vttjsloaded');\n      };\n      script.onerror = () => {\n        this.trigger('vttjserror');\n      };\n      this.on('dispose', () => {\n        script.onload = null;\n        script.onerror = null;\n      });\n      this.el().parentNode.appendChild(script);\n      window['WebVTT'] = true;\n    }\n\n    let updateDisplay = () => this.trigger('texttrackchange');\n    let textTracksChanges = () => {\n      updateDisplay();\n\n      for (let i = 0; i < tracks.length; i++) {\n        let track = tracks[i];\n        track.removeEventListener('cuechange', updateDisplay);\n        if (track.mode === 'showing') {\n          track.addEventListener('cuechange', updateDisplay);\n        }\n      }\n    };\n\n    textTracksChanges();\n    tracks.addEventListener('change', textTracksChanges);\n\n    this.on('dispose', function() {\n      tracks.removeEventListener('change', textTracksChanges);\n    });\n  }\n\n  /*\n   * Provide default methods for text tracks.\n   *\n   * Html5 tech overrides these.\n   */\n\n  /**\n   * Get texttracks\n   *\n   * @returns {TextTrackList}\n   * @method textTracks\n   */\n  textTracks() {\n    this.textTracks_ = this.textTracks_ || new TextTrackList();\n    return this.textTracks_;\n  }\n\n  /**\n   * Get remote texttracks\n   *\n   * @returns {TextTrackList}\n   * @method remoteTextTracks\n   */\n  remoteTextTracks() {\n    this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n    return this.remoteTextTracks_;\n  }\n\n  /**\n   * Get remote htmltrackelements\n   *\n   * @returns {HTMLTrackElementList}\n   * @method remoteTextTrackEls\n   */\n  remoteTextTrackEls() {\n    this.remoteTextTrackEls_ = this.remoteTextTrackEls_ || new HTMLTrackElementList();\n    return this.remoteTextTrackEls_;\n  }\n\n  /**\n   * Creates and returns a remote text track object\n   *\n   * @param {String} kind Text track kind (subtitles, captions, descriptions\n   *                                       chapters and metadata)\n   * @param {String=} label Label to identify the text track\n   * @param {String=} language Two letter language abbreviation\n   * @return {TextTrackObject}\n   * @method addTextTrack\n   */\n  addTextTrack(kind, label, language) {\n    if (!kind) {\n      throw new Error('TextTrack kind is required but was not provided');\n    }\n\n    return createTrackHelper(this, kind, label, language);\n  }\n\n  /**\n   * Creates a remote text track object and returns a emulated html track element\n   *\n   * @param {Object} options The object should contain values for\n   * kind, language, label and src (location of the WebVTT file)\n   * @return {HTMLTrackElement}\n   * @method addRemoteTextTrack\n   */\n  addRemoteTextTrack(options) {\n    let track = mergeOptions(options, {\n      tech: this\n    });\n\n    let htmlTrackElement = new HTMLTrackElement(track);\n\n    // store HTMLTrackElement and TextTrack to remote list\n    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n    this.remoteTextTracks().addTrack_(htmlTrackElement.track);\n\n    // must come after remoteTextTracks()\n    this.textTracks().addTrack_(htmlTrackElement.track);\n\n    return htmlTrackElement;\n  }\n\n  /**\n   * Remove remote texttrack\n   *\n   * @param {TextTrackObject} track Texttrack to remove\n   * @method removeRemoteTextTrack\n   */\n  removeRemoteTextTrack(track) {\n    this.textTracks().removeTrack_(track);\n\n    let trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n    // remove HTMLTrackElement and TextTrack from remote list\n    this.remoteTextTrackEls().removeTrackElement_(trackElement);\n    this.remoteTextTracks().removeTrack_(track);\n  }\n\n  /**\n   * Provide a default setPoster method for techs\n   * Poster support for techs should be optional, so we don't want techs to\n   * break if they don't have a way to set a poster.\n   *\n   * @method setPoster\n   */\n  setPoster() {}\n\n  /*\n   * Check if the tech can support the given type\n   *\n   * The base tech does not support any type, but source handlers might\n   * overwrite this.\n   *\n   * @param  {String} type    The mimetype to check\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  canPlayType() {\n    return '';\n  }\n\n  /*\n   * Return whether the argument is a Tech or not.\n   * Can be passed either a Class like `Html5` or a instance like `player.tech_`\n   *\n   * @param {Object} component An item to check\n   * @return {Boolean}         Whether it is a tech or not\n   */\n  static isTech(component) {\n    return component.prototype instanceof Tech ||\n           component instanceof Tech ||\n           component === Tech;\n  }\n\n  /**\n   * Registers a Tech\n   *\n   * @param {String} name Name of the Tech to register\n   * @param {Object} tech The tech to register\n   * @static\n   * @method registerComponent\n   */\n  static registerTech(name, tech) {\n    if (!Tech.techs_) {\n      Tech.techs_ = {};\n    }\n\n    if (!Tech.isTech(tech)) {\n      throw new Error(`Tech ${name} must be a Tech`);\n    }\n\n    Tech.techs_[name] = tech;\n    return tech;\n  }\n\n  /**\n   * Gets a component by name\n   *\n   * @param {String} name Name of the component to get\n   * @return {Component}\n   * @static\n   * @method getComponent\n   */\n  static getTech(name) {\n    if (Tech.techs_ && Tech.techs_[name]) {\n      return Tech.techs_[name];\n    }\n\n    if (window && window.videojs && window.videojs[name]) {\n      log.warn(`The ${name} tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)`);\n      return window.videojs[name];\n    }\n  }\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n  let tracks = self.textTracks();\n\n  options.kind = kind;\n\n  if (label) {\n    options.label = label;\n  }\n  if (language) {\n    options.language = language;\n  }\n  options.tech = self;\n\n  let track = new TextTrack(options);\n  tracks.addTrack_(track);\n\n  return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n *   Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n   /*\n    * Register a source handler\n    * Source handlers are scripts for handling specific formats.\n    * The source handler pattern is used for adaptive formats (HLS, DASH) that\n    * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n    * @param  {Function} handler  The source handler\n    * @param  {Boolean}  first    Register it before any existing handlers\n    */\n   _Tech.registerSourceHandler = function(handler, index){\n    let handlers = _Tech.sourceHandlers;\n\n    if (!handlers) {\n      handlers = _Tech.sourceHandlers = [];\n    }\n\n    if (index === undefined) {\n      // add to the end of the list\n      index = handlers.length;\n    }\n\n    handlers.splice(index, 0, handler);\n  };\n\n  /*\n   * Check if the tech can support the given type\n   * @param  {String} type    The mimetype to check\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  _Tech.canPlayType = function(type){\n    let handlers = _Tech.sourceHandlers || [];\n    let can;\n\n    for (let i = 0; i < handlers.length; i++) {\n      can = handlers[i].canPlayType(type);\n\n      if (can) {\n        return can;\n      }\n    }\n\n    return '';\n  };\n\n   /*\n    * Return the first source handler that supports the source\n    * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n    * @param  {Object} source The source object\n    * @returns {Object}       The first source handler that supports the source\n    * @returns {null}         Null if no source handler is found\n    */\n   _Tech.selectSourceHandler = function(source){\n    let handlers = _Tech.sourceHandlers || [];\n    let can;\n\n    for (let i = 0; i < handlers.length; i++) {\n      can = handlers[i].canHandleSource(source);\n\n      if (can) {\n        return handlers[i];\n      }\n    }\n\n    return null;\n  };\n\n  /*\n   * Check if the tech can support the given source\n   * @param  {Object} srcObj  The source object\n   * @return {String}         'probably', 'maybe', or '' (empty string)\n   */\n  _Tech.canPlaySource = function(srcObj){\n    let sh = _Tech.selectSourceHandler(srcObj);\n\n    if (sh) {\n      return sh.canHandleSource(srcObj);\n    }\n\n    return '';\n  };\n\n  /*\n   * When using a source handler, prefer its implementation of\n   * any function normally provided by the tech.\n   */\n  let deferrable = [\n      'seekable',\n      'duration'\n    ];\n\n  deferrable.forEach(function (fnName) {\n    let originalFn = this[fnName];\n\n    if (typeof originalFn !== 'function') {\n      return;\n    }\n\n    this[fnName] = function() {\n      if (this.sourceHandler_ && this.sourceHandler_[fnName]) {\n        return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments);\n      }\n      return originalFn.apply(this, arguments);\n    };\n  }, _Tech.prototype);\n\n   /*\n    * Create a function for setting the source using a source object\n    * and source handlers.\n    * Should never be called unless a source handler was found.\n    * @param {Object} source  A source object with src and type keys\n    * @return {Tech} self\n    */\n   _Tech.prototype.setSource = function(source){\n    let sh = _Tech.selectSourceHandler(source);\n\n    if (!sh) {\n      // Fall back to a native source hander when unsupported sources are\n      // deliberately set\n      if (_Tech.nativeSourceHandler) {\n        sh = _Tech.nativeSourceHandler;\n      } else {\n        log.error('No source hander found for the current source.');\n      }\n    }\n\n    // Dispose any existing source handler\n    this.disposeSourceHandler();\n    this.off('dispose', this.disposeSourceHandler);\n\n    this.currentSource_ = source;\n    this.sourceHandler_ = sh.handleSource(source, this);\n    this.on('dispose', this.disposeSourceHandler);\n\n    return this;\n  };\n\n   /*\n    * Clean up any existing source handler\n    */\n   _Tech.prototype.disposeSourceHandler = function(){\n    if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n      this.sourceHandler_.dispose();\n    }\n  };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nTech.registerTech('Tech', Tech);\nexport default Tech;\n","/**\n * @file html-track-element-list.js\n */\n\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\nclass HtmlTrackElementList {\n  constructor(trackElements = []) {\n    let list = this;\n\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n\n      for (let prop in HtmlTrackElementList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = HtmlTrackElementList.prototype[prop];\n        }\n      }\n    }\n\n    list.trackElements_ = [];\n\n    Object.defineProperty(list, 'length', {\n      get() {\n        return this.trackElements_.length;\n      }\n    });\n\n    for (let i = 0, length = trackElements.length; i < length; i++) {\n      list.addTrackElement_(trackElements[i]);\n    }\n\n    if (browser.IS_IE8) {\n      return list;\n    }\n  }\n\n  addTrackElement_(trackElement) {\n    this.trackElements_.push(trackElement);\n  }\n\n  getTrackElementByTrack_(track) {\n    let trackElement_;\n\n    for (let i = 0, length = this.trackElements_.length; i < length; i++) {\n      if (track === this.trackElements_[i].track) {\n        trackElement_ = this.trackElements_[i];\n\n        break;\n      }\n    }\n\n    return trackElement_;\n  }\n\n  removeTrackElement_(trackElement) {\n    for (let i = 0, length = this.trackElements_.length; i < length; i++) {\n      if (trackElement === this.trackElements_[i]) {\n        this.trackElements_.splice(i, 1);\n\n        break;\n      }\n    }\n  }\n}\n\nexport default HtmlTrackElementList;\n","/**\n * @file html-track-element.js\n */\n\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport EventTarget from '../event-target';\nimport TextTrack from '../tracks/text-track';\n\nconst NONE = 0;\nconst LOADING = 1;\nconst LOADED = 2;\nconst ERROR = 3;\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement\n *\n * interface HTMLTrackElement : HTMLElement {\n *   attribute DOMString kind;\n *   attribute DOMString src;\n *   attribute DOMString srclang;\n *   attribute DOMString label;\n *   attribute boolean default;\n *\n *   const unsigned short NONE = 0;\n *   const unsigned short LOADING = 1;\n *   const unsigned short LOADED = 2;\n *   const unsigned short ERROR = 3;\n *   readonly attribute unsigned short readyState;\n *\n *   readonly attribute TextTrack track;\n * };\n *\n * @param {Object} options TextTrack configuration\n * @class HTMLTrackElement\n */\n\nclass HTMLTrackElement extends EventTarget {\n  constructor(options = {}) {\n    super();\n\n    let readyState,\n        trackElement = this;\n\n    if (browser.IS_IE8) {\n      trackElement = document.createElement('custom');\n\n      for (let prop in HTMLTrackElement.prototype) {\n        if (prop !== 'constructor') {\n          trackElement[prop] = HTMLTrackElement.prototype[prop];\n        }\n      }\n    }\n\n    let track = new TextTrack(options);\n\n    trackElement.kind = track.kind;\n    trackElement.src = track.src;\n    trackElement.srclang = track.language;\n    trackElement.label = track.label;\n    trackElement.default = track.default;\n\n    Object.defineProperty(trackElement, 'readyState', {\n      get() {\n        return readyState;\n      }\n    });\n\n    Object.defineProperty(trackElement, 'track', {\n      get() {\n        return track;\n      }\n    });\n\n    readyState = NONE;\n\n    track.addEventListener('loadeddata', function() {\n      readyState = LOADED;\n\n      trackElement.trigger({\n        type: 'load',\n        target: trackElement\n      });\n    });\n\n    if (browser.IS_IE8) {\n      return trackElement;\n    }\n  }\n}\n\nHTMLTrackElement.prototype.allowedEvents_ = {\n  load: 'load'\n};\n\nHTMLTrackElement.NONE = NONE;\nHTMLTrackElement.LOADING = LOADING;\nHTMLTrackElement.LOADED = LOADED;\nHTMLTrackElement.ERROR = ERROR;\n\nexport default HTMLTrackElement;\n","/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * A List of text track cues as defined in:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n *   readonly attribute unsigned long length;\n *   getter TextTrackCue (unsigned long index);\n *   TextTrackCue? getCueById(DOMString id);\n * };\n *\n * @param {Array} cues A list of cues to be initialized with\n * @class TextTrackCueList\n */\n\nclass TextTrackCueList {\n  constructor(cues) {\n    let list = this;\n\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n\n      for (let prop in TextTrackCueList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TextTrackCueList.prototype[prop];\n        }\n      }\n    }\n\n    TextTrackCueList.prototype.setCues_.call(list, cues);\n\n    Object.defineProperty(list, 'length', {\n      get() {\n        return this.length_;\n      }\n    });\n\n    if (browser.IS_IE8) {\n      return list;\n    }\n  }\n\n  /**\n   * A setter for cues in this list\n   *\n   * @param {Array} cues an array of cues\n   * @method setCues_\n   * @private\n   */\n  setCues_(cues) {\n    let oldLength = this.length || 0;\n    let i = 0;\n    let l = cues.length;\n\n    this.cues_ = cues;\n    this.length_ = cues.length;\n\n    let defineProp = function(index) {\n      if (!('' + index in this)) {\n        Object.defineProperty(this, '' + index, {\n          get() {\n            return this.cues_[index];\n          }\n        });\n      }\n    };\n\n    if (oldLength < l) {\n      i = oldLength;\n\n      for (; i < l; i++) {\n        defineProp.call(this, i);\n      }\n    }\n  }\n\n  /**\n   * Get a cue that is currently in the Cue list by id\n   *\n   * @param {String} id\n   * @method getCueById\n   * @return {Object} a single cue\n   */\n  getCueById(id) {\n    let result = null;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      let cue = this[i];\n\n      if (cue.id === id) {\n        result = cue;\n        break;\n      }\n    }\n\n    return result;\n  }\n}\n\nexport default TextTrackCueList;\n","/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n  monospace:             'monospace',\n  sansSerif:             'sans-serif',\n  serif:                 'serif',\n  monospaceSansSerif:    '\"Andale Mono\", \"Lucida Console\", monospace',\n  monospaceSerif:        '\"Courier New\", monospace',\n  proportionalSansSerif: 'sans-serif',\n  proportionalSerif:     'serif',\n  casual:                '\"Comic Sans MS\", Impact, fantasy',\n  script:                '\"Monotype Corsiva\", cursive',\n  smallcaps:             '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready    Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n  constructor(player, options, ready){\n    super(player, options, ready);\n\n    player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n    player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n    // This used to be called during player init, but was causing an error\n    // if a track should show by default and the display hadn't loaded yet.\n    // Should probably be moved to an external track loader when we support\n    // tracks that don't need a display.\n    player.ready(Fn.bind(this, function() {\n      if (player.tech_ && player.tech_['featuresNativeTextTracks']) {\n        this.hide();\n        return;\n      }\n\n      player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n      let tracks = this.options_.playerOptions['tracks'] || [];\n      for (let i = 0; i < tracks.length; i++) {\n        let track = tracks[i];\n        this.player_.addRemoteTextTrack(track);\n      }\n\n      let modes = {'captions': 1, 'subtitles': 1};\n      let trackList = this.player_.textTracks();\n      let firstDesc;\n      let firstCaptions;\n\n      if (trackList) {\n        for (let i = 0; i < trackList.length; i++) {\n          let track = trackList[i];\n          if (track.default) {\n            if (track.kind === 'descriptions' && !firstDesc) {\n              firstDesc = track;\n            } else if (track.kind in modes && !firstCaptions) {\n              firstCaptions = track;\n            }\n          }\n        }\n\n        // We want to show the first default track but captions and subtitles\n        // take precedence over descriptions.\n        // So, display the first default captions or subtitles track\n        // and otherwise the first default descriptions track.\n        if (firstCaptions) {\n          firstCaptions.mode = 'showing';\n        } else if (firstDesc) {\n          firstDesc.mode = 'showing';\n        }\n      }\n    }));\n  }\n\n  /**\n   * Toggle display texttracks\n   *\n   * @method toggleDisplay\n   */\n  toggleDisplay() {\n    if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-text-track-display'\n    }, {\n      'aria-live': 'assertive',\n      'aria-atomic': 'true'\n    });\n  }\n\n  /**\n   * Clear display texttracks\n   *\n   * @method clearDisplay\n   */\n  clearDisplay() {\n    if (typeof window['WebVTT'] === 'function') {\n      window['WebVTT']['processCues'](window, [], this.el_);\n    }\n  }\n\n  /**\n   * Update display texttracks\n   *\n   * @method updateDisplay\n   */\n  updateDisplay() {\n    var tracks = this.player_.textTracks();\n\n    this.clearDisplay();\n\n    if (!tracks) {\n      return;\n    }\n\n    // Track display prioritization model: if multiple tracks are 'showing',\n    //  display the first 'subtitles' or 'captions' track which is 'showing',\n    //  otherwise display the first 'descriptions' track which is 'showing'\n\n    let descriptionsTrack = null;\n    let captionsSubtitlesTrack = null;\n\n    let i = tracks.length;\n    while (i--) {\n      let track = tracks[i];\n      if (track['mode'] === 'showing') {\n        if (track['kind'] === 'descriptions') {\n          descriptionsTrack = track;\n        } else {\n          captionsSubtitlesTrack = track;\n        }\n      }\n    }\n\n    if (captionsSubtitlesTrack) {\n      this.updateForTrack(captionsSubtitlesTrack);\n    } else if (descriptionsTrack) {\n      this.updateForTrack(descriptionsTrack);\n    }\n  }\n\n  /**\n   * Add texttrack to texttrack list\n   *\n   * @param {TextTrackObject} track Texttrack object to be added to list\n   * @method updateForTrack\n   */\n  updateForTrack(track) {\n    if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n      return;\n    }\n\n    let overrides = this.player_['textTrackSettings'].getValues();\n\n    let cues = [];\n    for (let i = 0; i < track['activeCues'].length; i++) {\n      cues.push(track['activeCues'][i]);\n    }\n\n    window['WebVTT']['processCues'](window, cues, this.el_);\n\n    let i = cues.length;\n    while (i--) {\n      let cue = cues[i];\n      if (!cue) {\n        continue;\n      }\n\n      let cueDiv = cue.displayState;\n      if (overrides.color) {\n        cueDiv.firstChild.style.color = overrides.color;\n      }\n      if (overrides.textOpacity) {\n        tryUpdateStyle(cueDiv.firstChild,\n                       'color',\n                       constructColor(overrides.color || '#fff',\n                                      overrides.textOpacity));\n      }\n      if (overrides.backgroundColor) {\n        cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n      }\n      if (overrides.backgroundOpacity) {\n        tryUpdateStyle(cueDiv.firstChild,\n                       'backgroundColor',\n                       constructColor(overrides.backgroundColor || '#000',\n                                      overrides.backgroundOpacity));\n      }\n      if (overrides.windowColor) {\n        if (overrides.windowOpacity) {\n          tryUpdateStyle(cueDiv,\n                         'backgroundColor',\n                         constructColor(overrides.windowColor, overrides.windowOpacity));\n        } else {\n          cueDiv.style.backgroundColor = overrides.windowColor;\n        }\n      }\n      if (overrides.edgeStyle) {\n        if (overrides.edgeStyle === 'dropshadow') {\n          cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n        } else if (overrides.edgeStyle === 'raised') {\n          cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n        } else if (overrides.edgeStyle === 'depressed') {\n          cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n        } else if (overrides.edgeStyle === 'uniform') {\n          cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n        }\n      }\n      if (overrides.fontPercent && overrides.fontPercent !== 1) {\n        const fontSize = window.parseFloat(cueDiv.style.fontSize);\n        cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n        cueDiv.style.height = 'auto';\n        cueDiv.style.top = 'auto';\n        cueDiv.style.bottom = '2px';\n      }\n      if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n        if (overrides.fontFamily === 'small-caps') {\n          cueDiv.firstChild.style.fontVariant = 'small-caps';\n        } else {\n          cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n        }\n      }\n    }\n  }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n  return 'rgba(' +\n    // color looks like \"#f0e\"\n    parseInt(color[1] + color[1], 16) + ',' +\n    parseInt(color[2] + color[2], 16) + ',' +\n    parseInt(color[3] + color[3], 16) + ',' +\n    opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n  //\n  try {\n    el.style[style] = rule;\n  } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n","/**\n * @file text-track-enums.js\n */\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\",  \"hidden\",  \"showing\" };\n */\nconst TextTrackMode = {\n  disabled: 'disabled',\n  hidden: 'hidden',\n  showing: 'showing'\n};\n\n/**\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind {\n *   \"subtitles\",\n *   \"captions\",\n *   \"descriptions\",\n *   \"chapters\",\n *   \"metadata\"\n * };\n */\nconst TextTrackKind = {\n  subtitles: 'subtitles',\n  captions: 'captions',\n  descriptions: 'descriptions',\n  chapters: 'chapters',\n  metadata: 'metadata'\n};\n\n/* jshint ignore:start */\n// we ignore jshint here because it does not see\n// TextTrackMode or TextTrackKind as defined here somehow...\nexport { TextTrackMode, TextTrackKind };\n/* jshint ignore:end */\n","/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n  let ret = ['kind', 'label', 'language', 'id',\n             'inBandMetadataTrackDispatchType',\n             'mode', 'src'].reduce((acc, prop, i) => {\n    if (track[prop]) {\n      acc[prop] = track[prop];\n    }\n    \n    return acc;\n  }, {\n    cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n      return {\n        startTime: cue.startTime,\n        endTime: cue.endTime,\n        text: cue.text,\n        id: cue.id\n      };\n    })\n  });\n\n  return ret;\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n\n  let trackEls = tech.$$('track');\n\n  let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n  let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n    let json = trackToJson_(trackEl.track);\n    if (trackEl.src) {\n      json.src = trackEl.src;\n    }\n    return json;\n  });\n\n  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n    return trackObjs.indexOf(track) === -1;\n  }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n  json.forEach(function(track) {\n    let addedTrack = tech.addRemoteTextTrack(track).track;\n    if (!track.src && track.cues) {\n      track.cues.forEach((cue) => addedTrack.addCue(cue));\n    }\n  });\n\n  return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n","/**\n * @file text-track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/**\n * A text track list as defined in:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n *   readonly attribute unsigned long length;\n *   getter TextTrack (unsigned long index);\n *   TextTrack? getTrackById(DOMString id);\n *\n *   attribute EventHandler onchange;\n *   attribute EventHandler onaddtrack;\n *   attribute EventHandler onremovetrack;\n * };\n *\n * @param {Track[]} tracks A list of tracks to initialize the list with\n * @extends EventTarget\n * @class TextTrackList\n */\n\nclass TextTrackList extends EventTarget {\n  constructor(tracks = []) {\n    super();\n    let list = this;\n\n    if (browser.IS_IE8) {\n      list = document.createElement('custom');\n\n      for (let prop in TextTrackList.prototype) {\n        if (prop !== 'constructor') {\n          list[prop] = TextTrackList.prototype[prop];\n        }\n      }\n    }\n\n    list.tracks_ = [];\n\n    Object.defineProperty(list, 'length', {\n      get() {\n        return this.tracks_.length;\n      }\n    });\n\n    for (let i = 0; i < tracks.length; i++) {\n      list.addTrack_(tracks[i]);\n    }\n\n    if (browser.IS_IE8) {\n      return list;\n    }\n  }\n\n  /**\n   * Add TextTrack from TextTrackList\n   *\n   * @param {TextTrack} track\n   * @method addTrack_\n   * @private\n   */\n  addTrack_(track) {\n    let index = this.tracks_.length;\n\n    if (!('' + index in this)) {\n      Object.defineProperty(this, index, {\n        get() {\n          return this.tracks_[index];\n        }\n      });\n    }\n\n    track.addEventListener('modechange', Fn.bind(this, function() {\n      this.trigger('change');\n    }));\n\n    // Do not add duplicate tracks\n    if (this.tracks_.indexOf(track) === -1) {\n      this.tracks_.push(track);\n      this.trigger({\n        track,\n        type: 'addtrack'\n      });\n    }\n\n  }\n\n  /**\n   * Remove TextTrack from TextTrackList\n   * NOTE: Be mindful of what is passed in as it may be a HTMLTrackElement\n   *\n   * @param {TextTrack} rtrack\n   * @method removeTrack_\n   * @private\n   */\n  removeTrack_(rtrack) {\n    let track;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      if (this[i] === rtrack) {\n        track = this[i];\n        if (track.off) {\n          track.off();\n        }\n\n        this.tracks_.splice(i, 1);\n\n        break;\n      }\n    }\n\n    if (!track) {\n      return;\n    }\n\n    this.trigger({\n      track,\n      type: 'removetrack'\n    });\n  }\n\n  /**\n   * Get a TextTrack from TextTrackList by a tracks id\n   *\n   * @param {String} id - the id of the track to get\n   * @method getTrackById\n   * @return {TextTrack}\n   * @private\n   */\n  getTrackById(id) {\n    let result = null;\n\n    for (let i = 0, l = this.length; i < l; i++) {\n      let track = this[i];\n\n      if (track.id === id) {\n        result = track;\n        break;\n      }\n    }\n\n    return result;\n  }\n}\n\n/**\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTextTrackList.prototype.allowedEvents_ = {\n  change: 'change',\n  addtrack: 'addtrack',\n  removetrack: 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n  TextTrackList.prototype['on' + event] = null;\n}\n\nexport default TextTrackList;\n","/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player  Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n  constructor(player, options) {\n    super(player, options);\n    this.hide();\n\n    // Grab `persistTextTrackSettings` from the player options if not passed in child options\n    if (options.persistTextTrackSettings === undefined) {\n      this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n    }\n\n    Events.on(this.$('.vjs-done-button'), 'click', Fn.bind(this, function() {\n      this.saveSettings();\n      this.hide();\n    }));\n\n    Events.on(this.$('.vjs-default-button'), 'click', Fn.bind(this, function() {\n      this.$('.vjs-fg-color > select').selectedIndex = 0;\n      this.$('.vjs-bg-color > select').selectedIndex = 0;\n      this.$('.window-color > select').selectedIndex = 0;\n      this.$('.vjs-text-opacity > select').selectedIndex = 0;\n      this.$('.vjs-bg-opacity > select').selectedIndex = 0;\n      this.$('.vjs-window-opacity > select').selectedIndex = 0;\n      this.$('.vjs-edge-style select').selectedIndex = 0;\n      this.$('.vjs-font-family select').selectedIndex = 0;\n      this.$('.vjs-font-percent select').selectedIndex = 2;\n      this.updateDisplay();\n    }));\n\n    Events.on(this.$('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n    Events.on(this.$('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n    if (this.options_.persistTextTrackSettings) {\n      this.restoreSettings();\n    }\n  }\n\n  /**\n   * Create the component's DOM element\n   *\n   * @return {Element}\n   * @method createEl\n   */\n  createEl() {\n    return super.createEl('div', {\n      className: 'vjs-caption-settings vjs-modal-overlay',\n      innerHTML: captionOptionsMenuTemplate()\n    });\n  }\n\n  /**\n   * Get texttrack settings\n   * Settings are\n   * .vjs-edge-style\n   * .vjs-font-family\n   * .vjs-fg-color\n   * .vjs-text-opacity\n   * .vjs-bg-color\n   * .vjs-bg-opacity\n   * .window-color\n   * .vjs-window-opacity\n   *\n   * @return {Object}\n   * @method getValues\n   */\n  getValues() {\n    const textEdge = getSelectedOptionValue(this.$('.vjs-edge-style select'));\n    const fontFamily = getSelectedOptionValue(this.$('.vjs-font-family select'));\n    const fgColor = getSelectedOptionValue(this.$('.vjs-fg-color > select'));\n    const textOpacity = getSelectedOptionValue(this.$('.vjs-text-opacity > select'));\n    const bgColor = getSelectedOptionValue(this.$('.vjs-bg-color > select'));\n    const bgOpacity = getSelectedOptionValue(this.$('.vjs-bg-opacity > select'));\n    const windowColor = getSelectedOptionValue(this.$('.window-color > select'));\n    const windowOpacity = getSelectedOptionValue(this.$('.vjs-window-opacity > select'));\n    const fontPercent = window['parseFloat'](getSelectedOptionValue(this.$('.vjs-font-percent > select')));\n\n    let result = {\n      'backgroundOpacity': bgOpacity,\n      'textOpacity': textOpacity,\n      'windowOpacity': windowOpacity,\n      'edgeStyle': textEdge,\n      'fontFamily': fontFamily,\n      'color': fgColor,\n      'backgroundColor': bgColor,\n      'windowColor': windowColor,\n      'fontPercent': fontPercent\n    };\n    for (let name in result) {\n      if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n        delete result[name];\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Set texttrack settings\n   * Settings are\n   * .vjs-edge-style\n   * .vjs-font-family\n   * .vjs-fg-color\n   * .vjs-text-opacity\n   * .vjs-bg-color\n   * .vjs-bg-opacity\n   * .window-color\n   * .vjs-window-opacity\n   *\n   * @param {Object} values Object with texttrack setting values\n   * @method setValues\n   */\n  setValues(values) {\n    setSelectedOption(this.$('.vjs-edge-style select'), values.edgeStyle);\n    setSelectedOption(this.$('.vjs-font-family select'), values.fontFamily);\n    setSelectedOption(this.$('.vjs-fg-color > select'), values.color);\n    setSelectedOption(this.$('.vjs-text-opacity > select'), values.textOpacity);\n    setSelectedOption(this.$('.vjs-bg-color > select'), values.backgroundColor);\n    setSelectedOption(this.$('.vjs-bg-opacity > select'), values.backgroundOpacity);\n    setSelectedOption(this.$('.window-color > select'), values.windowColor);\n    setSelectedOption(this.$('.vjs-window-opacity > select'), values.windowOpacity);\n\n    let fontPercent = values.fontPercent;\n\n    if (fontPercent) {\n      fontPercent = fontPercent.toFixed(2);\n    }\n\n    setSelectedOption(this.$('.vjs-font-percent > select'), fontPercent);\n  }\n\n  /**\n   * Restore texttrack settings\n   *\n   * @method restoreSettings\n   */\n  restoreSettings() {\n    let err, values;\n\n    try {\n      [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n      if (err) {\n        log.error(err);\n      }\n    } catch (e) {\n      log.warn(e);\n    }\n\n    if (values) {\n      this.setValues(values);\n    }\n  }\n\n  /**\n   * Save texttrack settings to local storage\n   *\n   * @method saveSettings\n   */\n  saveSettings() {\n    if (!this.options_.persistTextTrackSettings) {\n      return;\n    }\n\n    let values = this.getValues();\n    try {\n      if (Object.getOwnPropertyNames(values).length > 0) {\n        window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n      } else {\n        window.localStorage.removeItem('vjs-text-track-settings');\n      }\n    } catch (e) {\n      log.warn(e);\n    }\n  }\n\n  /**\n   * Update display of texttrack settings\n   *\n   * @method updateDisplay\n   */\n  updateDisplay() {\n    let ttDisplay = this.player_.getChild('textTrackDisplay');\n    if (ttDisplay) {\n      ttDisplay.updateDisplay();\n    }\n  }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n  let selectedOption;\n  // not all browsers support selectedOptions, so, fallback to options\n  if (target.selectedOptions) {\n    selectedOption = target.selectedOptions[0];\n  } else if (target.options) {\n    selectedOption = target.options[target.options.selectedIndex];\n  }\n\n  return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n  if (!value) {\n    return;\n  }\n\n  let i;\n  for (i = 0; i < target.options.length; i++) {\n    const option = target.options[i];\n    if (option.value === value) {\n      break;\n    }\n  }\n\n  target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n  let template = `<div class=\"vjs-tracksettings\">\n      <div class=\"vjs-tracksettings-colors\">\n        <div class=\"vjs-fg-color vjs-tracksetting\">\n            <label class=\"vjs-label\">Foreground</label>\n            <select>\n              <option value=\"\">---</option>\n              <option value=\"#FFF\">White</option>\n              <option value=\"#000\">Black</option>\n              <option value=\"#F00\">Red</option>\n              <option value=\"#0F0\">Green</option>\n              <option value=\"#00F\">Blue</option>\n              <option value=\"#FF0\">Yellow</option>\n              <option value=\"#F0F\">Magenta</option>\n              <option value=\"#0FF\">Cyan</option>\n            </select>\n            <span class=\"vjs-text-opacity vjs-opacity\">\n              <select>\n                <option value=\"\">---</option>\n                <option value=\"1\">Opaque</option>\n                <option value=\"0.5\">Semi-Opaque</option>\n              </select>\n            </span>\n        </div> <!-- vjs-fg-color -->\n        <div class=\"vjs-bg-color vjs-tracksetting\">\n            <label class=\"vjs-label\">Background</label>\n            <select>\n              <option value=\"\">---</option>\n              <option value=\"#FFF\">White</option>\n              <option value=\"#000\">Black</option>\n              <option value=\"#F00\">Red</option>\n              <option value=\"#0F0\">Green</option>\n              <option value=\"#00F\">Blue</option>\n              <option value=\"#FF0\">Yellow</option>\n              <option value=\"#F0F\">Magenta</option>\n              <option value=\"#0FF\">Cyan</option>\n            </select>\n            <span class=\"vjs-bg-opacity vjs-opacity\">\n                <select>\n                  <option value=\"\">---</option>\n                  <option value=\"1\">Opaque</option>\n                  <option value=\"0.5\">Semi-Transparent</option>\n                  <option value=\"0\">Transparent</option>\n                </select>\n            </span>\n        </div> <!-- vjs-bg-color -->\n        <div class=\"window-color vjs-tracksetting\">\n            <label class=\"vjs-label\">Window</label>\n            <select>\n              <option value=\"\">---</option>\n              <option value=\"#FFF\">White</option>\n              <option value=\"#000\">Black</option>\n              <option value=\"#F00\">Red</option>\n              <option value=\"#0F0\">Green</option>\n              <option value=\"#00F\">Blue</option>\n              <option value=\"#FF0\">Yellow</option>\n              <option value=\"#F0F\">Magenta</option>\n              <option value=\"#0FF\">Cyan</option>\n            </select>\n            <span class=\"vjs-window-opacity vjs-opacity\">\n                <select>\n                  <option value=\"\">---</option>\n                  <option value=\"1\">Opaque</option>\n                  <option value=\"0.5\">Semi-Transparent</option>\n                  <option value=\"0\">Transparent</option>\n                </select>\n            </span>\n        </div> <!-- vjs-window-color -->\n      </div> <!-- vjs-tracksettings -->\n      <div class=\"vjs-tracksettings-font\">\n        <div class=\"vjs-font-percent vjs-tracksetting\">\n          <label class=\"vjs-label\">Font Size</label>\n          <select>\n            <option value=\"0.50\">50%</option>\n            <option value=\"0.75\">75%</option>\n            <option value=\"1.00\" selected>100%</option>\n            <option value=\"1.25\">125%</option>\n            <option value=\"1.50\">150%</option>\n            <option value=\"1.75\">175%</option>\n            <option value=\"2.00\">200%</option>\n            <option value=\"3.00\">300%</option>\n            <option value=\"4.00\">400%</option>\n          </select>\n        </div> <!-- vjs-font-percent -->\n        <div class=\"vjs-edge-style vjs-tracksetting\">\n          <label class=\"vjs-label\">Text Edge Style</label>\n          <select>\n            <option value=\"none\">None</option>\n            <option value=\"raised\">Raised</option>\n            <option value=\"depressed\">Depressed</option>\n            <option value=\"uniform\">Uniform</option>\n            <option value=\"dropshadow\">Dropshadow</option>\n          </select>\n        </div> <!-- vjs-edge-style -->\n        <div class=\"vjs-font-family vjs-tracksetting\">\n          <label class=\"vjs-label\">Font Family</label>\n          <select>\n            <option value=\"\">Default</option>\n            <option value=\"monospaceSerif\">Monospace Serif</option>\n            <option value=\"proportionalSerif\">Proportional Serif</option>\n            <option value=\"monospaceSansSerif\">Monospace Sans-Serif</option>\n            <option value=\"proportionalSansSerif\">Proportional Sans-Serif</option>\n            <option value=\"casual\">Casual</option>\n            <option value=\"script\">Script</option>\n            <option value=\"small-caps\">Small Caps</option>\n          </select>\n        </div> <!-- vjs-font-family -->\n      </div>\n    </div>\n    <div class=\"vjs-tracksettings-controls\">\n      <button class=\"vjs-default-button\">Defaults</button>\n      <button class=\"vjs-done-button\">Done</button>\n    </div>`;\n\n    return template;\n}\n\nexport default TextTrackSettings;\n","/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport { isCrossOrigin } from '../utils/url.js';\nimport XHR from 'xhr';\n\n/**\n * takes a webvtt file contents and parses it into cues\n *\n * @param {String} srcContent webVTT file contents\n * @param {Track} track track to addcues to\n */\nconst parseCues = function(srcContent, track) {\n  let parser = new window.WebVTT.Parser(window,\n                                        window.vttjs,\n                                        window.WebVTT.StringDecoder());\n  let errors = [];\n\n  parser.oncue = function(cue) {\n    track.addCue(cue);\n  };\n\n  parser.onparsingerror = function(error) {\n    errors.push(error);\n  };\n\n  parser.onflush = function() {\n    track.trigger({\n      type: 'loadeddata',\n      target: track\n    });\n  };\n\n  parser.parse(srcContent);\n  if (errors.length > 0) {\n    if (console.groupCollapsed) {\n      console.groupCollapsed(`Text Track parsing errors for ${track.src}`);\n    }\n    errors.forEach((error) => log.error(error));\n    if (console.groupEnd) {\n      console.groupEnd();\n    }\n  }\n\n  parser.flush();\n};\n\n\n/**\n * load a track from a  specifed url\n *\n * @param {String} src url to load track from\n * @param {Track} track track to addcues to\n */\nconst loadTrack = function(src, track) {\n  let opts = {\n    uri: src\n  };\n  let crossOrigin = isCrossOrigin(src);\n\n  if (crossOrigin) {\n    opts.cors = crossOrigin;\n  }\n\n  XHR(opts, Fn.bind(this, function(err, response, responseBody) {\n    if (err) {\n      return log.error(err, response);\n    }\n\n    track.loaded_ = true;\n\n    // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n    // NOTE: this is only used for the alt/video.novtt.js build\n    if (typeof window.WebVTT !== 'function') {\n      if (track.tech_) {\n        let loadHandler = () => parseCues(responseBody, track);\n        track.tech_.on('vttjsloaded', loadHandler);\n        track.tech_.on('vttjserror', () => {\n          log.error(`vttjs failed to load, stopping trying to process ${track.src}`);\n          track.tech_.off('vttjsloaded', loadHandler);\n        });\n\n      }\n    } else {\n      parseCues(responseBody, track);\n    }\n\n  }));\n};\n\n/**\n * A single text track as defined in:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n *   readonly attribute TextTrackKind kind;\n *   readonly attribute DOMString label;\n *   readonly attribute DOMString language;\n *\n *   readonly attribute DOMString id;\n *   readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n *   attribute TextTrackMode mode;\n *\n *   readonly attribute TextTrackCueList? cues;\n *   readonly attribute TextTrackCueList? activeCues;\n *\n *   void addCue(TextTrackCue cue);\n *   void removeCue(TextTrackCue cue);\n *\n *   attribute EventHandler oncuechange;\n * };\n *\n * @param {Object=} options Object of option names and values\n * @extends EventTarget\n * @class TextTrack\n */\nclass TextTrack extends EventTarget {\n  constructor(options = {}) {\n    super();\n    if (!options.tech) {\n      throw new Error('A tech was not provided.');\n    }\n\n    let tt = this;\n\n    if (browser.IS_IE8) {\n      tt = document.createElement('custom');\n\n      for (let prop in TextTrack.prototype) {\n        if (prop !== 'constructor') {\n          tt[prop] = TextTrack.prototype[prop];\n        }\n      }\n    }\n\n    tt.tech_ = options.tech;\n\n    let mode = TextTrackEnum.TextTrackMode[options.mode] || 'disabled';\n    let kind = TextTrackEnum.TextTrackKind[options.kind] || 'subtitles';\n    let default_ = options.default;\n    let label = options.label || '';\n    let language = options.language || options.srclang || '';\n    let id = options.id || 'vjs_text_track_' + Guid.newGUID();\n\n    if (kind === 'metadata' || kind === 'chapters') {\n      mode = 'hidden';\n    }\n\n    tt.cues_ = [];\n    tt.activeCues_ = [];\n\n    let cues = new TextTrackCueList(tt.cues_);\n    let activeCues = new TextTrackCueList(tt.activeCues_);\n    let changed = false;\n    let timeupdateHandler = Fn.bind(tt, function() {\n      this.activeCues;\n      if (changed) {\n        this.trigger('cuechange');\n        changed = false;\n      }\n    });\n\n    if (mode !== 'disabled') {\n      tt.tech_.on('timeupdate', timeupdateHandler);\n    }\n\n    Object.defineProperty(tt, 'kind', {\n      get() {\n        return kind;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'label', {\n      get() {\n        return label;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'language', {\n      get() {\n        return language;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'id', {\n      get() {\n        return id;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'default', {\n      get() {\n        return default_;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'mode', {\n      get() {\n        return mode;\n      },\n      set(newMode) {\n        if (!TextTrackEnum.TextTrackMode[newMode]) {\n          return;\n        }\n        mode = newMode;\n        if (mode === 'showing') {\n          this.tech_.on('timeupdate', timeupdateHandler);\n        }\n        this.trigger('modechange');\n      }\n    });\n\n    Object.defineProperty(tt, 'cues', {\n      get() {\n        if (!this.loaded_) {\n          return null;\n        }\n\n        return cues;\n      },\n      set() {}\n    });\n\n    Object.defineProperty(tt, 'activeCues', {\n      get() {\n        if (!this.loaded_) {\n          return null;\n        }\n\n        // nothing to do\n        if (this.cues.length === 0) {\n          return activeCues;\n        }\n\n        let ct = this.tech_.currentTime();\n        let active = [];\n\n        for (let i = 0, l = this.cues.length; i < l; i++) {\n          let cue = this.cues[i];\n\n          if (cue.startTime <= ct && cue.endTime >= ct) {\n            active.push(cue);\n          } else if (cue.startTime === cue.endTime &&\n                     cue.startTime <= ct &&\n                     cue.startTime + 0.5 >= ct) {\n            active.push(cue);\n          }\n        }\n\n        changed = false;\n\n        if (active.length !== this.activeCues_.length) {\n          changed = true;\n        } else {\n          for (let i = 0; i < active.length; i++) {\n            if (this.activeCues_.indexOf(active[i]) === -1) {\n              changed = true;\n            }\n          }\n        }\n\n        this.activeCues_ = active;\n        activeCues.setCues_(this.activeCues_);\n\n        return activeCues;\n      },\n      set() {}\n    });\n\n    if (options.src) {\n      tt.src = options.src;\n      loadTrack(options.src, tt);\n    } else {\n      tt.loaded_ = true;\n    }\n\n    if (browser.IS_IE8) {\n      return tt;\n    }\n  }\n\n  /**\n   * add a cue to the internal list of cues\n   *\n   * @param {Object} cue the cue to add to our internal list\n   * @method addCue\n   */\n  addCue(cue) {\n    let tracks = this.tech_.textTracks();\n\n    if (tracks) {\n      for (let i = 0; i < tracks.length; i++) {\n        if (tracks[i] !== this) {\n          tracks[i].removeCue(cue);\n        }\n      }\n    }\n\n    this.cues_.push(cue);\n    this.cues.setCues_(this.cues_);\n  }\n\n  /**\n   * remvoe a cue from our internal list\n   *\n   * @param {Object} removeCue the cue to remove from our internal list\n   * @method removeCue\n   */\n  removeCue(removeCue) {\n    let removed = false;\n\n    for (let i = 0, l = this.cues_.length; i < l; i++) {\n      let cue = this.cues_[i];\n\n      if (cue === removeCue) {\n        this.cues_.splice(i, 1);\n        removed = true;\n      }\n    }\n\n    if (removed) {\n      this.cues.setCues_(this.cues_);\n    }\n  }\n}\n\n/**\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n  cuechange: 'cuechange'\n};\n\nexport default TextTrack;\n","/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\n\n// The Facebook app's UIWebView identifies as both an iPhone and iPad, so\n// to identify iPhones, we need to exclude iPads.\n// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT) && !IS_IPAD;\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n  var match = USER_AGENT.match(/OS (\\d+)_/i);\n  if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n  // This matches Android Major.Minor.Patch versions\n  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n  var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n    major,\n    minor;\n\n  if (!match) {\n    return null;\n  }\n\n  major = match[1] && parseFloat(match[1]);\n  minor = match[2] && parseFloat(match[2]);\n\n  if (major && minor) {\n    return parseFloat(match[1] + '.' + match[2]);\n  } else if (major) {\n    return major;\n  } else {\n    return null;\n  }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_EDGE = (/Edge/i).test(USER_AGENT);\nexport const IS_CHROME = !IS_EDGE && (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n","/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param  {Object} Buffered object\n * @param  {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n  var bufferedDuration = 0,\n      start, end;\n\n  if (!duration) {\n    return 0;\n  }\n\n  if (!buffered || !buffered.length) {\n    buffered = createTimeRange(0, 0);\n  }\n\n  for (let i = 0; i < buffered.length; i++){\n    start = buffered.start(i);\n    end   = buffered.end(i);\n\n    // buffered end can be bigger than duration by a very small fraction\n    if (end > duration) {\n      end = duration;\n    }\n\n    bufferedDuration += end - start;\n  }\n\n  return bufferedDuration / duration;\n}\n","import log from './log.js';\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nconst defaultBehaviors = {\n  get(obj, key) {\n    return obj[key];\n  },\n  set(obj, key, value) {\n    obj[key] = value;\n    return true;\n  }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n *                          with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\nexport default (target, messages={}) => {\n  if (typeof Proxy === 'function') {\n    let handler = {};\n\n    // Build a handler object based on those keys that have both messages\n    // and default behaviors.\n    Object.keys(messages).forEach(key => {\n      if (defaultBehaviors.hasOwnProperty(key)) {\n        handler[key] = function() {\n          log.warn(messages[key]);\n          return defaultBehaviors[key].apply(this, arguments);\n        };\n      }\n    });\n\n    return new Proxy(target, handler);\n  }\n  return target;\n};\n","/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport  * as Guid from './guid.js';\nimport log from './log.js';\nimport tsml from 'tsml';\n\n/**\n * Detect if a value is a string with any non-whitespace characters.\n *\n * @param  {String} str\n * @return {Boolean}\n */\nfunction isNonBlankString(str) {\n  return typeof str === 'string' && /\\S/.test(str);\n}\n\n/**\n * Throws an error if the passed string has whitespace. This is used by\n * class methods to be relatively consistent with the classList API.\n *\n * @param  {String} str\n * @return {Boolean}\n */\nfunction throwIfWhitespace(str) {\n  if (/\\s/.test(str)) {\n    throw new Error('class has illegal whitespace characters');\n  }\n}\n\n/**\n * Produce a regular expression for matching a class name.\n *\n * @param  {String} className\n * @return {RegExp}\n */\nfunction classRegExp(className) {\n  return new RegExp('(^|\\\\s)' + className + '($|\\\\s)');\n}\n\n/**\n * Creates functions to query the DOM using a given method.\n *\n * @function createQuerier\n * @private\n * @param  {String} method\n * @return {Function}\n */\nfunction createQuerier(method) {\n  return function (selector, context) {\n    if (!isNonBlankString(selector)) {\n      return document[method](null);\n    }\n    if (isNonBlankString(context)) {\n      context = document.querySelector(context);\n    }\n    return (isEl(context) ? context : document)[method](selector);\n  };\n}\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param  {String} id  Element ID\n * @return {Element}    Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n  if (id.indexOf('#') === 0) {\n    id = id.slice(1);\n  }\n\n  return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param  {String} [tagName='div'] Name of tag to be created.\n * @param  {Object} [properties={}] Element properties to be applied.\n * @param  {Object} [attributes={}] Element attributes to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}, attributes={}){\n  let el = document.createElement(tagName);\n\n  Object.getOwnPropertyNames(properties).forEach(function(propName){\n    let val = properties[propName];\n\n    // See #2176\n    // We originally were accepting both properties and attributes in the\n    // same object, but that doesn't work so well.\n    if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n      log.warn(tsml`Setting attributes in the second argument of createEl()\n                has been deprecated. Use the third argument instead.\n                createEl(type, properties, attributes). Attempting to set ${propName} to ${val}.`);\n      el.setAttribute(propName, val);\n    } else {\n      el[propName] = val;\n    }\n  });\n\n  Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n    let val = attributes[attrName];\n    el.setAttribute(attrName, attributes[attrName]);\n  });\n\n  return el;\n}\n\n/**\n * Injects text into an element, replacing any existing contents entirely.\n *\n * @param  {Element} el\n * @param  {String} text\n * @return {Element}\n * @function textContent\n */\nexport function textContent(el, text) {\n  if (typeof el.textContent === 'undefined') {\n    el.innerText = text;\n  } else {\n    el.textContent = text;\n  }\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param  {Element} child   Element to insert\n * @param  {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n  if (parent.firstChild) {\n    parent.insertBefore(child, parent.firstChild);\n  } else {\n    parent.appendChild(child);\n  }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param  {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n  let id = el[elIdAttr];\n\n  if (!id) {\n    id = el[elIdAttr] = Guid.newGUID();\n  }\n\n  if (!elData[id]) {\n    elData[id] = {};\n  }\n\n  return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param  {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n  const id = el[elIdAttr];\n\n  if (!id) {\n    return false;\n  }\n\n  return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param  {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n  let id = el[elIdAttr];\n\n  if (!id) {\n    return;\n  }\n\n  // Remove all stored data\n  delete elData[id];\n\n  // Remove the elIdAttr property from the DOM node\n  try {\n    delete el[elIdAttr];\n  } catch(e) {\n    if (el.removeAttribute) {\n      el.removeAttribute(elIdAttr);\n    } else {\n      // IE doesn't appear to support removeAttribute on the document element\n      el[elIdAttr] = null;\n    }\n  }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @function hasElClass\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\nexport function hasElClass(element, classToCheck) {\n  if (element.classList) {\n    return element.classList.contains(classToCheck);\n  } else {\n    throwIfWhitespace(classToCheck);\n    return classRegExp(classToCheck).test(element.className);\n  }\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @function addElClass\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n */\nexport function addElClass(element, classToAdd) {\n  if (element.classList) {\n    element.classList.add(classToAdd);\n\n  // Don't need to `throwIfWhitespace` here because `hasElClass` will do it\n  // in the case of classList not being supported.\n  } else if (!hasElClass(element, classToAdd)) {\n    element.className = (element.className + ' ' + classToAdd).trim();\n  }\n\n  return element;\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @function removeElClass\n * @param {Element} element    Element to remove from class name\n * @param {String} classToRemove Classname to remove\n */\nexport function removeElClass(element, classToRemove) {\n  if (element.classList) {\n    element.classList.remove(classToRemove);\n  } else {\n    throwIfWhitespace(classToRemove);\n    element.className = element.className.split(/\\s+/).filter(function(c) {\n      return c !== classToRemove;\n    }).join(' ');\n  }\n\n  return element;\n}\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @function toggleElClass\n * @param    {Element} element\n * @param    {String} classToToggle\n * @param    {Boolean|Function} [predicate]\n *           Can be a function that returns a Boolean. If `true`, the class\n *           will be added; if `false`, the class will be removed. If not\n *           given, the class will be added if not present and vice versa.\n */\nexport function toggleElClass(element, classToToggle, predicate) {\n\n  // This CANNOT use `classList` internally because IE does not support the\n  // second parameter to the `classList.toggle()` method! Which is fine because\n  // `classList` will be used by the add/remove functions.\n  let has = hasElClass(element, classToToggle);\n\n  if (typeof predicate === 'function') {\n    predicate = predicate(element, classToToggle);\n  }\n\n  if (typeof predicate !== 'boolean') {\n    predicate = !has;\n  }\n\n  // If the necessary class operation matches the current state of the\n  // element, no action is required.\n  if (predicate === has) {\n    return;\n  }\n\n  if (predicate) {\n    addElClass(element, classToToggle);\n  } else {\n    removeElClass(element, classToToggle);\n  }\n\n  return element;\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param  {Element} el         Target element.\n * @param  {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n  Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n    let attrValue = attributes[attrName];\n\n    if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n      el.removeAttribute(attrName);\n    } else {\n      el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n    }\n  });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n  var obj, knownBooleans, attrs, attrName, attrVal;\n\n  obj = {};\n\n  // known boolean attributes\n  // we can check for matching boolean properties, but older browsers\n  // won't know about HTML5 boolean attributes that we still read from\n  knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n  if (tag && tag.attributes && tag.attributes.length > 0) {\n    attrs = tag.attributes;\n\n    for (var i = attrs.length - 1; i >= 0; i--) {\n      attrName = attrs[i].name;\n      attrVal = attrs[i].value;\n\n      // check for known booleans\n      // the matching element property will return a value for typeof\n      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n        // the value of an included boolean attribute is typically an empty\n        // string ('') which would equal false if we just check for a false value.\n        // we also don't want support bad code like autoplay='false'\n        attrVal = (attrVal !== null) ? true : false;\n      }\n\n      obj[attrName] = attrVal;\n    }\n  }\n\n  return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @function blockTextSelection\n */\nexport function blockTextSelection() {\n  document.body.focus();\n  document.onselectstart = function() {\n    return false;\n  };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @function unblockTextSelection\n */\nexport function unblockTextSelection() {\n  document.onselectstart = function() {\n    return true;\n  };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @function findElPosition\n * @param {Element} el Element from which to get offset\n * @return {Object}\n */\nexport function findElPosition(el) {\n  let box;\n\n  if (el.getBoundingClientRect && el.parentNode) {\n    box = el.getBoundingClientRect();\n  }\n\n  if (!box) {\n    return {\n      left: 0,\n      top: 0\n    };\n  }\n\n  const docEl = document.documentElement;\n  const body = document.body;\n\n  const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n  const scrollLeft = window.pageXOffset || body.scrollLeft;\n  const left = box.left + scrollLeft - clientLeft;\n\n  const clientTop = docEl.clientTop || body.clientTop || 0;\n  const scrollTop = window.pageYOffset || body.scrollTop;\n  const top = box.top + scrollTop - clientTop;\n\n  // Android sometimes returns slightly off decimal values, so need to round\n  return {\n    left: Math.round(left),\n    top: Math.round(top)\n  };\n}\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @function getPointerPosition\n * @param {Element} el Element on which to get the pointer position on\n * @param {Event} event Event object\n * @return {Object} This object will have x and y coordinates corresponding to the mouse position\n */\nexport function getPointerPosition(el, event) {\n  let position = {};\n  let box = findElPosition(el);\n  let boxW = el.offsetWidth;\n  let boxH = el.offsetHeight;\n\n  let boxY = box.top;\n  let boxX = box.left;\n  let pageY = event.pageY;\n  let pageX = event.pageX;\n\n  if (event.changedTouches) {\n    pageX = event.changedTouches[0].pageX;\n    pageY = event.changedTouches[0].pageY;\n  }\n\n  position.y = Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n  position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n  return position;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @function isEl\n * @param    {Mixed} value\n * @return   {Boolean}\n */\nexport function isEl(value) {\n  return !!value && typeof value === 'object' && value.nodeType === 1;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @param  {Mixed} value\n * @return {Boolean}\n */\nexport function isTextNode(value) {\n  return !!value && typeof value === 'object' && value.nodeType === 3;\n}\n\n/**\n * Empties the contents of an element.\n *\n * @function emptyEl\n * @param    {Element} el\n * @return   {Element}\n */\nexport function emptyEl(el) {\n  while (el.firstChild) {\n    el.removeChild(el.firstChild);\n  }\n  return el;\n}\n\n/**\n * Normalizes content for eventual insertion into the DOM.\n *\n * This allows a wide range of content definition methods, but protects\n * from falling into the trap of simply writing to `innerHTML`, which is\n * an XSS concern.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n *   Normalized into a text node.\n *\n * - Element, TextNode\n *   Passed through.\n *\n * - Array\n *   A one-dimensional array of strings, elements, nodes, or functions (which\n *   return single strings, elements, or nodes).\n *\n * - Function\n *   If the sole argument, is expected to produce a string, element,\n *   node, or array.\n *\n * @function normalizeContent\n * @param    {String|Element|TextNode|Array|Function} content\n * @return   {Array}\n */\nexport function normalizeContent(content) {\n\n  // First, invoke content if it is a function. If it produces an array,\n  // that needs to happen before normalization.\n  if (typeof content === 'function') {\n    content = content();\n  }\n\n  // Next up, normalize to an array, so one or many items can be normalized,\n  // filtered, and returned.\n  return (Array.isArray(content) ? content : [content]).map(value => {\n\n    // First, invoke value if it is a function to produce a new value,\n    // which will be subsequently normalized to a Node of some kind.\n    if (typeof value === 'function') {\n      value = value();\n    }\n\n    if (isEl(value) || isTextNode(value)) {\n      return value;\n    }\n\n    if (typeof value === 'string' && /\\S/.test(value)) {\n      return document.createTextNode(value);\n    }\n  }).filter(value => value);\n}\n\n/**\n * Normalizes and appends content to an element.\n *\n * @function appendContent\n * @param    {Element} el\n * @param    {String|Element|TextNode|Array|Function} content\n *           See: `normalizeContent`\n * @return   {Element}\n */\nexport function appendContent(el, content) {\n  normalizeContent(content).forEach(node => el.appendChild(node));\n  return el;\n}\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * @function insertContent\n * @param    {Element} el\n * @param    {String|Element|TextNode|Array|Function} content\n *           See: `normalizeContent`\n * @return   {Element}\n */\nexport function insertContent(el, content) {\n  return appendContent(emptyEl(el), content);\n}\n\n/**\n * Finds a single DOM element matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @function $\n * @param    {String} selector\n *           A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param    {Element|String} [context=document]\n *           A DOM element within which to query. Can also be a selector\n *           string in which case the first matching element will be used\n *           as context. If missing (or no element matches selector), falls\n *           back to `document`.\n *\n * @return   {Element|null}\n */\nexport const $ = createQuerier('querySelector');\n\n/**\n * Finds a all DOM elements matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @function $$\n * @param    {String} selector\n *           A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param    {Element|String} [context=document]\n *           A DOM element within which to query. Can also be a selector\n *           string in which case the first matching element will be used\n *           as context. If missing (or no element matches selector), falls\n *           back to `document`.\n *\n * @return   {NodeList}\n */\nexport const $$ = createQuerier('querySelectorAll');\n","/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport  * as Dom from './dom.js';\nimport  * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String|Array}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n  if (Array.isArray(type)) {\n    return _handleMultipleEvents(on, elem, type, fn);\n  }\n\n  let data = Dom.getElData(elem);\n\n  // We need a place to store all our handler data\n  if (!data.handlers) data.handlers = {};\n\n  if (!data.handlers[type]) data.handlers[type] = [];\n\n  if (!fn.guid) fn.guid = Guid.newGUID();\n\n  data.handlers[type].push(fn);\n\n  if (!data.dispatcher) {\n    data.disabled = false;\n\n    data.dispatcher = function (event, hash){\n\n      if (data.disabled) return;\n      event = fixEvent(event);\n\n      var handlers = data.handlers[event.type];\n\n      if (handlers) {\n        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n        var handlersCopy = handlers.slice(0);\n\n        for (var m = 0, n = handlersCopy.length; m < n; m++) {\n          if (event.isImmediatePropagationStopped()) {\n            break;\n          } else {\n            handlersCopy[m].call(elem, event, hash);\n          }\n        }\n      }\n    };\n  }\n\n  if (data.handlers[type].length === 1) {\n    if (elem.addEventListener) {\n      elem.addEventListener(type, data.dispatcher, false);\n    } else if (elem.attachEvent) {\n      elem.attachEvent('on' + type, data.dispatcher);\n    }\n  }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n  // Don't want to add a cache object through getElData if not needed\n  if (!Dom.hasElData(elem)) return;\n\n  let data = Dom.getElData(elem);\n\n  // If no events exist, nothing to unbind\n  if (!data.handlers) { return; }\n\n  if (Array.isArray(type)) {\n    return _handleMultipleEvents(off, elem, type, fn);\n  }\n\n  // Utility function\n  var removeType = function(t){\n     data.handlers[t] = [];\n     _cleanUpEvents(elem,t);\n  };\n\n  // Are we removing all bound events?\n  if (!type) {\n    for (let t in data.handlers) removeType(t);\n    return;\n  }\n\n  var handlers = data.handlers[type];\n\n  // If no handlers exist, nothing to unbind\n  if (!handlers) return;\n\n  // If no listener was provided, remove all listeners for type\n  if (!fn) {\n    removeType(type);\n    return;\n  }\n\n  // We're only removing a single handler\n  if (fn.guid) {\n    for (let n = 0; n < handlers.length; n++) {\n      if (handlers[n].guid === fn.guid) {\n        handlers.splice(n--, 1);\n      }\n    }\n  }\n\n  _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param  {Element|Object}      elem  Element to trigger an event on\n * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param  {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n  // Fetches element data and a reference to the parent (for bubbling).\n  // Don't want to add a data object to cache for every parent,\n  // so checking hasElData first.\n  var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n  var parent = elem.parentNode || elem.ownerDocument;\n      // type = event.type || event,\n      // handler;\n\n  // If an event name was passed as a string, creates an event out of it\n  if (typeof event === 'string') {\n    event = { type:event, target:elem };\n  }\n  // Normalizes the event properties.\n  event = fixEvent(event);\n\n  // If the passed element has a dispatcher, executes the established handlers.\n  if (elemData.dispatcher) {\n    elemData.dispatcher.call(elem, event, hash);\n  }\n\n  // Unless explicitly stopped or the event does not bubble (e.g. media events)\n    // recursively calls this function to bubble the event up the DOM.\n    if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n      trigger.call(null, parent, event, hash);\n\n  // If at the top of the DOM, triggers the default action unless disabled.\n  } else if (!parent && !event.defaultPrevented) {\n    var targetData = Dom.getElData(event.target);\n\n    // Checks if the target has a default action for this event.\n    if (event.target[event.type]) {\n      // Temporarily disables event dispatching on the target as we have already executed the handler.\n      targetData.disabled = true;\n      // Executes the default action.\n      if (typeof event.target[event.type] === 'function') {\n        event.target[event.type]();\n      }\n      // Re-enables event dispatching.\n      targetData.disabled = false;\n    }\n  }\n\n  // Inform the triggerer if the default was prevented by returning false\n  return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param  {Element|Object}   elem Element or object to\n * @param  {String|Array}   type Name/type of event\n * @param  {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n  if (Array.isArray(type)) {\n    return _handleMultipleEvents(one, elem, type, fn);\n  }\n  var func = function(){\n    off(elem, type, func);\n    fn.apply(this, arguments);\n  };\n  // copy the guid to the new function so it can removed using the original function's ID\n  func.guid = fn.guid = fn.guid || Guid.newGUID();\n  on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param  {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n  function returnTrue() { return true; }\n  function returnFalse() { return false; }\n\n  // Test if fixing up is needed\n  // Used to check if !event.stopPropagation instead of isPropagationStopped\n  // But native events return true for stopPropagation, but don't have\n  // other expected methods like isPropagationStopped. Seems to be a problem\n  // with the Javascript Ninja code. So we're just overriding all events now.\n  if (!event || !event.isPropagationStopped) {\n    var old = event || window.event;\n\n    event = {};\n    // Clone the old object so that we can modify the values event = {};\n    // IE8 Doesn't like when you mess with native event properties\n    // Firefox returns false for event.hasOwnProperty('type') and other props\n    //  which makes copying more difficult.\n    // TODO: Probably best to create a whitelist of event props\n    for (var key in old) {\n      // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n      // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n      // and webkitMovementX/Y\n      if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' &&\n          key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n        // Chrome 32+ warns if you try to copy deprecated returnValue, but\n        // we still want to if preventDefault isn't supported (IE8).\n        if (!(key === 'returnValue' && old.preventDefault)) {\n          event[key] = old[key];\n        }\n      }\n    }\n\n    // The event occurred on this element\n    if (!event.target) {\n      event.target = event.srcElement || document;\n    }\n\n    // Handle which other element the event is related to\n    if (!event.relatedTarget) {\n      event.relatedTarget = event.fromElement === event.target ?\n        event.toElement :\n        event.fromElement;\n    }\n\n    // Stop the default browser action\n    event.preventDefault = function () {\n      if (old.preventDefault) {\n        old.preventDefault();\n      }\n      event.returnValue = false;\n      old.returnValue = false;\n      event.defaultPrevented = true;\n    };\n\n    event.defaultPrevented = false;\n\n    // Stop the event from bubbling\n    event.stopPropagation = function () {\n      if (old.stopPropagation) {\n        old.stopPropagation();\n      }\n      event.cancelBubble = true;\n      old.cancelBubble = true;\n      event.isPropagationStopped = returnTrue;\n    };\n\n    event.isPropagationStopped = returnFalse;\n\n    // Stop the event from bubbling and executing other handlers\n    event.stopImmediatePropagation = function () {\n      if (old.stopImmediatePropagation) {\n        old.stopImmediatePropagation();\n      }\n      event.isImmediatePropagationStopped = returnTrue;\n      event.stopPropagation();\n    };\n\n    event.isImmediatePropagationStopped = returnFalse;\n\n    // Handle mouse position\n    if (event.clientX != null) {\n      var doc = document.documentElement, body = document.body;\n\n      event.pageX = event.clientX +\n        (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n        (doc && doc.clientLeft || body && body.clientLeft || 0);\n      event.pageY = event.clientY +\n        (doc && doc.scrollTop || body && body.scrollTop || 0) -\n        (doc && doc.clientTop || body && body.clientTop || 0);\n    }\n\n    // Handle key presses\n    event.which = event.charCode || event.keyCode;\n\n    // Fix button for mouse clicks:\n    // 0 == left; 1 == middle; 2 == right\n    if (event.button != null) {\n      event.button = (event.button & 1 ? 0 :\n        (event.button & 4 ? 1 :\n          (event.button & 2 ? 2 : 0)));\n    }\n  }\n\n  // Returns fixed-up instance\n  return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param  {Element|Object} elem Element to clean up\n * @param  {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n  var data = Dom.getElData(elem);\n\n  // Remove the events of a particular type if there are none left\n  if (data.handlers[type].length === 0) {\n    delete data.handlers[type];\n    // data.handlers[type] = null;\n    // Setting to null was causing an error with data.handlers\n\n    // Remove the meta-handler from the element\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, data.dispatcher, false);\n    } else if (elem.detachEvent) {\n      elem.detachEvent('on' + type, data.dispatcher);\n    }\n  }\n\n  // Remove the events object if there are no types left\n  if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n    delete data.handlers;\n    delete data.dispatcher;\n    delete data.disabled;\n  }\n\n  // Finally remove the element data if there is no data left\n  if (Object.getOwnPropertyNames(data).length === 0) {\n    Dom.removeElData(elem);\n  }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param  {Function} fn   The event method we want to use.\n * @param  {Element|Object} elem Element or object to bind listeners to\n * @param  {String}   type Type of event to bind to.\n * @param  {Function} callback   Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n  types.forEach(function(type) {\n    //Call the event method for each one of the types\n    fn(elem, type, callback);\n  });\n}\n","/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param  {*}   context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}   uid     An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n  // Make sure the function has a unique ID\n  if (!fn.guid) { fn.guid = newGUID(); }\n\n  // Create the new function that changes the context\n  let ret = function() {\n    return fn.apply(context, arguments);\n  };\n\n  // Allow for the ability to individualize this function\n  // Needed in the case where multiple objects might share the same prototype\n  // IF both items add an event listener with the same function, then you try to remove just one\n  // it will remove both because they both have the same guid.\n  // when using this, you need to use the bind method when you remove the listener as well.\n  // currently used in text tracks\n  ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n  return ret;\n};\n","/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n  seconds = seconds < 0 ? 0 : seconds;\n  let s = Math.floor(seconds % 60);\n  let m = Math.floor(seconds / 60 % 60);\n  let h = Math.floor(seconds / 3600);\n  const gm = Math.floor(guide / 60 % 60);\n  const gh = Math.floor(guide / 3600);\n\n  // handle invalid times\n  if (isNaN(seconds) || seconds === Infinity) {\n    // '-' is false for all relational operators (e.g. <, >=) so this setting\n    // will add the minimum number of fields specified by the guide\n    h = m = s = '-';\n  }\n\n  // Check if we need to show hours\n  h = (h > 0 || gh > 0) ? h + ':' : '';\n\n  // If hours are showing, we may need to add a leading zero.\n  // Always show at least one digit of minutes.\n  m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n  // Check if leading zero is need for seconds\n  s = (s < 10) ? '0' + s : s;\n\n  return h + m + s;\n}\n\nexport default formatTime;\n","/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n  return _guid++;\n}\n","/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n  _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n  _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n  _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param  {String} type The type of message, or `null` for `log`\n * @param  {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n  // convert args to an array to get array functions\n  let argsArray = Array.prototype.slice.call(args);\n  // if there's no console then don't try to output messages\n  // they will still be stored in log.history\n  // Was setting these once outside of this function, but containing them\n  // in the function makes it easier to test cases where console doesn't exist\n  let noop = function(){};\n\n  let console = window['console'] || {\n    'log': noop,\n    'warn': noop,\n    'error': noop\n  };\n\n  if (type) {\n    // add the type to the front of the message\n    argsArray.unshift(type.toUpperCase()+':');\n  } else {\n    // default to log with no prefix\n    type = 'log';\n  }\n\n  // add to history\n  log.history.push(argsArray);\n\n  // add console prefix after adding to history\n  argsArray.unshift('VIDEOJS:');\n\n  // call appropriate log function\n  if (console[type].apply) {\n    console[type].apply(console, argsArray);\n  } else {\n    // ie8 doesn't allow error.apply, but it will just join() the array anyway\n    console[type](argsArray.join(' '));\n  }\n}\n\nexport default log;\n","/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n  return !!obj\n    && typeof obj === 'object'\n    && obj.toString() === '[object Object]'\n    && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n  // If we're not working with a plain object, copy the value as is\n  // If source is an array, for instance, it will replace destination\n  if (!isPlain(source)) {\n    return source;\n  }\n\n  // If the new value is a plain object but the first object value is not\n  // we need to create a new object for the first object to merge with.\n  // This makes it consistent with how merge() works by default\n  // and also protects from later changes the to first object affecting\n  // the second object's values.\n  if (!isPlain(destination)) {\n    return mergeOptions(source);\n  }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties.  Previously `deepMerge`.\n *\n * @param  {...Object} source One or more objects to merge\n * @returns {Object}          a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n  // contruct the call dynamically to handle the variable number of\n  // objects to merge\n  let args = Array.prototype.slice.call(arguments);\n\n  // unshift an empty object into the front of the call as the target\n  // of the merge\n  args.unshift({});\n\n  // customize conflict resolution to match our historical merge behavior\n  args.push(customizer);\n\n  merge.apply(null, args);\n\n  // return the mutated result object\n  return args[0];\n}\n","import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n  let style = document.createElement('style');\n  style.className = className;\n\n  return style;\n};\n\nexport let setTextContent = function(el, content) {\n  if (el.styleSheet) {\n    el.styleSheet.cssText = content;\n  } else {\n    el.textContent = content;\n  }\n};\n","import log from './log.js';\n\n/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param  {(Number|Array)} Start of a single range or an array of ranges\n * @param  {Number} End of a single range\n * @private\n * @method createTimeRanges\n */\nexport function createTimeRanges(start, end){\n  if (Array.isArray(start)) {\n    return createTimeRangesObj(start);\n  } else if (start === undefined || end === undefined) {\n    return createTimeRangesObj();\n  }\n  return createTimeRangesObj([[start, end]]);\n}\n\nexport { createTimeRanges as createTimeRange };\n\nfunction createTimeRangesObj(ranges){\n  if (ranges === undefined || ranges.length === 0) {\n    return {\n      length: 0,\n      start: function() {\n        throw new Error('This TimeRanges object is empty');\n      },\n      end: function() {\n        throw new Error('This TimeRanges object is empty');\n      }\n    };\n  }\n  return {\n    length: ranges.length,\n    start: getRange.bind(null, 'start', 0, ranges),\n    end: getRange.bind(null, 'end', 1, ranges)\n  };\n}\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex){\n  if (rangeIndex === undefined) {\n    log.warn(`DEPRECATED: Function '${fnName}' on 'TimeRanges' called without an index argument.`);\n    rangeIndex = 0;\n  }\n  rangeCheck(fnName, rangeIndex, ranges.length - 1);\n  return ranges[rangeIndex][valueIndex];\n}\n\nfunction rangeCheck(fnName, index, maxIndex){\n  if (index < 0 || index > maxIndex) {\n    throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index}) is greater than or equal to the maximum bound (${maxIndex}).`);\n  }\n}\n","/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param  {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n","/**\n * @file url.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n  const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n  // add the url to an anchor and let the browser parse the URL\n  let a = document.createElement('a');\n  a.href = url;\n\n  // IE8 (and 9?) Fix\n  // ie8 doesn't parse the URL correctly until the anchor is actually\n  // added to the body, and an innerHTML is needed to trigger the parsing\n  let addToBody = (a.host === '' && a.protocol !== 'file:');\n  let div;\n  if (addToBody) {\n    div = document.createElement('div');\n    div.innerHTML = `<a href=\"${url}\"></a>`;\n    a = div.firstChild;\n    // prevent the div from affecting layout\n    div.setAttribute('style', 'display:none; position:absolute;');\n    document.body.appendChild(div);\n  }\n\n  // Copy the specific URL properties to a new object\n  // This is also needed for IE8 because the anchor loses its\n  // properties when it's removed from the dom\n  let details = {};\n  for (var i = 0; i < props.length; i++) {\n    details[props[i]] = a[props[i]];\n  }\n\n  // IE9 adds the port to the host property unlike everyone else. If\n  // a port identifier is added for standard ports, strip it.\n  if (details.protocol === 'http:') {\n    details.host = details.host.replace(/:80$/, '');\n  }\n  if (details.protocol === 'https:') {\n    details.host = details.host.replace(/:443$/, '');\n  }\n\n  if (addToBody) {\n    document.body.removeChild(div);\n  }\n\n  return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param  {String} url URL to make absolute\n * @return {String}     Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n  // Check if absolute URL\n  if (!url.match(/^https?:\\/\\//)) {\n    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n    let div = document.createElement('div');\n    div.innerHTML = `<a href=\"${url}\">x</a>`;\n    url = div.firstChild.href;\n  }\n\n  return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String}    path    The fileName path like '/path/to/file.mp4'\n * @returns {String}          The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n  if(typeof path === 'string'){\n    let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n    let pathParts = splitPathRe.exec(path);\n\n    if (pathParts) {\n      return pathParts.pop().toLowerCase();\n    }\n  }\n\n  return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean}   Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nexport const isCrossOrigin = function(url) {\n  let winLoc = window.location;\n  let urlInfo = parseUrl(url);\n\n  // IE8 protocol relative urls will return ':' for protocol\n  let srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n  // Check if url is for another domain/origin\n  // IE8 doesn't know location.origin, so we won't rely on it here\n  let crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n  return crossOrigin;\n};\n","/**\n * @file video.js\n */\nimport window from 'global/window';\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\nimport TextTrack from './tracks/text-track.js';\n\nimport assign from 'object.assign';\nimport { createTimeRanges } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendFn from './extend.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\nimport xhr from 'xhr';\n\n// Include the built-in techs\nimport Tech from './tech/tech.js';\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n  document.createElement('video');\n  document.createElement('audio');\n  document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n *     var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param  {String|Element} id      Video element or video element ID\n * @param  {Object=} options        Optional options object for config/settings\n * @param  {Function=} ready        Optional ready callback\n * @return {Player}                 A player instance\n * @mixes videojs\n * @method videojs\n */\nlet videojs = function(id, options, ready){\n  let tag; // Element of ID\n\n  // Allow for element or ID to be passed in\n  // String ID\n  if (typeof id === 'string') {\n\n    // Adjust for jQuery ID syntax\n    if (id.indexOf('#') === 0) {\n      id = id.slice(1);\n    }\n\n    // If a player instance has already been created for this ID return it.\n    if (videojs.getPlayers()[id]) {\n\n      // If options or ready funtion are passed, warn\n      if (options) {\n        log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n      }\n\n      if (ready) {\n        videojs.getPlayers()[id].ready(ready);\n      }\n\n      return videojs.getPlayers()[id];\n\n    // Otherwise get element for ID\n    } else {\n      tag = Dom.getEl(id);\n    }\n\n  // ID is a media element\n  } else {\n    tag = id;\n  }\n\n  // Check for a useable element\n  if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n    throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n  }\n\n  // Element may have a player attr referring to an already created player instance.\n  // If not, set up a new player and return the instance.\n  return tag['player'] || Player.players[tag.playerId] || new Player(tag, options, ready);\n};\n\n// Add default styles\nif (window.VIDEOJS_NO_DYNAMIC_STYLE !== true) {\n  let style = Dom.$('.vjs-styles-defaults');\n\n  if (!style) {\n    style = stylesheet.createStyleElement('vjs-styles-defaults');\n    let head = Dom.$('head');\n    head.insertBefore(style, head.firstChild);\n    stylesheet.setTextContent(style, `\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    `);\n  }\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n *     videojs.options.autoplay = true\n *     // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n  return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n  get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n  set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n *     var VjsButton = videojs.getComponent('Button');\n *     // Create a new instance of the component\n *     var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n *     // Get a component to subclass\n *     var VjsButton = videojs.getComponent('Button');\n *     // Subclass the component (see 'extend' doc for more info)\n *     var MySpecialButton = videojs.extend(VjsButton, {});\n *     // Register the new component\n *     VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n *     // (optionally) add the new component as a default player child\n *     myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = (name, comp) => {\n  if (Tech.isTech(comp)) {\n    log.warn(`The ${name} tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)`);\n  }\n\n  Component.registerComponent.call(Component, name, comp);\n};\n\n/**\n * Get a Tech class object by name\n * ```js\n *     var Html5 = videojs.getTech('Html5');\n *     // Create a new instance of the component\n *     var html5 = new Html5(options);\n * ```\n *\n * @return {Tech} Tech identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getTech = Tech.getTech;\n\n/**\n * Register a Tech so it can referred to by name.\n * This is used in the tech order for the player.\n *\n * ```js\n *     // get the Html5 Tech\n *     var Html5 = videojs.getTech('Html5');\n *     var MyTech = videojs.extend(Html5, {});\n *     // Register the new Tech\n *     VjsButton.registerTech('Tech', MyTech);\n *     var player = videojs('myplayer', {\n *       techOrder: ['myTech', 'html5']\n *     });\n * ```\n *\n * @param {String} The class name of the tech\n * @param {Tech} The tech class\n * @return {Tech} The newly registered Tech\n * @mixes videojs\n * @method registerTech\n */\nvideojs.registerTech = Tech.registerTech;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extend` keyword\n * ```js\n *     // Create a basic javascript 'class'\n *     function MyClass(name){\n *       // Set a property at initialization\n *       this.myName = name;\n *     }\n *     // Create an instance method\n *     MyClass.prototype.sayMyName = function(){\n *       alert(this.myName);\n *     };\n *     // Subclass the exisitng class and change the name\n *     // when initializing\n *     var MySubClass = videojs.extend(MyClass, {\n *       constructor: function(name) {\n *         // Call the super class constructor for the subclass\n *         MyClass.call(this, name)\n *       }\n *     });\n *     // Create an instance of the new sub class\n *     var myInstance = new MySubClass('John');\n *     myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n *                   Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extend\n */\nvideojs.extend = extendFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n *     var defaultOptions = {\n *       foo: true,\n *       bar: {\n *         a: true,\n *         b: [1,2,3]\n *       }\n *     };\n *     var newOptions = {\n *       foo: false,\n *       bar: {\n *         b: [4,5,6]\n *       }\n *     };\n *     var result = videojs.mergeOptions(defaultOptions, newOptions);\n *     // result.foo = false;\n *     // result.bar.a = true;\n *     // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} defaults  The options object whose values will be overriden\n * @param {Object} overrides The options object with values to override the first\n * @param {Object} etc       Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n *     videojs.bind(newContext, function(){\n *       this === newContext\n *     });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param  {*}        context The object to bind as scope\n * @param  {Function} fn      The function to be bound to a scope\n * @param  {Number=}  uid     An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n *     // Make a plugin that alerts when the player plays\n *     videojs.plugin('myPlugin', function(myPluginOptions) {\n *       myPluginOptions = myPluginOptions || {};\n *\n *       var player = this;\n *       var alertText = myPluginOptions.text || 'Player is playing!'\n *\n *       player.on('play', function(){\n *         alert(alertText);\n *       });\n *     });\n *     // USAGE EXAMPLES\n *     // EXAMPLE 1: New player with plugin options, call plugin immediately\n *     var player1 = videojs('idOne', {\n *       myPlugin: {\n *         text: 'Custom text!'\n *       }\n *     });\n *     // Click play\n *     // --> Should alert 'Custom text!'\n *     // EXAMPLE 3: New player, initialize plugin later\n *     var player3 = videojs('idThree');\n *     // Click play\n *     // --> NO ALERT\n *     // Click pause\n *     // Initialize plugin using the plugin function on the player instance\n *     player3.myPlugin({\n *       text: 'Plugin added later!'\n *     });\n *     // Click play\n *     // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} name The plugin name\n * @param {Function} fn The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n *     videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param  {String} code The language code or dictionary property\n * @param  {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n  code = ('' + code).toLowerCase();\n  return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param  {Number|Array} start Start time in seconds or an array of ranges\n * @param  {Number} end   End time in seconds\n * @return {Object}       Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = videojs.createTimeRanges = createTimeRanges;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param  {Number} seconds Number of seconds to be turned into a string\n * @param  {Number} guide   Number (in seconds) to model the string after\n * @return {String}         Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param  {String} url The url to parse\n * @return {Object}     An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean}   Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvideojs.isCrossOrigin = Url.isCrossOrigin;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param  {Element|Object}   elem Element or object to bind listeners to\n * @param  {String|Array}   type Type of event to bind to.\n * @param  {Function} fn   Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param  {Element|Object}   elem Element or object to\n * @param  {String|Array}   type Name/type of event\n * @param  {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param  {Element|Object}   elem Object to remove listeners from\n * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.\n * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param  {Element|Object}      elem  Element to trigger an event on\n * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param  {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n/**\n * A cross-browser XMLHttpRequest wrapper. Here's a simple example:\n *\n *     videojs.xhr({\n *       body: someJSONString,\n *       uri: \"/foo\",\n *       headers: {\n *         \"Content-Type\": \"application/json\"\n *       }\n *     }, function (err, resp, body) {\n *       // check resp.statusCode\n *     });\n *\n * Check out the [full\n * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)\n * for more options.\n *\n * @param {Object} options settings for the request.\n * @return {XMLHttpRequest|XDomainRequest} the request object.\n * @see https://github.com/Raynos/xhr\n */\nvideojs.xhr = xhr;\n\n/**\n * TextTrack class\n *\n * @type {Function}\n */\nvideojs.TextTrack = TextTrack;\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @method isEl\n * @param  {Mixed} value\n * @return {Boolean}\n */\nvideojs.isEl = Dom.isEl;\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @method isTextNode\n * @param  {Mixed} value\n * @return {Boolean}\n */\nvideojs.isTextNode = Dom.isTextNode;\n\n/**\n * Creates an element and applies properties.\n *\n * @method createEl\n * @param  {String} [tagName='div'] Name of tag to be created.\n * @param  {Object} [properties={}] Element properties to be applied.\n * @param  {Object} [attributes={}] Element attributes to be applied.\n * @return {Element}\n */\nvideojs.createEl = Dom.createEl;\n\n/**\n * Check if an element has a CSS class\n *\n * @method hasClass\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\nvideojs.hasClass = Dom.hasElClass;\n\n/**\n * Add a CSS class name to an element\n *\n * @method addClass\n * @param {Element} element    Element to add class name to\n * @param {String} classToAdd Classname to add\n */\nvideojs.addClass = Dom.addElClass;\n\n/**\n * Remove a CSS class name from an element\n *\n * @method removeClass\n * @param {Element} element    Element to remove from class name\n * @param {String} classToRemove Classname to remove\n */\nvideojs.removeClass = Dom.removeElClass;\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @method toggleElClass\n * @param  {Element} element\n * @param  {String} classToToggle\n * @param  {Boolean|Function} [predicate]\n *         Can be a function that returns a Boolean. If `true`, the class\n *         will be added; if `false`, the class will be removed. If not\n *         given, the class will be added if not present and vice versa.\n */\nvideojs.toggleClass = Dom.toggleElClass;\n\n/**\n * Apply attributes to an HTML element.\n *\n * @method setAttributes\n * @param  {Element} el         Target element.\n * @param  {Object=} attributes Element attributes to be applied.\n */\nvideojs.setAttributes = Dom.setElAttributes;\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @method getAttributes\n * @param  {Element} tag Element from which to get tag attributes\n * @return {Object}\n */\nvideojs.getAttributes = Dom.getElAttributes;\n\n/**\n * Empties the contents of an element.\n *\n * @method emptyEl\n * @param  {Element} el\n * @return {Element}\n */\nvideojs.emptyEl = Dom.emptyEl;\n\n/**\n * Normalizes and appends content to an element.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n *   Normalized into a text node.\n *\n * - Element, TextNode\n *   Passed through.\n *\n * - Array\n *   A one-dimensional array of strings, elements, nodes, or functions (which\n *   return single strings, elements, or nodes).\n *\n * - Function\n *   If the sole argument, is expected to produce a string, element,\n *   node, or array.\n *\n * @method appendContent\n * @param  {Element} el\n * @param  {String|Element|TextNode|Array|Function} content\n * @return {Element}\n */\nvideojs.appendContent = Dom.appendContent;\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * - String\n *   Normalized into a text node.\n *\n * - Element, TextNode\n *   Passed through.\n *\n * - Array\n *   A one-dimensional array of strings, elements, nodes, or functions (which\n *   return single strings, elements, or nodes).\n *\n * - Function\n *   If the sole argument, is expected to produce a string, element,\n *   node, or array.\n *\n * @method insertContent\n * @param  {Element} el\n * @param  {String|Element|TextNode|Array|Function} content\n * @return {Element}\n */\nvideojs.insertContent = Dom.insertContent;\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n  define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n  module['exports'] = videojs;\n}\n\nexport default videojs;\n"]}