From a5f913562d0afb4e95f71e9426ca7ec44fb69e16 Mon Sep 17 00:00:00 2001
From: Andreas <andreasv@fsmpi.rwth-aachen.de>
Date: Mon, 26 Sep 2016 23:43:34 +0200
Subject: [PATCH] removed mediaelementjs, added videojs

---
 static/mediaelementjs/background.png          |   Bin 166 -> 0 bytes
 static/mediaelementjs/bigplay.fw.png          |   Bin 79426 -> 0 bytes
 static/mediaelementjs/bigplay.png             |   Bin 3001 -> 0 bytes
 static/mediaelementjs/bigplay.svg             |    14 -
 static/mediaelementjs/controls-ted.png        |   Bin 1559 -> 0 bytes
 static/mediaelementjs/controls-wmp-bg.png     |   Bin 1960 -> 0 bytes
 static/mediaelementjs/controls-wmp.png        |   Bin 5511 -> 0 bytes
 static/mediaelementjs/controls.fw.png         |   Bin 80753 -> 0 bytes
 static/mediaelementjs/controls.png            |   Bin 1892 -> 0 bytes
 static/mediaelementjs/controls.svg            |     1 -
 .../mediaelementjs/flashmediaelement-cdn.swf  |   Bin 130065 -> 0 bytes
 .../flashmediaelement-debug.swf               |   Bin 130084 -> 0 bytes
 static/mediaelementjs/flashmediaelement.swf   |   Bin 130054 -> 0 bytes
 static/mediaelementjs/jumpforward.png         |   Bin 1563 -> 0 bytes
 static/mediaelementjs/loading.gif             |   Bin 6224 -> 0 bytes
 .../mediaelementjs/mediaelement-and-player.js |  5899 ----
 static/mediaelementjs/mediaelementplayer.css  |  1009 -
 .../mep-feature-sourcechooser.js              |    93 -
 .../silverlightmediaelement.xap               |   Bin 12459 -> 0 bytes
 static/mediaelementjs/skipback.png            |   Bin 4245 -> 0 bytes
 static/style.css                              |     2 -
 static/videojs/alt/video-js-cdn.css           |  1295 +
 static/videojs/alt/video-js-cdn.min.css       |     1 +
 static/videojs/alt/video.novtt.js             | 22992 ++++++++++++++
 static/videojs/alt/video.novtt.min.js         |    20 +
 static/videojs/font/VideoJS.eot               |   Bin 0 -> 5900 bytes
 static/videojs/font/VideoJS.svg               |   102 +
 static/videojs/font/VideoJS.ttf               |   Bin 0 -> 5736 bytes
 static/videojs/font/VideoJS.woff              |   Bin 0 -> 3704 bytes
 static/videojs/ie8/videojs-ie8.js             |  2600 ++
 static/videojs/ie8/videojs-ie8.min.js         |     1 +
 static/videojs/lang/ar.js                     |    34 +
 static/videojs/lang/ba.js                     |    26 +
 static/videojs/lang/bg.js                     |    26 +
 static/videojs/lang/ca.js                     |    26 +
 static/videojs/lang/cs.js                     |    26 +
 static/videojs/lang/da.js                     |    26 +
 static/videojs/lang/de.js                     |    40 +
 static/videojs/lang/el.js                     |    34 +
 static/videojs/lang/en.js                     |    40 +
 static/videojs/lang/es.js                     |    26 +
 static/videojs/lang/fa.js                     |    26 +
 static/videojs/lang/fi.js                     |    26 +
 static/videojs/lang/fr.js                     |    39 +
 static/videojs/lang/hr.js                     |    26 +
 static/videojs/lang/hu.js                     |    26 +
 static/videojs/lang/it.js                     |    26 +
 static/videojs/lang/ja.js                     |    26 +
 static/videojs/lang/ko.js                     |    26 +
 static/videojs/lang/nb.js                     |    26 +
 static/videojs/lang/nl.js                     |    37 +
 static/videojs/lang/nn.js                     |    26 +
 static/videojs/lang/pl.js                     |    34 +
 static/videojs/lang/pt-BR.js                  |    26 +
 static/videojs/lang/ru.js                     |    26 +
 static/videojs/lang/sr.js                     |    26 +
 static/videojs/lang/sv.js                     |    26 +
 static/videojs/lang/tr.js                     |    34 +
 static/videojs/lang/uk.js                     |    26 +
 static/videojs/lang/vi.js                     |    26 +
 static/videojs/lang/zh-CN.js                  |    27 +
 static/videojs/lang/zh-TW.js                  |    27 +
 static/videojs/video-js.css                   |  1326 +
 static/videojs/video-js.min.css               |     1 +
 static/videojs/video-js.swf                   |   Bin 0 -> 16916 bytes
 static/videojs/video.js                       | 24946 ++++++++++++++++
 static/videojs/video.min.js                   |    25 +
 .../videojs/videojs-resolution-switcher.css   |    31 +
 static/videojs/videojs-resolution-switcher.js |   367 +
 templates/base.html                           |     5 +
 templates/chapters.srt                        |     2 +-
 templates/lecture.html                        |     4 +-
 templates/macros.html                         |    17 +-
 73 files changed, 54609 insertions(+), 7036 deletions(-)
 delete mode 100644 static/mediaelementjs/background.png
 delete mode 100644 static/mediaelementjs/bigplay.fw.png
 delete mode 100644 static/mediaelementjs/bigplay.png
 delete mode 100644 static/mediaelementjs/bigplay.svg
 delete mode 100644 static/mediaelementjs/controls-ted.png
 delete mode 100644 static/mediaelementjs/controls-wmp-bg.png
 delete mode 100644 static/mediaelementjs/controls-wmp.png
 delete mode 100644 static/mediaelementjs/controls.fw.png
 delete mode 100644 static/mediaelementjs/controls.png
 delete mode 100644 static/mediaelementjs/controls.svg
 delete mode 100644 static/mediaelementjs/flashmediaelement-cdn.swf
 delete mode 100644 static/mediaelementjs/flashmediaelement-debug.swf
 delete mode 100644 static/mediaelementjs/flashmediaelement.swf
 delete mode 100644 static/mediaelementjs/jumpforward.png
 delete mode 100644 static/mediaelementjs/loading.gif
 delete mode 100644 static/mediaelementjs/mediaelement-and-player.js
 delete mode 100644 static/mediaelementjs/mediaelementplayer.css
 delete mode 100644 static/mediaelementjs/mep-feature-sourcechooser.js
 delete mode 100755 static/mediaelementjs/silverlightmediaelement.xap
 delete mode 100644 static/mediaelementjs/skipback.png
 create mode 100644 static/videojs/alt/video-js-cdn.css
 create mode 100644 static/videojs/alt/video-js-cdn.min.css
 create mode 100644 static/videojs/alt/video.novtt.js
 create mode 100644 static/videojs/alt/video.novtt.min.js
 create mode 100644 static/videojs/font/VideoJS.eot
 create mode 100644 static/videojs/font/VideoJS.svg
 create mode 100644 static/videojs/font/VideoJS.ttf
 create mode 100644 static/videojs/font/VideoJS.woff
 create mode 100644 static/videojs/ie8/videojs-ie8.js
 create mode 100644 static/videojs/ie8/videojs-ie8.min.js
 create mode 100644 static/videojs/lang/ar.js
 create mode 100644 static/videojs/lang/ba.js
 create mode 100644 static/videojs/lang/bg.js
 create mode 100644 static/videojs/lang/ca.js
 create mode 100644 static/videojs/lang/cs.js
 create mode 100644 static/videojs/lang/da.js
 create mode 100644 static/videojs/lang/de.js
 create mode 100644 static/videojs/lang/el.js
 create mode 100644 static/videojs/lang/en.js
 create mode 100644 static/videojs/lang/es.js
 create mode 100644 static/videojs/lang/fa.js
 create mode 100644 static/videojs/lang/fi.js
 create mode 100644 static/videojs/lang/fr.js
 create mode 100644 static/videojs/lang/hr.js
 create mode 100644 static/videojs/lang/hu.js
 create mode 100644 static/videojs/lang/it.js
 create mode 100644 static/videojs/lang/ja.js
 create mode 100644 static/videojs/lang/ko.js
 create mode 100644 static/videojs/lang/nb.js
 create mode 100644 static/videojs/lang/nl.js
 create mode 100644 static/videojs/lang/nn.js
 create mode 100644 static/videojs/lang/pl.js
 create mode 100644 static/videojs/lang/pt-BR.js
 create mode 100644 static/videojs/lang/ru.js
 create mode 100644 static/videojs/lang/sr.js
 create mode 100644 static/videojs/lang/sv.js
 create mode 100644 static/videojs/lang/tr.js
 create mode 100644 static/videojs/lang/uk.js
 create mode 100644 static/videojs/lang/vi.js
 create mode 100644 static/videojs/lang/zh-CN.js
 create mode 100644 static/videojs/lang/zh-TW.js
 create mode 100644 static/videojs/video-js.css
 create mode 100644 static/videojs/video-js.min.css
 create mode 100644 static/videojs/video-js.swf
 create mode 100644 static/videojs/video.js
 create mode 100644 static/videojs/video.min.js
 create mode 100644 static/videojs/videojs-resolution-switcher.css
 create mode 100644 static/videojs/videojs-resolution-switcher.js

diff --git a/static/mediaelementjs/background.png b/static/mediaelementjs/background.png
deleted file mode 100644
index fd428412ae26af13dab448ec833b1cb603e37ee9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 166
zcmeAS@N?(olHy`uVBq!ia0y~yU@!t<4mJh`208nVjSLJ7k|nMYCBgY=CFO}lsSJ)O
z`AMk?p1FzXsX?iUDV2pMQ*9U+7(6^(978H@y*Y0v$e_T(u#x?LUY3A3&)y@Bex|ww
j(M~QzfG7Rx2N+y>8O3+Juk2x9U|{fc^>bP0l+XkK?WQjj

diff --git a/static/mediaelementjs/bigplay.fw.png b/static/mediaelementjs/bigplay.fw.png
deleted file mode 100644
index 66d0e3cb73ceec0b1ffc7cdd4c1bc5edaf960556..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 79426
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
S!7HF!gFIdRT-G@yGywoci3MW-

diff --git a/static/mediaelementjs/bigplay.png b/static/mediaelementjs/bigplay.png
deleted file mode 100644
index 694553e31c387188b6bde397a5200c212aff2dc5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3001
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
V{5N~47Xt$WgQu&X%Q~loCIC=jhBg2I

diff --git a/static/mediaelementjs/bigplay.svg b/static/mediaelementjs/bigplay.svg
deleted file mode 100644
index 2b78170..0000000
--- a/static/mediaelementjs/bigplay.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<svg id="bigplay" viewBox="0 0 100 200" style="background-color:#ffffff00" version="1.1"
-	xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
-	x="0px" y="0px" width="100px" height="200px"
->
-	<g id="dark">
-		<path id="Polygon"  d="M 72.5 49.5 L 38.75 68.9856 L 38.75 30.0144 L 72.5 49.5 Z" fill="#ffffff" opacity="0.75" />
-		<path id="Ellipse" d="M 13 50.5 C 13 29.7891 29.7891 13 50.5 13 C 71.2109 13 88 29.7891 88 50.5 C 88 71.2109 71.2109 88 50.5 88 C 29.7891 88 13 71.2109 13 50.5 Z" stroke="#ffffff" stroke-width="5" fill="none" opacity="0.75"/>
-	</g>
-	<g id="light">
-		<path id="Polygon2"  d="M 72.5 149.5 L 38.75 168.9856 L 38.75 130.0144 L 72.5 149.5 Z" fill="#ffffff" opacity="1.0" />
-		<path id="Ellipse2" d="M 13 150.5 C 13 129.7891 29.7891 113 50.5 113 C 71.2109 113 88 129.7891 88 150.5 C 88 171.211 71.2109 188 50.5 188 C 29.7891 188 13 171.211 13 150.5 Z" stroke="#ffffff" stroke-width="5" fill="none" opacity="1.0"/>
-	</g>
-</svg>
\ No newline at end of file
diff --git a/static/mediaelementjs/controls-ted.png b/static/mediaelementjs/controls-ted.png
deleted file mode 100644
index 3aac05aa83cb7fed54831a19d85a8c267e939720..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1559
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

diff --git a/static/mediaelementjs/controls-wmp-bg.png b/static/mediaelementjs/controls-wmp-bg.png
deleted file mode 100644
index 89bb9b95602ecfca6290f6006f817da365da7b90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1960
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

diff --git a/static/mediaelementjs/controls-wmp.png b/static/mediaelementjs/controls-wmp.png
deleted file mode 100644
index 4775ef5b02faf2b826d35dfc72511b6b27fea87b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5511
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
M>FVdQ&MBb@0FGDV1^@s6

diff --git a/static/mediaelementjs/controls.fw.png b/static/mediaelementjs/controls.fw.png
deleted file mode 100644
index e27682ae107408748ac91805eee0e1554d618cd5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 80753
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

diff --git a/static/mediaelementjs/controls.png b/static/mediaelementjs/controls.png
deleted file mode 100644
index f6a857d800b64264443af4609e0ebf7175593d8f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1892
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

diff --git a/static/mediaelementjs/controls.svg b/static/mediaelementjs/controls.svg
deleted file mode 100644
index af3bd41..0000000
--- a/static/mediaelementjs/controls.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?>
<!-- Generator: Adobe Fireworks CS6, Export SVG Extension by Aaron Beall (http://fireworks.abeall.com) . Version: 0.6.1  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg id="controls.fw-Page%201" viewBox="0 0 144 32" style="background-color:#ffffff00" version="1.1"
	xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
	x="0px" y="0px" width="144px" height="32px"
>
	<defs>
		<radialGradient id="gradient1" cx="50%" cy="50%" r="50%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#f2f2f2" stop-opacity="0.2" offset="100%"/>
		</radialGradient>
		<linearGradient id="gradient2" x1="50%" y1="-7.8652%" x2="50%" y2="249.6629%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient3" x1="50%" y1="0%" x2="50%" y2="238.75%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient4" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient5" x1="50%" y1="-33.3333%" x2="50%" y2="152.0833%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient6" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient7" x1="50%" y1="-33.3333%" x2="50%" y2="152.0833%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient8" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient9" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient10" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient11" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient12" x1="50%" y1="0%" x2="50%" y2="238.75%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient13" x1="40%" y1="-140%" x2="40%" y2="98.75%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient14" x1="50%" y1="0%" x2="50%" y2="238.75%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient15" x1="60%" y1="-140%" x2="60%" y2="98.75%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient16" x1="50%" y1="0%" x2="50%" y2="298.4375%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient17" x1="50%" y1="0%" x2="50%" y2="238.75%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient18" x1="50%" y1="-200%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient19" x1="50%" y1="-200%" x2="50%" y2="110.9375%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient20" x1="55%" y1="0%" x2="55%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="100%"/>
		</linearGradient>
		<linearGradient id="gradient21" x1="50%" y1="0%" x2="50%" y2="100%">
			<stop stop-color="#ffffff" stop-opacity="1" offset="0%"/>
			<stop stop-color="#c8c8c8" stop-opacity="1" offset="99.4444%"/>
		</linearGradient>
	</defs>
	<g id="BG">
	</g>
	<g id="controls">
		<path id="Line" d="M 98.5 7.5 L 109.5 7.5 " stroke="#ffffff" stroke-width="1" fill="none"/>
		<path id="Line2" d="M 98.5 3.5 L 109.5 3.5 " stroke="#ffffff" stroke-width="1" fill="none"/>
		<path id="Line3" d="M 98.5 11.5 L 109.5 11.5 " stroke="#ffffff" stroke-width="1" fill="none"/>
		<path id="Ellipse" d="M 108 11.5 C 108 10.6716 108.4477 10 109 10 C 109.5523 10 110 10.6716 110 11.5 C 110 12.3284 109.5523 13 109 13 C 108.4477 13 108 12.3284 108 11.5 Z" fill="#ffffff"/>
		<path id="Ellipse2" d="M 104 7.5 C 104 6.6716 104.4477 6 105 6 C 105.5523 6 106 6.6716 106 7.5 C 106 8.3284 105.5523 9 105 9 C 104.4477 9 104 8.3284 104 7.5 Z" fill="#ffffff"/>
		<path id="Ellipse3" d="M 108 3.5 C 108 2.6716 108.4477 2 109 2 C 109.5523 2 110 2.6716 110 3.5 C 110 4.3284 109.5523 5 109 5 C 108.4477 5 108 4.3284 108 3.5 Z" fill="#ffffff"/>
	</g>
	<g id="backlight">
		<g id="off">
			<rect x="83" y="21" width="10" height="6" stroke="#ffffff" stroke-width="1" fill="#333333"/>
		</g>
		<g id="on">
			<path id="Ellipse4" d="M 81 8 C 81 5.2385 84.134 3 88 3 C 91.866 3 95 5.2385 95 8 C 95 10.7615 91.866 13 88 13 C 84.134 13 81 10.7615 81 8 Z" fill="url(#gradient1)"/>
			<rect x="83" y="5" width="10" height="6" stroke="#ffffff" stroke-width="1" fill="#333333"/>
		</g>
	</g>
	<g id="loop">
		<g id="on2">
			<path d="M 73.795 4.205 C 75.2155 4.8785 76.2 6.3234 76.2 8 C 76.2 10.3196 74.3196 12.2 72 12.2 C 69.6804 12.2 67.8 10.3196 67.8 8 C 67.8 6.3234 68.7845 4.8785 70.205 4.205 L 68.875 2.875 C 67.1501 3.9289 66 5.8306 66 8 C 66 11.3138 68.6862 14 72 14 C 75.3138 14 78 11.3138 78 8 C 78 5.8306 76.8499 3.9289 75.125 2.875 L 73.795 4.205 Z" fill="url(#gradient2)"/>
			<path d="M 71 2 L 66 2 L 71 7 L 71 2 Z" fill="url(#gradient3)"/>
		</g>
		<g id="off2">
			<path d="M 73.795 20.205 C 75.2155 20.8785 76.2 22.3234 76.2 24 C 76.2 26.3196 74.3196 28.2 72 28.2 C 69.6804 28.2 67.8 26.3196 67.8 24 C 67.8 22.3234 68.7845 20.8785 70.205 20.205 L 68.875 18.875 C 67.1501 19.9289 66 21.8306 66 24 C 66 27.3138 68.6862 30 72 30 C 75.3138 30 78 27.3138 78 24 C 78 21.8306 76.8499 19.9289 75.125 18.875 L 73.795 20.205 Z" fill="#a8a8b7"/>
			<path d="M 71 18 L 66 18 L 71 23 L 71 18 Z" fill="#a8a8b7"/>
		</g>
	</g>
	<g id="cc">
		<rect visibility="hidden" x="49" y="2" width="14" height="12" stroke="#b0b0b0" stroke-width="1" fill="none"/>
		<text visibility="hidden" x="49" y="17" width="14" fill="#ffffff" style="font-size: 10px; color: #ffffff; font-family: Arial; text-align: center; "><tspan><![CDATA[cc]]></tspan></text>
		<path d="M 55 7 C 50.2813 3.7813 50.063 12.9405 55 10 " stroke="#ffffff" stroke-width="1" fill="none"/>
		<path d="M 60 7 C 55.2813 3.7813 55.063 12.9405 60 10 " stroke="#ffffff" stroke-width="1" fill="none"/>
		<path d="M 50 3 L 62 3 L 62 13 L 50 13 L 50 3 ZM 49 2 L 49 14 L 63 14 L 63 2 L 49 2 Z" fill="url(#gradient4)"/>
		<rect x="49" y="2" width="14" height="12" fill="none"/>
	</g>
	<g id="volume">
		<g id="no%20sound">
			<rect x="17" y="5" width="5" height="6" fill="url(#gradient5)"/>
			<path d="M 21 5 L 25 2 L 25 14 L 21 11.0625 L 21 5 Z" fill="url(#gradient6)"/>
		</g>
		<g id="sound%20bars">
			<rect x="17" y="21" width="5" height="6" fill="url(#gradient7)"/>
			<path d="M 21 21 L 25 18 L 25 30 L 21 27.0625 L 21 21 Z" fill="url(#gradient8)"/>
			<path d="M 27 18 C 27 18 30.0625 17.375 30 24 C 29.9375 30.625 27 30 27 30 " stroke="#ffffff" stroke-width="1" fill="none"/>
			<path d="M 26 21.0079 C 26 21.0079 28.041 20.6962 27.9994 24 C 27.9577 27.3038 26 26.9921 26 26.9921 " stroke="#ffffff" stroke-width="1" fill="none"/>
		</g>
	</g>
	<g id="play/pause">
		<g id="play">
			<path id="Polygon" d="M 14 8.5 L 3 14 L 3 3 L 14 8.5 Z" fill="url(#gradient9)"/>
		</g>
		<g id="pause">
			<rect x="3" y="18" width="3" height="12" fill="url(#gradient10)"/>
			<rect x="10" y="18" width="3" height="12" fill="url(#gradient11)"/>
		</g>
	</g>
	<g id="fullscreen">
		<g id="enter%201">
			<path d="M 34 2 L 39 2 L 34 7 L 34 2 Z" fill="url(#gradient12)"/>
			<path d="M 34 14 L 39 14 L 34 9 L 34 14 Z" fill="url(#gradient13)"/>
			<path d="M 46 2 L 41 2 L 46 7 L 46 2 Z" fill="url(#gradient14)"/>
			<path d="M 46 14 L 41 14 L 46 9 L 46 14 Z" fill="url(#gradient15)"/>
		</g>
		<g id="exit">
			<path d="M 42 22 L 46 22 L 42 18 L 42 22 Z" fill="url(#gradient16)"/>
			<path d="M 38 22 L 38 18 L 34 22 L 38 22 Z" fill="url(#gradient17)"/>
			<path d="M 38 26 L 34 26 L 38 30 L 38 26 Z" fill="url(#gradient18)"/>
			<path d="M 42 26 L 42 30 L 46 26 L 42 26 Z" fill="url(#gradient19)"/>
		</g>
	</g>
	<g id="stop">
		<rect x="115" y="3" width="10" height="10" fill="url(#gradient20)"/>
	</g>
	<g id="chooser">
		<path d="M 135.2346 6.1522 C 136.2551 5.7295 137.4251 6.2141 137.8478 7.2346 C 138.2704 8.2551 137.7859 9.425 136.7654 9.8478 C 135.7449 10.2705 134.5749 9.7859 134.1522 8.7654 C 133.7295 7.7449 134.2141 6.5749 135.2346 6.1522 ZM 133.2735 1.4176 L 136 4.0054 L 138.7265 1.4176 L 138.8246 5.1754 L 142.5824 5.2735 L 139.9946 8 L 142.5824 10.7265 L 138.8246 10.8246 L 138.7265 14.5824 L 136 11.9946 L 133.2735 14.5824 L 133.1754 10.8246 L 129.4176 10.7265 L 132.0054 8 L 129.4176 5.2735 L 133.1754 5.1754 L 133.2735 1.4176 Z" fill="url(#gradient21)"/>
	</g>
</svg>
\ No newline at end of file
diff --git a/static/mediaelementjs/flashmediaelement-cdn.swf b/static/mediaelementjs/flashmediaelement-cdn.swf
deleted file mode 100644
index be13c449462b627437d12286f55a1d2b654e04ee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 130065
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

diff --git a/static/mediaelementjs/flashmediaelement-debug.swf b/static/mediaelementjs/flashmediaelement-debug.swf
deleted file mode 100644
index ce732f2a2f6fcdbb62620cd13adbbc98a11a6377..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 130084
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%0DZyEUh
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
E05i9`LI3~&

diff --git a/static/mediaelementjs/flashmediaelement.swf b/static/mediaelementjs/flashmediaelement.swf
deleted file mode 100644
index 8e689ebd6222311ec88ebcf816c45f90464afec6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 130054
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

diff --git a/static/mediaelementjs/jumpforward.png b/static/mediaelementjs/jumpforward.png
deleted file mode 100644
index 64d03841e251a7741eaaf3e90b21c49a2ddb97ec..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1563
zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZVAV_;x7;J61wF%}28J29*~C-ahlfq}EY
zBeIx*fm;}a85w5Hkzin8ev%myQ4-<nW0jnrtCyIPpOmUskz2q30yY&^6}bhusU?XD
z6}dTi#a0!zN?;XMdBs*BVSOb9u#%E&Tcrr!00rm#qErP_Jrg|xB|9z!1qGX;lr*a#
z7dNQ(qLegSrHqo20xNy}^73-Ma$~*xqI7*jOG`_A10#JSBi*8uG~MFLypqHU-MnID
zh#@d@TvCgZi!uvJGV}8kK;|YU<(HP&Dk*_1Qh))7J4-Ut5H{r%L%o%ppQ{g&(KpmH
z(8s1NwIUOTHjoTXZ7IocUlo)V<$(Q^lB}PalbV~FS5mBRsAq`Px{BNaxJDF5RwNcc
zECUB3#A`Mnms<s;7U$=bf`TA4FSEqX&<5-wbYVn@Ky*3h=N1&D78hsc=h>M;wIGY3
ztB*ifV`pvz)qpIBuED=3Gc~Uy5#%non~=rO)kk8p09g=811RXN0x~O7b0S<ab5rxc
zzA!Sd(Z?!*uF*L^C%-7TATc==<S?)nBq4OwU~3|gtT95i21x=*V@k4BacNRkYH|ru
zY{Am3Q)0S4lCX_FR@F8Yxdm3vMX8A;`9&f5`8jrAcjSV&3dVXyHu~uDQ0r~<LHPhF
zUx2NGhz7a1*>TzEgR>_ntJ-l*J^fIcfr0UYr;B5Vh2YXDyS<nL1==<r<G5zlCDqy5
zw9!zUIZW&kbHo$XBOLo0BRUm+2t-BPnC<4Gz4fx650lmnje7wfCjIz((sIIG-%XJ+
zKa7gc#grAFJL9Ir7_|E8vjo{+B3<_yXEtp4mN)6SV-csMMO*%jhF{LN(xv$u15X@O
zi)o%J-xI#uA^u>_@g|lfiQ;h!q$`y(R;32YRPM-LwP?F_R#bhGz1dp-4eC~+)n*4p
zzi1svJoskrB6Y{~AAGC@w?w@kZpmMEBvZO$Zfoia^~I%+IbVOzoMU)lrst^%Ap*O;
zUal3jkyd$SR$3gYQE}(tbdkVpkGuqv8rE_*{nM_SOWW!Sb~lIbY3WnrWB#yk^Ct7%
zqI2H$E5ti5unxFv|MiEn)BBK<Kblqq95nK9t8iMA*!C-QVcq1wpo7kvFZl3DS@%dO
zStJW}Sskw5%KKA$!L-Xh&qEAKk|!rGSL=*rJ1J+<$8*@a>TBl9FZ)jh8uqSqNuFJF
zbn`;}-rR*;+wAy~7sRdY&e^O!KS|}($=edw_edQ#JC`UN;57g6+Q{rln+)=<eScwk
zyztxETkAD$on;S`kDnWPEBfHqwridXs=U{3V39h@;&ElOt3?C%y*J`-C)qFh=WF+G
S`y5aK&*16m=d#Wzp$P!z;v?k%

diff --git a/static/mediaelementjs/loading.gif b/static/mediaelementjs/loading.gif
deleted file mode 100644
index 612222be5e474c36c345042dd6f697fa1d16a6a0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6224
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

diff --git a/static/mediaelementjs/mediaelement-and-player.js b/static/mediaelementjs/mediaelement-and-player.js
deleted file mode 100644
index 11628dd..0000000
--- a/static/mediaelementjs/mediaelement-and-player.js
+++ /dev/null
@@ -1,5899 +0,0 @@
-/*!
- *
- * MediaElement.js
- * HTML5 <video> and <audio> shim and player
- * http://mediaelementjs.com/
- *
- * Creates a JavaScript object that mimics HTML5 MediaElement API
- * for browsers that don't understand HTML5 or can't play the provided codec
- * Can play MP4 (H.264), Ogg, WebM, FLV, WMV, WMA, ACC, and MP3
- *
- * Copyright 2010-2014, John Dyer (http://j.hn)
- * License: MIT
- *
- */
-// Namespace
-var mejs = mejs || {};
-
-// version number
-mejs.version = '2.22.0'; 
-
-
-// player number (for missing, same id attr)
-mejs.meIndex = 0;
-
-// media types accepted by plugins
-mejs.plugins = {
-	silverlight: [
-		{version: [3,0], types: ['video/mp4','video/m4v','video/mov','video/wmv','audio/wma','audio/m4a','audio/mp3','audio/wav','audio/mpeg']}
-	],
-	flash: [
-		{version: [9,0,124], types: ['video/mp4','video/m4v','video/mov','video/flv','video/rtmp','video/x-flv','audio/flv','audio/x-flv','audio/mp3','audio/m4a','audio/mpeg', 'video/dailymotion', 'video/x-dailymotion', 'application/x-mpegURL']}
-		// 'video/youtube', 'video/x-youtube', 
-		// ,{version: [12,0], types: ['video/webm']} // for future reference (hopefully!)
-	],
-	youtube: [
-		{version: null, types: ['video/youtube', 'video/x-youtube', 'audio/youtube', 'audio/x-youtube']}
-	],
-	vimeo: [
-		{version: null, types: ['video/vimeo', 'video/x-vimeo']}
-	]
-};
-
-/*
-Utility methods
-*/
-mejs.Utility = {
-	encodeUrl: function(url) {
-		return encodeURIComponent(url); //.replace(/\?/gi,'%3F').replace(/=/gi,'%3D').replace(/&/gi,'%26');
-	},
-	escapeHTML: function(s) {
-		return s.toString().split('&').join('&amp;').split('<').join('&lt;').split('"').join('&quot;');
-	},
-	absolutizeUrl: function(url) {
-		var el = document.createElement('div');
-		el.innerHTML = '<a href="' + this.escapeHTML(url) + '">x</a>';
-		return el.firstChild.href;
-	},
-	getScriptPath: function(scriptNames) {
-		var
-			i = 0,
-			j,
-			codePath = '',
-			testname = '',
-			slashPos,
-			filenamePos,
-			scriptUrl,
-			scriptPath,			
-			scriptFilename,
-			scripts = document.getElementsByTagName('script'),
-			il = scripts.length,
-			jl = scriptNames.length;
-			
-		// go through all <script> tags
-		for (; i < il; i++) {
-			scriptUrl = scripts[i].src;
-			slashPos = scriptUrl.lastIndexOf('/');
-			if (slashPos > -1) {
-				scriptFilename = scriptUrl.substring(slashPos + 1);
-				scriptPath = scriptUrl.substring(0, slashPos + 1);
-			} else {
-				scriptFilename = scriptUrl;
-				scriptPath = '';			
-			}
-			
-			// see if any <script> tags have a file name that matches the 
-			for (j = 0; j < jl; j++) {
-				testname = scriptNames[j];
-				filenamePos = scriptFilename.indexOf(testname);
-				if (filenamePos > -1) {
-					codePath = scriptPath;
-					break;
-				}
-			}
-			
-			// if we found a path, then break and return it
-			if (codePath !== '') {
-				break;
-			}
-		}
-		
-		// send the best path back
-		return codePath;
-	},
-	/*
-	 * Calculate the time format to use. We have a default format set in the
-	 * options but it can be imcomplete. We ajust it according to the media
-	 * duration.
-	 *
-	 * We support format like 'hh:mm:ss:ff'.
-	 */
-	calculateTimeFormat: function(time, options, fps) {
-		if (time < 0) {
-			time = 0;
-		}
-
-		if(typeof fps == 'undefined') {
-		    fps = 25;
-		}
-
-		var format = options.timeFormat,
-			firstChar = format[0],
-			firstTwoPlaces = (format[1] == format[0]),
-			separatorIndex = firstTwoPlaces? 2: 1,
-			separator = ':',
-			hours = Math.floor(time / 3600) % 24,
-			minutes = Math.floor(time / 60) % 60,
-			seconds = Math.floor(time % 60),
-			frames = Math.floor(((time % 1)*fps).toFixed(3)),
-			lis = [
-				[frames, 'f'],
-				[seconds, 's'],
-				[minutes, 'm'],
-				[hours, 'h']
-			];
-
-		// Try to get the separator from the format
-		if (format.length < separatorIndex) {
-			separator = format[separatorIndex];
-		}
-
-		var required = false;
-
-		for (var i=0, len=lis.length; i < len; i++) {
-			if (format.indexOf(lis[i][1]) !== -1) {
-				required=true;
-			}
-			else if (required) {
-				var hasNextValue = false;
-				for (var j=i; j < len; j++) {
-					if (lis[j][0] > 0) {
-						hasNextValue = true;
-						break;
-					}
-				}
-
-				if (! hasNextValue) {
-					break;
-				}
-
-				if (!firstTwoPlaces) {
-					format = firstChar + format;
-				}
-				format = lis[i][1] + separator + format;
-				if (firstTwoPlaces) {
-					format = lis[i][1] + format;
-				}
-				firstChar = lis[i][1];
-			}
-		}
-		options.currentTimeFormat = format;
-	},
-	/*
-	 * Prefix the given number by zero if it is lower than 10.
-	 */
-	twoDigitsString: function(n) {
-		if (n < 10) {
-			return '0' + n;
-		}
-		return String(n);
-	},
-	secondsToTimeCode: function(time, options) {
-		if (time < 0) {
-			time = 0;
-		}
-
-		// Maintain backward compatibility with method signature before v2.18.
-		if (typeof options !== 'object') {
-			var format = 'm:ss';
-			format = arguments[1] ? 'hh:mm:ss' : format; // forceHours
-			format = arguments[2] ? format + ':ff' : format; // showFrameCount
-
-			options = {
-				currentTimeFormat: format,
-				framesPerSecond: arguments[3] || 25
-			};
-		}
-
-		var fps = options.framesPerSecond;
-		if(typeof fps === 'undefined') {
-			fps = 25;
-		}
-
-		var format = options.currentTimeFormat,
-			hours = Math.floor(time / 3600) % 24,
-			minutes = Math.floor(time / 60) % 60,
-			seconds = Math.floor(time % 60),
-			frames = Math.floor(((time % 1)*fps).toFixed(3));
-			lis = [
-				[frames, 'f'],
-				[seconds, 's'],
-				[minutes, 'm'],
-				[hours, 'h']
-			];
-
-		var res = format;
-		for (i=0,len=lis.length; i < len; i++) {
-			res = res.replace(lis[i][1]+lis[i][1], this.twoDigitsString(lis[i][0]));
-			res = res.replace(lis[i][1], lis[i][0]);
-		}
-		return res;
-	},
-	
-	timeCodeToSeconds: function(hh_mm_ss_ff, forceHours, showFrameCount, fps){
-		if (typeof showFrameCount == 'undefined') {
-		    showFrameCount=false;
-		} else if(typeof fps == 'undefined') {
-		    fps = 25;
-		}
-	
-		var tc_array = hh_mm_ss_ff.split(":"),
-			tc_hh = parseInt(tc_array[0], 10),
-			tc_mm = parseInt(tc_array[1], 10),
-			tc_ss = parseInt(tc_array[2], 10),
-			tc_ff = 0,
-			tc_in_seconds = 0;
-		
-		if (showFrameCount) {
-		    tc_ff = parseInt(tc_array[3])/fps;
-		}
-		
-		tc_in_seconds = ( tc_hh * 3600 ) + ( tc_mm * 60 ) + tc_ss + tc_ff;
-		
-		return tc_in_seconds;
-	},
-	
-
-	convertSMPTEtoSeconds: function (SMPTE) {
-		if (typeof SMPTE != 'string') 
-			return false;
-
-		SMPTE = SMPTE.replace(',', '.');
-		
-		var secs = 0,
-			decimalLen = (SMPTE.indexOf('.') != -1) ? SMPTE.split('.')[1].length : 0,
-			multiplier = 1;
-		
-		SMPTE = SMPTE.split(':').reverse();
-		
-		for (var i = 0; i < SMPTE.length; i++) {
-			multiplier = 1;
-			if (i > 0) {
-				multiplier = Math.pow(60, i); 
-			}
-			secs += Number(SMPTE[i]) * multiplier;
-		}
-		return Number(secs.toFixed(decimalLen));
-	},	
-	
-	/* borrowed from SWFObject: http://code.google.com/p/swfobject/source/browse/trunk/swfobject/src/swfobject.js#474 */
-	removeSwf: function(id) {
-		var obj = document.getElementById(id);
-		if (obj && /object|embed/i.test(obj.nodeName)) {
-			if (mejs.MediaFeatures.isIE) {
-				obj.style.display = "none";
-				(function(){
-					if (obj.readyState == 4) {
-						mejs.Utility.removeObjectInIE(id);
-					} else {
-						setTimeout(arguments.callee, 10);
-					}
-				})();
-			} else {
-				obj.parentNode.removeChild(obj);
-			}
-		}
-	},
-	removeObjectInIE: function(id) {
-		var obj = document.getElementById(id);
-		if (obj) {
-			for (var i in obj) {
-				if (typeof obj[i] == "function") {
-					obj[i] = null;
-				}
-			}
-			obj.parentNode.removeChild(obj);
-		}		
-	},
-    determineScheme: function(url) {
-        if (url && url.indexOf("://") != -1) {
-            return url.substr(0, url.indexOf("://")+3);
-        }
-        return "//"; // let user agent figure this out
-    }
-};
-
-
-// Core detector, plugins are added below
-mejs.PluginDetector = {
-
-	// main public function to test a plug version number PluginDetector.hasPluginVersion('flash',[9,0,125]);
-	hasPluginVersion: function(plugin, v) {
-		var pv = this.plugins[plugin];
-		v[1] = v[1] || 0;
-		v[2] = v[2] || 0;
-		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
-	},
-
-	// cached values
-	nav: window.navigator,
-	ua: window.navigator.userAgent.toLowerCase(),
-
-	// stored version numbers
-	plugins: [],
-
-	// runs detectPlugin() and stores the version number
-	addPlugin: function(p, pluginName, mimeType, activeX, axDetect) {
-		this.plugins[p] = this.detectPlugin(pluginName, mimeType, activeX, axDetect);
-	},
-
-	// get the version number from the mimetype (all but IE) or ActiveX (IE)
-	detectPlugin: function(pluginName, mimeType, activeX, axDetect) {
-
-		var version = [0,0,0],
-			description,
-			i,
-			ax;
-
-		// Firefox, Webkit, Opera
-		if (typeof(this.nav.plugins) != 'undefined' && typeof this.nav.plugins[pluginName] == 'object') {
-			description = this.nav.plugins[pluginName].description;
-			if (description && !(typeof this.nav.mimeTypes != 'undefined' && this.nav.mimeTypes[mimeType] && !this.nav.mimeTypes[mimeType].enabledPlugin)) {
-				version = description.replace(pluginName, '').replace(/^\s+/,'').replace(/\sr/gi,'.').split('.');
-				for (i=0; i<version.length; i++) {
-					version[i] = parseInt(version[i].match(/\d+/), 10);
-				}
-			}
-		// Internet Explorer / ActiveX
-		} else if (typeof(window.ActiveXObject) != 'undefined') {
-			try {
-				ax = new ActiveXObject(activeX);
-				if (ax) {
-					version = axDetect(ax);
-				}
-			}
-			catch (e) { }
-		}
-		return version;
-	}
-};
-
-// Add Flash detection
-mejs.PluginDetector.addPlugin('flash','Shockwave Flash','application/x-shockwave-flash','ShockwaveFlash.ShockwaveFlash', function(ax) {
-	// adapted from SWFObject
-	var version = [],
-		d = ax.GetVariable("$version");
-	if (d) {
-		d = d.split(" ")[1].split(",");
-		version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
-	}
-	return version;
-});
-
-// Add Silverlight detection
-mejs.PluginDetector.addPlugin('silverlight','Silverlight Plug-In','application/x-silverlight-2','AgControl.AgControl', function (ax) {
-	// Silverlight cannot report its version number to IE
-	// but it does have a isVersionSupported function, so we have to loop through it to get a version number.
-	// adapted from http://www.silverlightversion.com/
-	var v = [0,0,0,0],
-		loopMatch = function(ax, v, i, n) {
-			while(ax.isVersionSupported(v[0]+ "."+ v[1] + "." + v[2] + "." + v[3])){
-				v[i]+=n;
-			}
-			v[i] -= n;
-		};
-	loopMatch(ax, v, 0, 1);
-	loopMatch(ax, v, 1, 1);
-	loopMatch(ax, v, 2, 10000); // the third place in the version number is usually 5 digits (4.0.xxxxx)
-	loopMatch(ax, v, 2, 1000);
-	loopMatch(ax, v, 2, 100);
-	loopMatch(ax, v, 2, 10);
-	loopMatch(ax, v, 2, 1);
-	loopMatch(ax, v, 3, 1);
-
-	return v;
-});
-// add adobe acrobat
-/*
-PluginDetector.addPlugin('acrobat','Adobe Acrobat','application/pdf','AcroPDF.PDF', function (ax) {
-	var version = [],
-		d = ax.GetVersions().split(',')[0].split('=')[1].split('.');
-
-	if (d) {
-		version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
-	}
-	return version;
-});
-*/
-// necessary detection (fixes for <IE9)
-mejs.MediaFeatures = {
-	init: function() {
-		var
-			t = this,
-			d = document,
-			nav = mejs.PluginDetector.nav,
-			ua = mejs.PluginDetector.ua.toLowerCase(),
-			i,
-			v,
-			html5Elements = ['source','track','audio','video'];
-
-		// detect browsers (only the ones that have some kind of quirk we need to work around)
-		t.isiPad = (ua.match(/ipad/i) !== null);
-		t.isiPhone = (ua.match(/iphone/i) !== null);
-		t.isiOS = t.isiPhone || t.isiPad;
-		t.isAndroid = (ua.match(/android/i) !== null);
-		t.isBustedAndroid = (ua.match(/android 2\.[12]/) !== null);
-		t.isBustedNativeHTTPS = (location.protocol === 'https:' && (ua.match(/android [12]\./) !== null || ua.match(/macintosh.* version.* safari/) !== null));
-		t.isIE = (nav.appName.toLowerCase().indexOf("microsoft") != -1 || nav.appName.toLowerCase().match(/trident/gi) !== null);
-		t.isChrome = (ua.match(/chrome/gi) !== null);
-		t.isChromium = (ua.match(/chromium/gi) !== null);
-		t.isFirefox = (ua.match(/firefox/gi) !== null);
-		t.isWebkit = (ua.match(/webkit/gi) !== null);
-		t.isGecko = (ua.match(/gecko/gi) !== null) && !t.isWebkit && !t.isIE;
-		t.isOpera = (ua.match(/opera/gi) !== null);
-		t.hasTouch = ('ontouchstart' in window); //  && window.ontouchstart != null); // this breaks iOS 7
-
-		// Borrowed from `Modernizr.svgasimg`, sources:
-		// - https://github.com/Modernizr/Modernizr/issues/687
-		// - https://github.com/Modernizr/Modernizr/pull/1209/files
-		t.svgAsImg = !!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1');
-
-		// create HTML5 media elements for IE before 9, get a <video> element for fullscreen detection
-		for (i=0; i<html5Elements.length; i++) {
-			v = document.createElement(html5Elements[i]);
-		}
-
-		t.supportsMediaTag = (typeof v.canPlayType !== 'undefined' || t.isBustedAndroid);
-
-		// Fix for IE9 on Windows 7N / Windows 7KN (Media Player not installer)
-		try{
-			v.canPlayType("video/mp4");
-		}catch(e){
-			t.supportsMediaTag = false;
-		}
-
-		t.supportsPointerEvents = (function() {
-			// TAKEN FROM MODERNIZR
-			var element = document.createElement('x'),
-				documentElement = document.documentElement,
-				getComputedStyle = window.getComputedStyle,
-				supports;
-			if(!('pointerEvents' in element.style)){
-				return false;
-			}
-			element.style.pointerEvents = 'auto';
-			element.style.pointerEvents = 'x';
-			documentElement.appendChild(element);
-			supports = getComputedStyle &&
-				getComputedStyle(element, '').pointerEvents === 'auto';
-			documentElement.removeChild(element);
-			return !!supports;
-		})();
-
-
-		 // Older versions of Firefox can't move plugins around without it resetting,
-		t.hasFirefoxPluginMovingProblem = false;
-
-		// detect native JavaScript fullscreen (Safari/Firefox only, Chrome still fails)
-
-		// iOS
-		t.hasiOSFullScreen = (typeof v.webkitEnterFullscreen !== 'undefined');
-
-		// W3C
-		t.hasNativeFullscreen = (typeof v.requestFullscreen !== 'undefined');
-
-		// webkit/firefox/IE11+
-		t.hasWebkitNativeFullScreen = (typeof v.webkitRequestFullScreen !== 'undefined');
-		t.hasMozNativeFullScreen = (typeof v.mozRequestFullScreen !== 'undefined');
-		t.hasMsNativeFullScreen = (typeof v.msRequestFullscreen !== 'undefined');
-
-		t.hasTrueNativeFullScreen = (t.hasWebkitNativeFullScreen || t.hasMozNativeFullScreen || t.hasMsNativeFullScreen);
-		t.nativeFullScreenEnabled = t.hasTrueNativeFullScreen;
-
-		// Enabled?
-		if (t.hasMozNativeFullScreen) {
-			t.nativeFullScreenEnabled = document.mozFullScreenEnabled;
-		} else if (t.hasMsNativeFullScreen) {
-			t.nativeFullScreenEnabled = document.msFullscreenEnabled;
-		}
-
-		if (t.isChrome) {
-			t.hasiOSFullScreen = false;
-		}
-
-		if (t.hasTrueNativeFullScreen) {
-
-			t.fullScreenEventName = '';
-			if (t.hasWebkitNativeFullScreen) {
-				t.fullScreenEventName = 'webkitfullscreenchange';
-
-			} else if (t.hasMozNativeFullScreen) {
-				t.fullScreenEventName = 'mozfullscreenchange';
-
-			} else if (t.hasMsNativeFullScreen) {
-				t.fullScreenEventName = 'MSFullscreenChange';
-			}
-
-			t.isFullScreen = function() {
-				if (t.hasMozNativeFullScreen) {
-					return d.mozFullScreen;
-
-				} else if (t.hasWebkitNativeFullScreen) {
-					return d.webkitIsFullScreen;
-
-				} else if (t.hasMsNativeFullScreen) {
-					return d.msFullscreenElement !== null;
-				}
-			}
-
-			t.requestFullScreen = function(el) {
-
-				if (t.hasWebkitNativeFullScreen) {
-					el.webkitRequestFullScreen();
-
-				} else if (t.hasMozNativeFullScreen) {
-					el.mozRequestFullScreen();
-
-				} else if (t.hasMsNativeFullScreen) {
-					el.msRequestFullscreen();
-
-				}
-			}
-
-			t.cancelFullScreen = function() {
-				if (t.hasWebkitNativeFullScreen) {
-					document.webkitCancelFullScreen();
-
-				} else if (t.hasMozNativeFullScreen) {
-					document.mozCancelFullScreen();
-
-				} else if (t.hasMsNativeFullScreen) {
-					document.msExitFullscreen();
-
-				}
-			}
-
-		}
-
-
-		// OS X 10.5 can't do this even if it says it can :(
-		if (t.hasiOSFullScreen && ua.match(/mac os x 10_5/i)) {
-			t.hasNativeFullScreen = false;
-			t.hasiOSFullScreen = false;
-		}
-
-	}
-};
-mejs.MediaFeatures.init();
-
-/*
-extension methods to <video> or <audio> object to bring it into parity with PluginMediaElement (see below)
-*/
-mejs.HtmlMediaElement = {
-	pluginType: 'native',
-	isFullScreen: false,
-
-	setCurrentTime: function (time) {
-		this.currentTime = time;
-	},
-
-	setMuted: function (muted) {
-		this.muted = muted;
-	},
-
-	setVolume: function (volume) {
-		this.volume = volume;
-	},
-
-	// for parity with the plugin versions
-	stop: function () {
-		this.pause();
-	},
-
-	// This can be a url string
-	// or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}]
-	setSrc: function (url) {
-		
-		// Fix for IE9 which can't set .src when there are <source> elements. Awesome, right?
-		var 
-			existingSources = this.getElementsByTagName('source');
-		while (existingSources.length > 0){
-			this.removeChild(existingSources[0]);
-		}
-	
-		if (typeof url == 'string') {
-			this.src = url;
-		} else {
-			var i, media;
-
-			for (i=0; i<url.length; i++) {
-				media = url[i];
-				if (this.canPlayType(media.type)) {
-					this.src = media.src;
-					break;
-				}
-			}
-		}
-	},
-
-	setVideoSize: function (width, height) {
-		this.width = width;
-		this.height = height;
-	}
-};
-
-/*
-Mimics the <video/audio> element by calling Flash's External Interface or Silverlights [ScriptableMember]
-*/
-mejs.PluginMediaElement = function (pluginid, pluginType, mediaUrl) {
-	this.id = pluginid;
-	this.pluginType = pluginType;
-	this.src = mediaUrl;
-	this.events = {};
-	this.attributes = {};
-};
-
-// JavaScript values and ExternalInterface methods that match HTML5 video properties methods
-// http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/fl/video/FLVPlayback.html
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html
-mejs.PluginMediaElement.prototype = {
-
-	// special
-	pluginElement: null,
-	pluginType: '',
-	isFullScreen: false,
-
-	// not implemented :(
-	playbackRate: -1,
-	defaultPlaybackRate: -1,
-	seekable: [],
-	played: [],
-
-	// HTML5 read-only properties
-	paused: true,
-	ended: false,
-	seeking: false,
-	duration: 0,
-	error: null,
-	tagName: '',
-
-	// HTML5 get/set properties, but only set (updated by event handlers)
-	muted: false,
-	volume: 1,
-	currentTime: 0,
-
-	// HTML5 methods
-	play: function () {
-		if (this.pluginApi != null) {
-			if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
-				this.pluginApi.playVideo();
-			} else {
-				this.pluginApi.playMedia();
-			}
-			this.paused = false;
-		}
-	},
-	load: function () {
-		if (this.pluginApi != null) {
-			if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
-			} else {
-				this.pluginApi.loadMedia();
-			}
-			
-			this.paused = false;
-		}
-	},
-	pause: function () {
-		if (this.pluginApi != null) {
-			if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
-		        if( this.pluginApi.getPlayerState() == 1 ) {
-				    this.pluginApi.pauseVideo();
-                }
-			} else {
-				this.pluginApi.pauseMedia();
-			}			
-			
-			
-			this.paused = true;
-		}
-	},
-	stop: function () {
-		if (this.pluginApi != null) {
-			if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
-				this.pluginApi.stopVideo();
-			} else {
-				this.pluginApi.stopMedia();
-			}	
-			this.paused = true;
-		}
-	},
-	canPlayType: function(type) {
-		var i,
-			j,
-			pluginInfo,
-			pluginVersions = mejs.plugins[this.pluginType];
-
-		for (i=0; i<pluginVersions.length; i++) {
-			pluginInfo = pluginVersions[i];
-
-			// test if user has the correct plugin version
-			if (mejs.PluginDetector.hasPluginVersion(this.pluginType, pluginInfo.version)) {
-
-				// test for plugin playback types
-				for (j=0; j<pluginInfo.types.length; j++) {
-					// find plugin that can play the type
-					if (type == pluginInfo.types[j]) {
-						return 'probably';
-					}
-				}
-			}
-		}
-
-		return '';
-	},
-	
-	positionFullscreenButton: function(x,y,visibleAndAbove) {
-		if (this.pluginApi != null && this.pluginApi.positionFullscreenButton) {
-			this.pluginApi.positionFullscreenButton(Math.floor(x),Math.floor(y),visibleAndAbove);
-		}
-	},
-	
-	hideFullscreenButton: function() {
-		if (this.pluginApi != null && this.pluginApi.hideFullscreenButton) {
-			this.pluginApi.hideFullscreenButton();
-		}		
-	},	
-	
-
-	// custom methods since not all JavaScript implementations support get/set
-
-	// This can be a url string
-	// or an array [{src:'file.mp4',type:'video/mp4'},{src:'file.webm',type:'video/webm'}]
-	setSrc: function (url) {
-		if (typeof url == 'string') {
-			this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(url));
-			this.src = mejs.Utility.absolutizeUrl(url);
-		} else {
-			var i, media;
-
-			for (i=0; i<url.length; i++) {
-				media = url[i];
-				if (this.canPlayType(media.type)) {
-					this.pluginApi.setSrc(mejs.Utility.absolutizeUrl(media.src));
-					this.src = mejs.Utility.absolutizeUrl(media.src);
-					break;
-				}
-			}
-		}
-
-	},
-	setCurrentTime: function (time) {
-		if (this.pluginApi != null) {
-			if (this.pluginType == 'youtube' || this.pluginType == 'vimeo') {
-				this.pluginApi.seekTo(time);
-			} else {
-				this.pluginApi.setCurrentTime(time);
-			}				
-			
-			
-			
-			this.currentTime = time;
-		}
-	},
-	setVolume: function (volume) {
-		if (this.pluginApi != null) {
-			// same on YouTube and MEjs
-			if (this.pluginType == 'youtube') {
-				this.pluginApi.setVolume(volume * 100);
-			} else {
-				this.pluginApi.setVolume(volume);
-			}
-			this.volume = volume;
-		}
-	},
-	setMuted: function (muted) {
-		if (this.pluginApi != null) {
-			if (this.pluginType == 'youtube') {
-				if (muted) {
-					this.pluginApi.mute();
-				} else {
-					this.pluginApi.unMute();
-				}
-				this.muted = muted;
-				this.dispatchEvent({type:'volumechange'});
-			} else {
-				this.pluginApi.setMuted(muted);
-			}
-			this.muted = muted;
-		}
-	},
-
-	// additional non-HTML5 methods
-	setVideoSize: function (width, height) {
-		
-		//if (this.pluginType == 'flash' || this.pluginType == 'silverlight') {
-			if (this.pluginElement && this.pluginElement.style) {
-				this.pluginElement.style.width = width + 'px';
-				this.pluginElement.style.height = height + 'px';
-			}
-			if (this.pluginApi != null && this.pluginApi.setVideoSize) {
-				this.pluginApi.setVideoSize(width, height);
-			}
-		//}
-	},
-
-	setFullscreen: function (fullscreen) {
-		if (this.pluginApi != null && this.pluginApi.setFullscreen) {
-			this.pluginApi.setFullscreen(fullscreen);
-		}
-	},
-	
-	enterFullScreen: function() {
-		if (this.pluginApi != null && this.pluginApi.setFullscreen) {
-			this.setFullscreen(true);
-		}		
-		
-	},
-	
-	exitFullScreen: function() {
-		if (this.pluginApi != null && this.pluginApi.setFullscreen) {
-			this.setFullscreen(false);
-		}
-	},	
-
-	// start: fake events
-	addEventListener: function (eventName, callback, bubble) {
-		this.events[eventName] = this.events[eventName] || [];
-		this.events[eventName].push(callback);
-	},
-	removeEventListener: function (eventName, callback) {
-		if (!eventName) { this.events = {}; return true; }
-		var callbacks = this.events[eventName];
-		if (!callbacks) return true;
-		if (!callback) { this.events[eventName] = []; return true; }
-		for (var i = 0; i < callbacks.length; i++) {
-			if (callbacks[i] === callback) {
-				this.events[eventName].splice(i, 1);
-				return true;
-			}
-		}
-		return false;
-	},	
-	dispatchEvent: function (event) {
-		var i,
-			args,
-			callbacks = this.events[event.type];
-
-		if (callbacks) {
-			for (i = 0; i < callbacks.length; i++) {
-				callbacks[i].apply(this, [event]);
-			}
-		}
-	},
-	// end: fake events
-	
-	// fake DOM attribute methods
-	hasAttribute: function(name){
-		return (name in this.attributes);  
-	},
-	removeAttribute: function(name){
-		delete this.attributes[name];
-	},
-	getAttribute: function(name){
-		if (this.hasAttribute(name)) {
-			return this.attributes[name];
-		}
-		return '';
-	},
-	setAttribute: function(name, value){
-		this.attributes[name] = value;
-	},
-
-	remove: function() {
-		mejs.Utility.removeSwf(this.pluginElement.id);
-	}
-};
-
-/*
-Default options
-*/
-mejs.MediaElementDefaults = {
-	// allows testing on HTML5, flash, silverlight
-	// auto: attempts to detect what the browser can do
-	// auto_plugin: prefer plugins and then attempt native HTML5
-	// native: forces HTML5 playback
-	// shim: disallows HTML5, will attempt either Flash or Silverlight
-	// none: forces fallback view
-	mode: 'auto',
-	// remove or reorder to change plugin priority and availability
-	plugins: ['flash','silverlight','youtube','vimeo'],
-	// shows debug errors on screen
-	enablePluginDebug: false,
-	// use plugin for browsers that have trouble with Basic Authentication on HTTPS sites
-	httpsBasicAuthSite: false,
-	// overrides the type specified, useful for dynamic instantiation
-	type: '',
-	// path to Flash and Silverlight plugins
-	pluginPath: mejs.Utility.getScriptPath(['mediaelement.js','mediaelement.min.js','mediaelement-and-player.js','mediaelement-and-player.min.js']),
-	// name of flash file
-	flashName: 'flashmediaelement.swf',
-	// streamer for RTMP streaming
-	flashStreamer: '',
-	// set to 'always' for CDN version
-	flashScriptAccess: 'sameDomain',	
-	// turns on the smoothing filter in Flash
-	enablePluginSmoothing: false,
-	// enabled pseudo-streaming (seek) on .mp4 files
-	enablePseudoStreaming: false,
-	// start query parameter sent to server for pseudo-streaming
-	pseudoStreamingStartQueryParam: 'start',
-	// name of silverlight file
-	silverlightName: 'silverlightmediaelement.xap',
-	// default if the <video width> is not specified
-	defaultVideoWidth: 480,
-	// default if the <video height> is not specified
-	defaultVideoHeight: 270,
-	// overrides <video width>
-	pluginWidth: -1,
-	// overrides <video height>
-	pluginHeight: -1,
-	// additional plugin variables in 'key=value' form
-	pluginVars: [],	
-	// rate in milliseconds for Flash and Silverlight to fire the timeupdate event
-	// larger number is less accurate, but less strain on plugin->JavaScript bridge
-	timerRate: 250,
-	// initial volume for player
-	startVolume: 0.8,
-	success: function () { },
-	error: function () { }
-};
-
-/*
-Determines if a browser supports the <video> or <audio> element
-and returns either the native element or a Flash/Silverlight version that
-mimics HTML5 MediaElement
-*/
-mejs.MediaElement = function (el, o) {
-	return mejs.HtmlMediaElementShim.create(el,o);
-};
-
-mejs.HtmlMediaElementShim = {
-
-	create: function(el, o) {
-		var
-			options = {},
-			htmlMediaElement = (typeof(el) == 'string') ? document.getElementById(el) : el,
-			tagName = htmlMediaElement.tagName.toLowerCase(),
-			isMediaTag = (tagName === 'audio' || tagName === 'video'),
-			src = (isMediaTag) ? htmlMediaElement.getAttribute('src') : htmlMediaElement.getAttribute('href'),
-			poster = htmlMediaElement.getAttribute('poster'),
-			autoplay =  htmlMediaElement.getAttribute('autoplay'),
-			preload =  htmlMediaElement.getAttribute('preload'),
-			controls =  htmlMediaElement.getAttribute('controls'),
-			playback,
-			prop;
-
-		// extend options
-		for (prop in mejs.MediaElementDefaults) {
-			options[prop] = mejs.MediaElementDefaults[prop];
-		}
-		for (prop in o) {
-			options[prop] = o[prop];
-		}		
-		
-
-		// clean up attributes
-		src = 		(typeof src == 'undefined' 	|| src === null || src == '') ? null : src;		
-		poster =	(typeof poster == 'undefined' 	|| poster === null) ? '' : poster;
-		preload = 	(typeof preload == 'undefined' 	|| preload === null || preload === 'false') ? 'none' : preload;
-		autoplay = 	!(typeof autoplay == 'undefined' || autoplay === null || autoplay === 'false');
-		controls = 	!(typeof controls == 'undefined' || controls === null || controls === 'false');
-
-		// test for HTML5 and plugin capabilities
-		playback = this.determinePlayback(htmlMediaElement, options, mejs.MediaFeatures.supportsMediaTag, isMediaTag, src);
-		playback.url = (playback.url !== null) ? mejs.Utility.absolutizeUrl(playback.url) : '';
-        playback.scheme = mejs.Utility.determineScheme(playback.url);
-
-		if (playback.method == 'native') {
-			// second fix for android
-			if (mejs.MediaFeatures.isBustedAndroid) {
-				htmlMediaElement.src = playback.url;
-				htmlMediaElement.addEventListener('click', function() {
-					htmlMediaElement.play();
-				}, false);
-			}
-		
-			// add methods to native HTMLMediaElement
-			return this.updateNative(playback, options, autoplay, preload);
-		} else if (playback.method !== '') {
-			// create plugin to mimic HTMLMediaElement
-			
-			return this.createPlugin( playback,  options, poster, autoplay, preload, controls);
-		} else {
-			// boo, no HTML5, no Flash, no Silverlight.
-			this.createErrorMessage( playback, options, poster );
-			
-			return this;
-		}
-	},
-	
-	determinePlayback: function(htmlMediaElement, options, supportsMediaTag, isMediaTag, src) {
-		var
-			mediaFiles = [],
-			i,
-			j,
-			k,
-			l,
-			n,
-			type,
-			result = { method: '', url: '', htmlMediaElement: htmlMediaElement, isVideo: (htmlMediaElement.tagName.toLowerCase() != 'audio'), scheme: ''},
-			pluginName,
-			pluginVersions,
-			pluginInfo,
-			dummy,
-			media;
-			
-		// STEP 1: Get URL and type from <video src> or <source src>
-
-		// supplied type overrides <video type> and <source type>
-		if (typeof options.type != 'undefined' && options.type !== '') {
-			
-			// accept either string or array of types
-			if (typeof options.type == 'string') {
-				mediaFiles.push({type:options.type, url:src});
-			} else {
-				
-				for (i=0; i<options.type.length; i++) {
-					mediaFiles.push({type:options.type[i], url:src});
-				}
-			}
-
-		// test for src attribute first
-		} else if (src !== null) {
-			type = this.formatType(src, htmlMediaElement.getAttribute('type'));
-			mediaFiles.push({type:type, url:src});
-
-		// then test for <source> elements
-		} else {
-			// test <source> types to see if they are usable
-			for (i = 0; i < htmlMediaElement.childNodes.length; i++) {
-				n = htmlMediaElement.childNodes[i];
-				if (n.nodeType == 1 && n.tagName.toLowerCase() == 'source') {
-					src = n.getAttribute('src');
-					type = this.formatType(src, n.getAttribute('type'));
-					media = n.getAttribute('media');
-
-					if (!media || !window.matchMedia || (window.matchMedia && window.matchMedia(media).matches)) {
-						mediaFiles.push({type:type, url:src});
-					}
-				}
-			}
-		}
-		
-		// in the case of dynamicly created players
-		// check for audio types
-		if (!isMediaTag && mediaFiles.length > 0 && mediaFiles[0].url !== null && this.getTypeFromFile(mediaFiles[0].url).indexOf('audio') > -1) {
-			result.isVideo = false;
-		}
-		
-
-		// STEP 2: Test for playback method
-		
-		// special case for Android which sadly doesn't implement the canPlayType function (always returns '')
-		if (mejs.MediaFeatures.isBustedAndroid) {
-			htmlMediaElement.canPlayType = function(type) {
-				return (type.match(/video\/(mp4|m4v)/gi) !== null) ? 'maybe' : '';
-			};
-		}		
-		
-		// special case for Chromium to specify natively supported video codecs (i.e. WebM and Theora) 
-		if (mejs.MediaFeatures.isChromium) { 
-			htmlMediaElement.canPlayType = function(type) { 
-				return (type.match(/video\/(webm|ogv|ogg)/gi) !== null) ? 'maybe' : ''; 
-			}; 
-		}
-
-		// test for native playback first
-		if (supportsMediaTag && (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'native')  && !(mejs.MediaFeatures.isBustedNativeHTTPS && options.httpsBasicAuthSite === true)) {
-						
-			if (!isMediaTag) {
-
-				// create a real HTML5 Media Element 
-				dummy = document.createElement( result.isVideo ? 'video' : 'audio');			
-				htmlMediaElement.parentNode.insertBefore(dummy, htmlMediaElement);
-				htmlMediaElement.style.display = 'none';
-				
-				// use this one from now on
-				result.htmlMediaElement = htmlMediaElement = dummy;
-			}
-				
-			for (i=0; i<mediaFiles.length; i++) {
-				// normal check
-				if (mediaFiles[i].type == "video/m3u8" || htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== ''
-					// special case for Mac/Safari 5.0.3 which answers '' to canPlayType('audio/mp3') but 'maybe' to canPlayType('audio/mpeg')
-					|| htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/mp3/,'mpeg')).replace(/no/, '') !== ''
-					// special case for m4a supported by detecting mp4 support
-					|| htmlMediaElement.canPlayType(mediaFiles[i].type.replace(/m4a/,'mp4')).replace(/no/, '') !== '') {
-					result.method = 'native';
-					result.url = mediaFiles[i].url;
-					break;
-				}
-			}			
-			
-			if (result.method === 'native') {
-				if (result.url !== null) {
-					htmlMediaElement.src = result.url;
-				}
-			
-				// if `auto_plugin` mode, then cache the native result but try plugins.
-				if (options.mode !== 'auto_plugin') {
-					return result;
-				}
-			}
-		}
-
-		// if native playback didn't work, then test plugins
-		if (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'shim') {
-			for (i=0; i<mediaFiles.length; i++) {
-				type = mediaFiles[i].type;
-
-				// test all plugins in order of preference [silverlight, flash]
-				for (j=0; j<options.plugins.length; j++) {
-
-					pluginName = options.plugins[j];
-			
-					// test version of plugin (for future features)
-					pluginVersions = mejs.plugins[pluginName];				
-					
-					for (k=0; k<pluginVersions.length; k++) {
-						pluginInfo = pluginVersions[k];
-					
-						// test if user has the correct plugin version
-						
-						// for youtube/vimeo
-						if (pluginInfo.version == null || 
-							
-							mejs.PluginDetector.hasPluginVersion(pluginName, pluginInfo.version)) {
-
-							// test for plugin playback types
-							for (l=0; l<pluginInfo.types.length; l++) {
-								// find plugin that can play the type
-								if (type.toLowerCase() == pluginInfo.types[l].toLowerCase()) {
-									result.method = pluginName;
-									result.url = mediaFiles[i].url;
-									return result;
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-		
-		// at this point, being in 'auto_plugin' mode implies that we tried plugins but failed.
-		// if we have native support then return that.
-		if (options.mode === 'auto_plugin' && result.method === 'native') {
-			return result;
-		}
-
-		// what if there's nothing to play? just grab the first available
-		if (result.method === '' && mediaFiles.length > 0) {
-			result.url = mediaFiles[0].url;
-		}
-
-		return result;
-	},
-
-	formatType: function(url, type) {
-		// if no type is supplied, fake it with the extension
-		if (url && !type) {		
-			return this.getTypeFromFile(url);
-		} else {
-			// only return the mime part of the type in case the attribute contains the codec
-			// see http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-source-element
-			// `video/mp4; codecs="avc1.42E01E, mp4a.40.2"` becomes `video/mp4`
-			
-			if (type && ~type.indexOf(';')) {
-				return type.substr(0, type.indexOf(';')); 
-			} else {
-				return type;
-			}
-		}
-	},
-	
-	getTypeFromFile: function(url) {
-		url = url.split('?')[0];
-		var
-			ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase(),
-			av = /(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(ext) ? 'video/' : 'audio/';
-		return this.getTypeFromExtension(ext, av);
-	},
-	
-	getTypeFromExtension: function(ext, av) {
-		av = av || '';
-		
-		switch (ext) {
-			case 'mp4':
-			case 'm4v':
-			case 'm4a':
-			case 'f4v':
-			case 'f4a':
-				return av + 'mp4';
-			case 'flv':
-				return av + 'x-flv';
-			case 'webm':
-			case 'webma':
-			case 'webmv':	
-				return av + 'webm';
-			case 'ogg':
-			case 'oga':
-			case 'ogv':	
-				return av + 'ogg';
-			case 'm3u8':
-				return 'application/x-mpegurl';
-			case 'ts':
-				return av + 'mp2t';
-			default:
-				return av + ext;
-		}
-	},
-
-	createErrorMessage: function(playback, options, poster) {
-		var 
-			htmlMediaElement = playback.htmlMediaElement,
-			errorContainer = document.createElement('div'),
-			errorContent = options.customError;
-			
-		errorContainer.className = 'me-cannotplay';
-
-		try {
-			errorContainer.style.width = htmlMediaElement.width + 'px';
-			errorContainer.style.height = htmlMediaElement.height + 'px';
-		} catch (e) {}
-
-		if (!errorContent) {
-			errorContent = '<a href="' + playback.url + '">';
-
-			if (poster !== '') {
-				errorContent += '<img src="' + poster + '" width="100%" height="100%" alt="" />';
-			}
-
-			errorContent += '<span>' + mejs.i18n.t('Download File') + '</span></a>';
-		}
-
-		errorContainer.innerHTML = errorContent;
-
-		htmlMediaElement.parentNode.insertBefore(errorContainer, htmlMediaElement);
-		htmlMediaElement.style.display = 'none';
-
-		options.error(htmlMediaElement);
-	},
-
-	createPlugin:function(playback, options, poster, autoplay, preload, controls) {
-		var 
-			htmlMediaElement = playback.htmlMediaElement,
-			width = 1,
-			height = 1,
-			pluginid = 'me_' + playback.method + '_' + (mejs.meIndex++),
-			pluginMediaElement = new mejs.PluginMediaElement(pluginid, playback.method, playback.url),
-			container = document.createElement('div'),
-			specialIEContainer,
-			node,
-			initVars;
-
-		// copy tagName from html media element
-		pluginMediaElement.tagName = htmlMediaElement.tagName
-
-		// copy attributes from html media element to plugin media element
-		for (var i = 0; i < htmlMediaElement.attributes.length; i++) {
-			var attribute = htmlMediaElement.attributes[i];
-			if (attribute.specified) {
-				pluginMediaElement.setAttribute(attribute.name, attribute.value);
-			}
-		}
-
-		// check for placement inside a <p> tag (sometimes WYSIWYG editors do this)
-		node = htmlMediaElement.parentNode;
-
-		while (node !== null && node.tagName != null && node.tagName.toLowerCase() !== 'body' && 
-				node.parentNode != null && node.parentNode.tagName != null && node.parentNode.constructor != null && node.parentNode.constructor.name === "ShadowRoot") {
-			if (node.parentNode.tagName.toLowerCase() === 'p') {
-				node.parentNode.parentNode.insertBefore(node, node.parentNode);
-				break;
-			}
-			node = node.parentNode;
-		}
-
-		if (playback.isVideo) {
-			width = (options.pluginWidth > 0) ? options.pluginWidth : (options.videoWidth > 0) ? options.videoWidth : (htmlMediaElement.getAttribute('width') !== null) ? htmlMediaElement.getAttribute('width') : options.defaultVideoWidth;
-			height = (options.pluginHeight > 0) ? options.pluginHeight : (options.videoHeight > 0) ? options.videoHeight : (htmlMediaElement.getAttribute('height') !== null) ? htmlMediaElement.getAttribute('height') : options.defaultVideoHeight;
-		
-			// in case of '%' make sure it's encoded
-			width = mejs.Utility.encodeUrl(width);
-			height = mejs.Utility.encodeUrl(height);
-		
-		} else {
-			if (options.enablePluginDebug) {
-				width = 320;
-				height = 240;
-			}
-		}
-
-		// register plugin
-		pluginMediaElement.success = options.success;
-		
-		// add container (must be added to DOM before inserting HTML for IE)
-		container.className = 'me-plugin';
-		container.id = pluginid + '_container';
-		
-		if (playback.isVideo) {
-				htmlMediaElement.parentNode.insertBefore(container, htmlMediaElement);
-		} else {
-				document.body.insertBefore(container, document.body.childNodes[0]);
-		}
-		
-		if (playback.method === 'flash' || playback.method === 'silverlight') {
-
-			// flash/silverlight vars
-			initVars = [
-				'id=' + pluginid,
-				'isvideo=' + ((playback.isVideo) ? "true" : "false"),
-				'autoplay=' + ((autoplay) ? "true" : "false"),
-				'preload=' + preload,
-				'width=' + width,
-				'startvolume=' + options.startVolume,
-				'timerrate=' + options.timerRate,
-				'flashstreamer=' + options.flashStreamer,
-				'height=' + height,
-				'pseudostreamstart=' + options.pseudoStreamingStartQueryParam];
-	
-			if (playback.url !== null) {
-				if (playback.method == 'flash') {
-					initVars.push('file=' + mejs.Utility.encodeUrl(playback.url));
-				} else {
-					initVars.push('file=' + playback.url);
-				}
-			}
-			if (options.enablePluginDebug) {
-				initVars.push('debug=true');
-			}
-			if (options.enablePluginSmoothing) {
-				initVars.push('smoothing=true');
-			}
-			if (options.enablePseudoStreaming) {
-				initVars.push('pseudostreaming=true');
-			}
-			if (controls) {
-				initVars.push('controls=true'); // shows controls in the plugin if desired
-			}
-			if (options.pluginVars) {
-				initVars = initVars.concat(options.pluginVars);
-			}		
-			
-			// call from plugin
-			window[pluginid + '_init'] = function() {
-				switch (pluginMediaElement.pluginType) {
-					case 'flash':
-						pluginMediaElement.pluginElement = pluginMediaElement.pluginApi = document.getElementById(pluginid);
-						break;
-					case 'silverlight':
-						pluginMediaElement.pluginElement = document.getElementById(pluginMediaElement.id);
-						pluginMediaElement.pluginApi = pluginMediaElement.pluginElement.Content.MediaElementJS;
-						break;
-				}
-	
-				if (pluginMediaElement.pluginApi != null && pluginMediaElement.success) {
-					pluginMediaElement.success(pluginMediaElement, htmlMediaElement);
-				}
-			}
-			
-			// event call from plugin
-			window[pluginid + '_event'] = function(eventName, values) {
-		
-				var
-					e,
-					i,
-					bufferedTime;
-		        
-				// fake event object to mimic real HTML media event.
-				e = {
-					type: eventName,
-					target: pluginMediaElement
-				};
-		
-				// attach all values to element and event object
-				for (i in values) {
-					pluginMediaElement[i] = values[i];
-					e[i] = values[i];
-				}
-		
-				// fake the newer W3C buffered TimeRange (loaded and total have been removed)
-				bufferedTime = values.bufferedTime || 0;
-		
-				e.target.buffered = e.buffered = {
-					start: function(index) {
-						return 0;
-					},
-					end: function (index) {
-						return bufferedTime;
-					},
-					length: 1
-				};
-		
-				pluginMediaElement.dispatchEvent(e);
-			}			
-			
-			
-		}
-
-		switch (playback.method) {
-			case 'silverlight':
-				container.innerHTML =
-'<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" id="' + pluginid + '" name="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' +
-'<param name="initParams" value="' + initVars.join(',') + '" />' +
-'<param name="windowless" value="true" />' +
-'<param name="background" value="black" />' +
-'<param name="minRuntimeVersion" value="3.0.0.0" />' +
-'<param name="autoUpgrade" value="true" />' +
-'<param name="source" value="' + options.pluginPath + options.silverlightName + '" />' +
-'</object>';
-					break;
-
-			case 'flash':
-
-				if (mejs.MediaFeatures.isIE) {
-					specialIEContainer = document.createElement('div');
-					container.appendChild(specialIEContainer);
-					specialIEContainer.outerHTML =
-'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' +
-'id="' + pluginid + '" width="' + width + '" height="' + height + '" class="mejs-shim">' +
-'<param name="movie" value="' + options.pluginPath + options.flashName + '?' + (new Date().getTime()) + '" />' +
-'<param name="flashvars" value="' + initVars.join('&amp;') + '" />' +
-'<param name="quality" value="high" />' +
-'<param name="bgcolor" value="#000000" />' +
-'<param name="wmode" value="transparent" />' +
-'<param name="allowScriptAccess" value="' + options.flashScriptAccess + '" />' +
-'<param name="allowFullScreen" value="true" />' +
-'<param name="scale" value="default" />' + 
-'</object>';
-
-				} else {
-
-					container.innerHTML =
-'<embed id="' + pluginid + '" name="' + pluginid + '" ' +
-'play="true" ' +
-'loop="false" ' +
-'quality="high" ' +
-'bgcolor="#000000" ' +
-'wmode="transparent" ' +
-'allowScriptAccess="' + options.flashScriptAccess + '" ' +
-'allowFullScreen="true" ' +
-'type="application/x-shockwave-flash" pluginspage="//www.macromedia.com/go/getflashplayer" ' +
-'src="' + options.pluginPath + options.flashName + '" ' +
-'flashvars="' + initVars.join('&') + '" ' +
-'width="' + width + '" ' +
-'height="' + height + '" ' +
-'scale="default"' + 
-'class="mejs-shim"></embed>';
-				}
-				break;
-			
-			case 'youtube':
-			
-				
-				var videoId;
-				// youtu.be url from share button
-				if (playback.url.lastIndexOf("youtu.be") != -1) {
-					videoId = playback.url.substr(playback.url.lastIndexOf('/')+1);
-					if (videoId.indexOf('?') != -1) {
-						videoId = videoId.substr(0, videoId.indexOf('?'));
-					}
-				}
-				else {
-					// https://www.youtube.com/watch?v=
-					var videoIdMatch = playback.url.match( /[?&]v=([^&#]+)|&|#|$/ );
-					if ( videoIdMatch ) {
-						videoId = videoIdMatch[1];
-					}
-				}
-				youtubeSettings = {
-						container: container,
-						containerId: container.id,
-						pluginMediaElement: pluginMediaElement,
-						pluginId: pluginid,
-						videoId: videoId,
-						height: height,
-						width: width,
-                        scheme: playback.scheme
-					};				
-				
-				// favor iframe version of YouTube
-				if (window.postMessage) {
-					mejs.YouTubeApi.enqueueIframe(youtubeSettings);		
-				} else if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) {
-					mejs.YouTubeApi.createFlash(youtubeSettings, options);
-				}
-				
-				break;
-			
-			// DEMO Code. Does NOT work.
-			case 'vimeo':
-				var player_id = pluginid + "_player";
-				pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1);
-				
-				container.innerHTML ='<iframe src="' + playback.scheme + 'player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?api=1&portrait=0&byline=0&title=0&player_id=' + player_id + '" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim" id="' + player_id + '" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
-				if (typeof($f) == 'function') { // froogaloop available
-					var player = $f(container.childNodes[0]),
-						playerState = -1;
-					
-					player.addEvent('ready', function() {
-		
-						player.playVideo = function() {
-							player.api( 'play' );
-						} 
-						player.stopVideo = function() {
-							player.api( 'unload' );
-						} 
-						player.pauseVideo = function() {
-							player.api( 'pause' );
-						} 
-						player.seekTo = function( seconds ) {
-							player.api( 'seekTo', seconds );
-						}
-						player.setVolume = function( volume ) {
-							player.api( 'setVolume', volume );
-						}
-						player.setMuted = function( muted ) {
-							if( muted ) {
-								player.lastVolume = player.api( 'getVolume' );
-								player.api( 'setVolume', 0 );
-							} else {
-								player.api( 'setVolume', player.lastVolume );
-								delete player.lastVolume;
-							}
-						}
-						// parity with YT player
-						player.getPlayerState = function() {
-							return playerState;
-						}			
-
-						function createEvent(player, pluginMediaElement, eventName, e) {
-							var event = {
-								type: eventName,
-								target: pluginMediaElement
-							};
-							if (eventName == 'timeupdate') {
-								pluginMediaElement.currentTime = event.currentTime = e.seconds;
-								pluginMediaElement.duration = event.duration = e.duration;
-							}
-							pluginMediaElement.dispatchEvent(event);
-						}
-
-						player.addEvent('play', function() {
-							playerState = 1;
-							createEvent(player, pluginMediaElement, 'play');
-							createEvent(player, pluginMediaElement, 'playing');
-						});
-
-						player.addEvent('pause', function() {
-							playerState = 2;							
-							createEvent(player, pluginMediaElement, 'pause');
-						});
-
-						player.addEvent('finish', function() {
-							playerState = 0;							
-							createEvent(player, pluginMediaElement, 'ended');
-						});
-
-						player.addEvent('playProgress', function(e) {
-							createEvent(player, pluginMediaElement, 'timeupdate', e);
-						});
-						
-						player.addEvent('seek', function(e) {
-							playerState = 3;
-							createEvent(player, pluginMediaElement, 'seeked', e);
-						});	
-						
-						player.addEvent('loadProgress', function(e) {
-							playerState = 3;
-							createEvent(player, pluginMediaElement, 'progress', e);
-						});												
-
-						pluginMediaElement.pluginElement = container;
-						pluginMediaElement.pluginApi = player;
-
-						pluginMediaElement.success(pluginMediaElement, pluginMediaElement.pluginElement);						
-					});
-				}
-				else {
-					console.warn("You need to include froogaloop for vimeo to work");
-				}
-				break;			
-		}
-		// hide original element
-		htmlMediaElement.style.display = 'none';
-		// prevent browser from autoplaying when using a plugin
-		htmlMediaElement.removeAttribute('autoplay');
-		
-		return pluginMediaElement;
-	},
-
-	updateNative: function(playback, options, autoplay, preload) {
-		
-		var htmlMediaElement = playback.htmlMediaElement,
-			m;
-		
-		
-		// add methods to video object to bring it into parity with Flash Object
-		for (m in mejs.HtmlMediaElement) {
-			htmlMediaElement[m] = mejs.HtmlMediaElement[m];
-		}
-
-		/*
-		Chrome now supports preload="none"
-		if (mejs.MediaFeatures.isChrome) {
-		
-			// special case to enforce preload attribute (Chrome doesn't respect this)
-			if (preload === 'none' && !autoplay) {
-			
-				// forces the browser to stop loading (note: fails in IE9)
-				htmlMediaElement.src = '';
-				htmlMediaElement.load();
-				htmlMediaElement.canceledPreload = true;
-
-				htmlMediaElement.addEventListener('play',function() {
-					if (htmlMediaElement.canceledPreload) {
-						htmlMediaElement.src = playback.url;
-						htmlMediaElement.load();
-						htmlMediaElement.play();
-						htmlMediaElement.canceledPreload = false;
-					}
-				}, false);
-			// for some reason Chrome forgets how to autoplay sometimes.
-			} else if (autoplay) {
-				htmlMediaElement.load();
-				htmlMediaElement.play();
-			}
-		}
-		*/
-
-		// fire success code
-		options.success(htmlMediaElement, htmlMediaElement);
-		
-		return htmlMediaElement;
-	}
-};
-
-/*
- - test on IE (object vs. embed)
- - determine when to use iframe (Firefox, Safari, Mobile) vs. Flash (Chrome, IE)
- - fullscreen?
-*/
-
-// YouTube Flash and Iframe API
-mejs.YouTubeApi = {
-	isIframeStarted: false,
-	isIframeLoaded: false,
-	loadIframeApi: function(yt) {
-		if (!this.isIframeStarted) {
-			var tag = document.createElement('script');
-			tag.src = yt.scheme + "www.youtube.com/player_api";
-			var firstScriptTag = document.getElementsByTagName('script')[0];
-			firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
-			this.isIframeStarted = true;
-		}
-	},
-	iframeQueue: [],
-	enqueueIframe: function(yt) {
-		
-		if (this.isLoaded) {
-			this.createIframe(yt);
-		} else {
-			this.loadIframeApi(yt);
-			this.iframeQueue.push(yt);
-		}
-	},
-	createIframe: function(settings) {
-		
-		var
-		pluginMediaElement = settings.pluginMediaElement,	
-		player = new YT.Player(settings.containerId, {
-			height: settings.height,
-			width: settings.width,
-			videoId: settings.videoId,
-			playerVars: {controls:0,wmode:'transparent'},
-			events: {
-				'onReady': function() {
-					
-					// wrapper to match
-					player.setVideoSize = function(width, height) {
-						player.setSize(width, height);
-					}
-					
-					// hook up iframe object to MEjs
-					settings.pluginMediaElement.pluginApi = player;
-					settings.pluginMediaElement.pluginElement = document.getElementById(settings.containerId);
-					
-					// init mejs
-					pluginMediaElement.success(pluginMediaElement, pluginMediaElement.pluginElement);
-					
-					// create timer
-					setInterval(function() {
-						mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
-					}, 250);					
-				},
-				'onStateChange': function(e) {
-					
-					mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement);
-					
-				}
-			}
-		});
-	},
-	
-	createEvent: function (player, pluginMediaElement, eventName) {
-		var event = {
-			type: eventName,
-			target: pluginMediaElement
-		};
-
-		if (player && player.getDuration) {
-			
-			// time 
-			pluginMediaElement.currentTime = event.currentTime = player.getCurrentTime();
-			pluginMediaElement.duration = event.duration = player.getDuration();
-			
-			// state
-			event.paused = pluginMediaElement.paused;
-			event.ended = pluginMediaElement.ended;			
-			
-			// sound
-			event.muted = player.isMuted();
-			event.volume = player.getVolume() / 100;
-			
-			// progress
-			event.bytesTotal = player.getVideoBytesTotal();
-			event.bufferedBytes = player.getVideoBytesLoaded();
-			
-			// fake the W3C buffered TimeRange
-			var bufferedTime = event.bufferedBytes / event.bytesTotal * event.duration;
-			
-			event.target.buffered = event.buffered = {
-				start: function(index) {
-					return 0;
-				},
-				end: function (index) {
-					return bufferedTime;
-				},
-				length: 1
-			};
-
-		}
-		
-		// send event up the chain
-		pluginMediaElement.dispatchEvent(event);
-	},	
-	
-	iFrameReady: function() {
-		
-		this.isLoaded = true;
-		this.isIframeLoaded = true;
-		
-		while (this.iframeQueue.length > 0) {
-			var settings = this.iframeQueue.pop();
-			this.createIframe(settings);
-		}	
-	},
-	
-	// FLASH!
-	flashPlayers: {},
-	createFlash: function(settings) {
-		
-		this.flashPlayers[settings.pluginId] = settings;
-		
-		/*
-		settings.container.innerHTML =
-			'<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="' + settings.scheme + 'www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=' + settings.pluginId  + '&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0" ' +
-				'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' +
-				'<param name="allowScriptAccess" value="sameDomain">' +
-				'<param name="wmode" value="transparent">' +
-			'</object>';
-		*/
-
-		var specialIEContainer,
-			youtubeUrl = settings.scheme + 'www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=' + settings.pluginId  + '&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0';
-			
-		if (mejs.MediaFeatures.isIE) {
-			
-			specialIEContainer = document.createElement('div');
-			settings.container.appendChild(specialIEContainer);
-			specialIEContainer.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="' + settings.scheme + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' +
-'id="' + settings.pluginId + '" width="' + settings.width + '" height="' + settings.height + '" class="mejs-shim">' +
-	'<param name="movie" value="' + youtubeUrl + '" />' +
-	'<param name="wmode" value="transparent" />' +
-	'<param name="allowScriptAccess" value="' + options.flashScriptAccess + '" />' +
-	'<param name="allowFullScreen" value="true" />' +
-'</object>';
-		} else {
-		settings.container.innerHTML =
-			'<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="' + youtubeUrl + '" ' +
-				'width="' + settings.width + '" height="' + settings.height + '" style="visibility: visible; " class="mejs-shim">' +
-				'<param name="allowScriptAccess" value="' + options.flashScriptAccess + '">' +
-				'<param name="wmode" value="transparent">' +
-			'</object>';
-		}		
-		
-	},
-	
-	flashReady: function(id) {
-		var
-			settings = this.flashPlayers[id],
-			player = document.getElementById(id),
-			pluginMediaElement = settings.pluginMediaElement;
-		
-		// hook up and return to MediaELementPlayer.success	
-		pluginMediaElement.pluginApi = 
-		pluginMediaElement.pluginElement = player;
-		
-		settings.success(pluginMediaElement, pluginMediaElement.pluginElement);
-		
-		// load the youtube video
-		player.cueVideoById(settings.videoId);
-		
-		var callbackName = settings.containerId + '_callback';
-		
-		window[callbackName] = function(e) {
-			mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement);
-		}
-		
-		player.addEventListener('onStateChange', callbackName);
-		
-		setInterval(function() {
-			mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
-		}, 250);
-		
-		mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay');
-	},
-	
-	handleStateChange: function(youTubeState, player, pluginMediaElement) {
-		switch (youTubeState) {
-			case -1: // not started
-				pluginMediaElement.paused = true;
-				pluginMediaElement.ended = true;
-				mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'loadedmetadata');
-				//createYouTubeEvent(player, pluginMediaElement, 'loadeddata');
-				break;
-			case 0:
-				pluginMediaElement.paused = false;
-				pluginMediaElement.ended = true;
-				mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'ended');
-				break;
-			case 1:
-				pluginMediaElement.paused = false;
-				pluginMediaElement.ended = false;				
-				mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'play');
-				mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'playing');
-				break;
-			case 2:
-				pluginMediaElement.paused = true;
-				pluginMediaElement.ended = false;				
-				mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'pause');
-				break;
-			case 3: // buffering
-				mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'progress');
-				break;
-			case 5:
-				// cued?
-				break;						
-			
-		}			
-		
-	}
-}
-// IFRAME
-window.onYouTubePlayerAPIReady = function() {
-	mejs.YouTubeApi.iFrameReady();
-};
-// FLASH
-window.onYouTubePlayerReady = function(id) {
-	mejs.YouTubeApi.flashReady(id);
-};
-
-window.mejs = mejs;
-window.MediaElement = mejs.MediaElement;
-
-/*
- * Adds Internationalization and localization to mediaelement.
- *
- * This file does not contain translations, you have to add them manually.
- * The schema is always the same: me-i18n-locale-[IETF-language-tag].js
- *
- * Examples are provided both for german and chinese translation.
- *
- *
- * What is the concept beyond i18n?
- *   http://en.wikipedia.org/wiki/Internationalization_and_localization
- *
- * What langcode should i use?
- *   http://en.wikipedia.org/wiki/IETF_language_tag
- *   https://tools.ietf.org/html/rfc5646
- *
- *
- * License?
- *
- *   The i18n file uses methods from the Drupal project (drupal.js):
- *     - i18n.methods.t() (modified)
- *     - i18n.methods.checkPlain() (full copy)
- *
- *   The Drupal project is (like mediaelementjs) licensed under GPLv2.
- *    - http://drupal.org/licensing/faq/#q1
- *    - https://github.com/johndyer/mediaelement
- *    - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- *
- *
- * @author
- *   Tim Latz (latz.tim@gmail.com)
- *
- *
- * @params
- *  - context - document, iframe ..
- *  - exports - CommonJS, window ..
- *
- */
-;(function(context, exports, undefined) {
-    "use strict";
-
-    var i18n = {
-        "locale": {
-            // Ensure previous values aren't overwritten.
-            "language" : (exports.i18n && exports.i18n.locale.language) || '',
-            "strings" : (exports.i18n && exports.i18n.locale.strings) || {}
-        },
-        "ietf_lang_regex" : /^(x\-)?[a-z]{2,}(\-\w{2,})?(\-\w{2,})?$/,
-        "methods" : {}
-    };
-// start i18n
-
-
-    /**
-     * Get language, fallback to browser's language if empty
-     *
-     * IETF: RFC 5646, https://tools.ietf.org/html/rfc5646
-     * Examples: en, zh-CN, cmn-Hans-CN, sr-Latn-RS, es-419, x-private
-     */
-    i18n.getLanguage = function () {
-        var language = i18n.locale.language || window.navigator.userLanguage || window.navigator.language;
-        return i18n.ietf_lang_regex.exec(language) ? language : null;
-
-        //(WAS: convert to iso 639-1 (2-letters, lower case))
-        //return language.substr(0, 2).toLowerCase();
-    };
-
-    // i18n fixes for compatibility with WordPress
-    if ( typeof mejsL10n != 'undefined' ) {
-        i18n.locale.language = mejsL10n.language;
-    }
-
-
-
-    /**
-     * Encode special characters in a plain-text string for display as HTML.
-     */
-    i18n.methods.checkPlain = function (str) {
-        var character, regex,
-        replace = {
-            '&': '&amp;',
-            '"': '&quot;',
-            '<': '&lt;',
-            '>': '&gt;'
-        };
-        str = String(str);
-        for (character in replace) {
-            if (replace.hasOwnProperty(character)) {
-                regex = new RegExp(character, 'g');
-                str = str.replace(regex, replace[character]);
-            }
-        }
-        return str;
-    };
-
-    /**
-     * Translate strings to the page language or a given language.
-     *
-     *
-     * @param str
-     *   A string containing the English string to translate.
-     *
-     * @param options
-     *   - 'context' (defaults to the default context): The context the source string
-     *     belongs to.
-     *
-     * @return
-     *   The translated string, escaped via i18n.methods.checkPlain()
-     */
-    i18n.methods.t = function (str, options) {
-
-        // Fetch the localized version of the string.
-        if (i18n.locale.strings && i18n.locale.strings[options.context] && i18n.locale.strings[options.context][str]) {
-            str = i18n.locale.strings[options.context][str];
-        }
-
-        return i18n.methods.checkPlain(str);
-    };
-
-
-    /**
-     * Wrapper for i18n.methods.t()
-     *
-     * @see i18n.methods.t()
-     * @throws InvalidArgumentException
-     */
-    i18n.t = function(str, options) {
-
-        if (typeof str === 'string' && str.length > 0) {
-
-            // check every time due language can change for
-            // different reasons (translation, lang switcher ..)
-            var language = i18n.getLanguage();
-
-            options = options || {
-                "context" : language
-            };
-
-            return i18n.methods.t(str, options);
-        }
-        else {
-            throw {
-                "name" : 'InvalidArgumentException',
-                "message" : 'First argument is either not a string or empty.'
-            };
-        }
-    };
-
-// end i18n
-    exports.i18n = i18n;
-}(document, mejs));
-
-// i18n fixes for compatibility with WordPress
-;(function(exports, undefined) {
-
-    "use strict";
-
-    if ( typeof mejsL10n != 'undefined' ) {
-        exports[mejsL10n.language] = mejsL10n.strings;
-    }
-
-}(mejs.i18n.locale.strings));
-
-/*!
- *
- * MediaElementPlayer
- * http://mediaelementjs.com/
- *
- * Creates a controller bar for HTML5 <video> add <audio> tags
- * using jQuery and MediaElement.js (HTML5 Flash/Silverlight wrapper)
- *
- * Copyright 2010-2013, John Dyer (http://j.hn/)
- * License: MIT
- *
- */
-if (typeof jQuery != 'undefined') {
-	mejs.$ = jQuery;
-} else if (typeof Zepto != 'undefined') {
-	mejs.$ = Zepto;
-
-	// define `outerWidth` method which has not been realized in Zepto
-	Zepto.fn.outerWidth = function(includeMargin) {
-		var width = $(this).width();
-		if (includeMargin) {
-			width += parseInt($(this).css('margin-right'), 10);
-			width += parseInt($(this).css('margin-left'), 10);
-		}
-		return width
-	}
-
-} else if (typeof ender != 'undefined') {
-	mejs.$ = ender;
-}
-(function ($) {
-
-	// default player values
-	mejs.MepDefaults = {
-		// url to poster (to fix iOS 3.x)
-		poster: '',
-		// When the video is ended, we can show the poster.
-		showPosterWhenEnded: false,
-		// default if the <video width> is not specified
-		defaultVideoWidth: 480,
-		// default if the <video height> is not specified
-		defaultVideoHeight: 270,
-		// if set, overrides <video width>
-		videoWidth: -1,
-		// if set, overrides <video height>
-		videoHeight: -1,
-		// default if the user doesn't specify
-		defaultAudioWidth: 400,
-		// default if the user doesn't specify
-		defaultAudioHeight: 30,
-
-		// default amount to move back when back key is pressed
-		defaultSeekBackwardInterval: function(media) {
-			return (media.duration * 0.05);
-		},
-		// default amount to move forward when forward key is pressed
-		defaultSeekForwardInterval: function(media) {
-			return (media.duration * 0.05);
-		},
-
-		// set dimensions via JS instead of CSS
-		setDimensions: true,
-
-		// width of audio player
-		audioWidth: -1,
-		// height of audio player
-		audioHeight: -1,
-		// initial volume when the player starts (overrided by user cookie)
-		startVolume: 0.8,
-		// useful for <audio> player loops
-		loop: false,
-		// rewind to beginning when media ends
-				autoRewind: true,
-		// resize to media dimensions
-		enableAutosize: true,
-
-		/*
-		 * Time format to use. Default: 'mm:ss'
-		 * Supported units:
-		 *   h: hour
-		 *   m: minute
-		 *   s: second
-		 *   f: frame count
-		 * When using 'hh', 'mm', 'ss' or 'ff' we always display 2 digits.
-		 * If you use 'h', 'm', 's' or 'f' we display 1 digit if possible.
-		 *
-		 * Example to display 75 seconds:
-		 * Format 'mm:ss': 01:15
-		 * Format 'm:ss': 1:15
-		 * Format 'm:s': 1:15
-		 */
-		timeFormat: '',
-		// forces the hour marker (##:00:00)
-		alwaysShowHours: false,
-		// show framecount in timecode (##:00:00:00)
-		showTimecodeFrameCount: false,
-		// used when showTimecodeFrameCount is set to true
-		framesPerSecond: 25,
-
-		// automatically calculate the width of the progress bar based on the sizes of other elements
-		autosizeProgress : true,
-		// Hide controls when playing and mouse is not over the video
-		alwaysShowControls: false,
-		// Display the video control
-		hideVideoControlsOnLoad: false,
-		// Enable click video element to toggle play/pause
-		clickToPlayPause: true,
-		// force iPad's native controls
-		iPadUseNativeControls: false,
-		// force iPhone's native controls
-		iPhoneUseNativeControls: false,
-		// force Android's native controls
-		AndroidUseNativeControls: false,
-		// features to show
-		features: ['playpause','current','progress','duration','tracks','volume','fullscreen'],
-		// only for dynamic
-		isVideo: true,
- 
-		// stretching modes (auto, fill, responsive, none)
-		stretching: 'auto',
-
-		// turns keyboard support on and off for this instance
-		enableKeyboard: true,
-
-		// whenthis player starts, it will pause other players
-		pauseOtherPlayers: true,
-
-		// array of keyboard actions such as play pause
-		keyActions: [
-				{
-						keys: [
-								32, // SPACE
-								179 // GOOGLE play/pause button
-								 ],
-						action: function(player, media) {
-								if (media.paused || media.ended) {
-										media.play();
-								} else {
-										media.pause();
-								}
-						}
-				},
-				{
-						keys: [38], // UP
-						action: function(player, media) {
-								player.container.find('.mejs-volume-slider').css('display','block');
-								if (player.isVideo) {
-										player.showControls();
-										player.startControlsTimer();
-								}
-
-								var newVolume = Math.min(media.volume + 0.1, 1);
-								media.setVolume(newVolume);
-						}
-				},
-				{
-						keys: [40], // DOWN
-						action: function(player, media) {
-								player.container.find('.mejs-volume-slider').css('display','block');
-								if (player.isVideo) {
-										player.showControls();
-										player.startControlsTimer();
-								}
-
-								var newVolume = Math.max(media.volume - 0.1, 0);
-								media.setVolume(newVolume);
-						}
-				},
-				{
-						keys: [
-								37, // LEFT
-								227 // Google TV rewind
-						],
-						action: function(player, media) {
-								if (!isNaN(media.duration) && media.duration > 0) {
-										if (player.isVideo) {
-												player.showControls();
-												player.startControlsTimer();
-										}
-
-										// 5%
-										var newTime = Math.max(media.currentTime - player.options.defaultSeekBackwardInterval(media), 0);
-										media.setCurrentTime(newTime);
-								}
-						}
-				},
-				{
-						keys: [
-								39, // RIGHT
-								228 // Google TV forward
-						],
-						action: function(player, media) {
-								if (!isNaN(media.duration) && media.duration > 0) {
-										if (player.isVideo) {
-												player.showControls();
-												player.startControlsTimer();
-										}
-
-										// 5%
-										var newTime = Math.min(media.currentTime + player.options.defaultSeekForwardInterval(media), media.duration);
-										media.setCurrentTime(newTime);
-								}
-						}
-				},
-				{
-						keys: [70], // F
-						action: function(player, media) {
-								if (typeof player.enterFullScreen != 'undefined') {
-										if (player.isFullScreen) {
-												player.exitFullScreen();
-										} else {
-												player.enterFullScreen();
-										}
-								}
-						}
-				},
-				{
-						keys: [77], // M
-						action: function(player, media) {
-								player.container.find('.mejs-volume-slider').css('display','block');
-								if (player.isVideo) {
-										player.showControls();
-										player.startControlsTimer();
-								}
-								if (player.media.muted) {
-										player.setMuted(false);
-								} else {
-										player.setMuted(true);
-								}
-						}
-				}
-		]
-	};
-
-	mejs.mepIndex = 0;
-
-	mejs.players = {};
-
-	// wraps a MediaElement object in player controls
-	mejs.MediaElementPlayer = function(node, o) {
-		// enforce object, even without "new" (via John Resig)
-		if ( !(this instanceof mejs.MediaElementPlayer) ) {
-			return new mejs.MediaElementPlayer(node, o);
-		}
-
-		var t = this;
-
-		// these will be reset after the MediaElement.success fires
-		t.$media = t.$node = $(node);
-		t.node = t.media = t.$media[0];
-
-		if(!t.node) {
-			return
-		}
-
-		// check for existing player
-		if (typeof t.node.player != 'undefined') {
-			return t.node.player;
-		}
-
-
-		// try to get options from data-mejsoptions
-		if (typeof o == 'undefined') {
-			o = t.$node.data('mejsoptions');
-		}
-
-		// extend default options
-		t.options = $.extend({},mejs.MepDefaults,o);
-
-		if (!t.options.timeFormat) {
-			// Generate the time format according to options
-			t.options.timeFormat = 'mm:ss';
-			if (t.options.alwaysShowHours) {
-				t.options.timeFormat = 'hh:mm:ss';
-			}
-			if (t.options.showTimecodeFrameCount) {
-				t.options.timeFormat += ':ff';
-			}
-		}
-
-		mejs.Utility.calculateTimeFormat(0, t.options, t.options.framesPerSecond || 25);
-
-		// unique ID
-		t.id = 'mep_' + mejs.mepIndex++;
-
-		// add to player array (for focus events)
-		mejs.players[t.id] = t;
-
-		// start up
-		t.init();
-
-		return t;
-	};
-
-	// actual player
-	mejs.MediaElementPlayer.prototype = {
-
-		hasFocus: false,
-
-		controlsAreVisible: true,
-
-		init: function() {
-
-			var
-				t = this,
-				mf = mejs.MediaFeatures,
-				// options for MediaElement (shim)
-				meOptions = $.extend(true, {}, t.options, {
-					success: function(media, domNode) { t.meReady(media, domNode); },
-					error: function(e) { t.handleError(e);}
-				}),
-				tagName = t.media.tagName.toLowerCase();
-
-			t.isDynamic = (tagName !== 'audio' && tagName !== 'video');
-
-			if (t.isDynamic) {
-				// get video from src or href?
-				t.isVideo = t.options.isVideo;
-			} else {
-				t.isVideo = (tagName !== 'audio' && t.options.isVideo);
-			}
-
-			// use native controls in iPad, iPhone, and Android
-			if ((mf.isiPad && t.options.iPadUseNativeControls) || (mf.isiPhone && t.options.iPhoneUseNativeControls)) {
-
-				// add controls and stop
-				t.$media.attr('controls', 'controls');
-
-				// attempt to fix iOS 3 bug
-				//t.$media.removeAttr('poster');
-								// no Issue found on iOS3 -ttroxell
-
-				// override Apple's autoplay override for iPads
-				if (mf.isiPad && t.media.getAttribute('autoplay') !== null) {
-					t.play();
-				}
-
-			} else if (mf.isAndroid && t.options.AndroidUseNativeControls) {
-
-				// leave default player
-
-			} else {
-
-				// DESKTOP: use MediaElementPlayer controls
-
-				// remove native controls
-				t.$media.removeAttr('controls');
-				var videoPlayerTitle = t.isVideo ?
-					mejs.i18n.t('Video Player') : mejs.i18n.t('Audio Player');
-				// insert description for screen readers
-				$('<span class="mejs-offscreen">' + videoPlayerTitle + '</span>').insertBefore(t.$media);
-				// build container
-				t.container =
-					$('<div id="' + t.id + '" class="mejs-container ' + (mejs.MediaFeatures.svgAsImg ? 'svg' : 'no-svg') +
-					  '" tabindex="0" role="application" aria-label="' + videoPlayerTitle + '">'+
-						'<div class="mejs-inner">'+
-							'<div class="mejs-mediaelement"></div>'+
-							'<div class="mejs-layers"></div>'+
-							'<div class="mejs-controls"></div>'+
-							'<div class="mejs-clear"></div>'+
-						'</div>' +
-					'</div>')
-					.addClass(t.$media[0].className)
-					.insertBefore(t.$media)
-					.focus(function ( e ) {
-						if( !t.controlsAreVisible && !t.hasFocus ) {
-							t.showControls(true);
-							// In versions older than IE11, the focus causes the playbar to be displayed
-							// if user clicks on the Play/Pause button in the control bar once it attempts
-							// to hide it
-							if (!t.hasMsNativeFullScreen) {
-								var playButton = t.container.find('.mejs-playpause-button > button');
-								playButton.focus();
-							}
-						}
-					});
- 
-				if (t.options.stretching === 'fill' && !t.container.parent('mejs-fill-container').length) {
-					// outer container
-					t.outerContainer = t.$media.parent();
-					t.container.wrap('<div class="mejs-fill-container"/>');
-				}
-
-				// add classes for user and content
-				t.container.addClass(
-					(mf.isAndroid ? 'mejs-android ' : '') +
-					(mf.isiOS ? 'mejs-ios ' : '') +
-					(mf.isiPad ? 'mejs-ipad ' : '') +
-					(mf.isiPhone ? 'mejs-iphone ' : '') +
-					(t.isVideo ? 'mejs-video ' : 'mejs-audio ')
-				);
-
-
-				// move the <video/video> tag into the right spot
-				t.container.find('.mejs-mediaelement').append(t.$media);
-
-				// needs to be assigned here, after iOS remap
-				t.node.player = t;
-
-				// find parts
-				t.controls = t.container.find('.mejs-controls');
-				t.layers = t.container.find('.mejs-layers');
-
-				// determine the size
-
-				/* size priority:
-					(1) videoWidth (forced),
-					(2) style="width;height;"
-					(3) width attribute,
-					(4) defaultVideoWidth (for unspecified cases)
-				*/
-
-				var tagType = (t.isVideo ? 'video' : 'audio'),
-					capsTagName = tagType.substring(0,1).toUpperCase() + tagType.substring(1);
-
-
-
-				if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) {
-					t.width = t.options[tagType + 'Width'];
-				} else if (t.media.style.width !== '' && t.media.style.width !== null) {
-					t.width = t.media.style.width;
-				} else if (t.media.getAttribute('width') !== null) {
-					t.width = t.$media.attr('width');
-				} else {
-					t.width = t.options['default' + capsTagName + 'Width'];
-				}
-
-				if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) {
-					t.height = t.options[tagType + 'Height'];
-				} else if (t.media.style.height !== '' && t.media.style.height !== null) {
-					t.height = t.media.style.height;
-				} else if (t.$media[0].getAttribute('height') !== null) {
-					t.height = t.$media.attr('height');
-				} else {
-					t.height = t.options['default' + capsTagName + 'Height'];
-				}
-
-				// set the size, while we wait for the plugins to load below
-				t.setPlayerSize(t.width, t.height);
-
-				// create MediaElementShim
-				meOptions.pluginWidth = t.width;
-				meOptions.pluginHeight = t.height;
-			}
-
-			// create MediaElement shim
-			mejs.MediaElement(t.$media[0], meOptions);
-
-			if (typeof(t.container) != 'undefined' && t.controlsAreVisible){
-				// controls are shown when loaded
-				t.container.trigger('controlsshown');
-			}
-		},
-
-		showControls: function(doAnimation) {
-			var t = this;
-
-			doAnimation = typeof doAnimation == 'undefined' || doAnimation;
-
-			if (t.controlsAreVisible)
-				return;
-
-			if (doAnimation) {
-				t.controls
-					.removeClass('mejs-offscreen')
-					.stop(true, true).fadeIn(200, function() {
-						t.controlsAreVisible = true;
-						t.container.trigger('controlsshown');
-					});
-
-				// any additional controls people might add and want to hide
-				t.container.find('.mejs-control')
-					.removeClass('mejs-offscreen')
-					.stop(true, true).fadeIn(200, function() {t.controlsAreVisible = true;});
-
-			} else {
-				t.controls
-					.removeClass('mejs-offscreen')
-					.css('display','block');
-
-				// any additional controls people might add and want to hide
-				t.container.find('.mejs-control')
-					.removeClass('mejs-offscreen')
-					.css('display','block');
-
-				t.controlsAreVisible = true;
-				t.container.trigger('controlsshown');
-			}
-
-			t.setControlsSize();
-
-		},
-
-		hideControls: function(doAnimation) {
-			var t = this;
-
-			doAnimation = typeof doAnimation == 'undefined' || doAnimation;
-
-			if (!t.controlsAreVisible || t.options.alwaysShowControls || t.keyboardAction)
-				return;
-
-			if (doAnimation) {
-				// fade out main controls
-				t.controls.stop(true, true).fadeOut(200, function() {
-					$(this)
-						.addClass('mejs-offscreen')
-						.css('display','block');
-
-					t.controlsAreVisible = false;
-					t.container.trigger('controlshidden');
-				});
-
-				// any additional controls people might add and want to hide
-				t.container.find('.mejs-control').stop(true, true).fadeOut(200, function() {
-					$(this)
-						.addClass('mejs-offscreen')
-						.css('display','block');
-				});
-			} else {
-
-				// hide main controls
-				t.controls
-					.addClass('mejs-offscreen')
-					.css('display','block');
-
-				// hide others
-				t.container.find('.mejs-control')
-					.addClass('mejs-offscreen')
-					.css('display','block');
-
-				t.controlsAreVisible = false;
-				t.container.trigger('controlshidden');
-			}
-		},
-
-		controlsTimer: null,
-
-		startControlsTimer: function(timeout) {
-
-			var t = this;
-
-			timeout = typeof timeout != 'undefined' ? timeout : 1500;
-
-			t.killControlsTimer('start');
-
-			t.controlsTimer = setTimeout(function() {
-				//
-				t.hideControls();
-				t.killControlsTimer('hide');
-			}, timeout);
-		},
-
-		killControlsTimer: function(src) {
-
-			var t = this;
-
-			if (t.controlsTimer !== null) {
-				clearTimeout(t.controlsTimer);
-				delete t.controlsTimer;
-				t.controlsTimer = null;
-			}
-		},
-
-		controlsEnabled: true,
-
-		disableControls: function() {
-			var t= this;
-
-			t.killControlsTimer();
-			t.hideControls(false);
-			this.controlsEnabled = false;
-		},
-
-		enableControls: function() {
-			var t= this;
-
-			t.showControls(false);
-
-			t.controlsEnabled = true;
-		},
-
-		// Sets up all controls and events
-		meReady: function(media, domNode) {
-
-
-			var t = this,
-				mf = mejs.MediaFeatures,
-				autoplayAttr = domNode.getAttribute('autoplay'),
-				autoplay = !(typeof autoplayAttr == 'undefined' || autoplayAttr === null || autoplayAttr === 'false'),
-				featureIndex,
-				feature;
-
-			// make sure it can't create itself again if a plugin reloads
-			if (t.created) {
-				return;
-			} else {
-				t.created = true;
-			}
-
-			t.media = media;
-			t.domNode = domNode;
-
-			if (!(mf.isAndroid && t.options.AndroidUseNativeControls) && !(mf.isiPad && t.options.iPadUseNativeControls) && !(mf.isiPhone && t.options.iPhoneUseNativeControls)) {
-
-				// two built in features
-				t.buildposter(t, t.controls, t.layers, t.media);
-				t.buildkeyboard(t, t.controls, t.layers, t.media);
-				t.buildoverlays(t, t.controls, t.layers, t.media);
-
-				// grab for use by features
-				t.findTracks();
-
-				// add user-defined features/controls
-				for (featureIndex in t.options.features) {
-					feature = t.options.features[featureIndex];
-					if (t['build' + feature]) {
-						try {
-							t['build' + feature](t, t.controls, t.layers, t.media);
-						} catch (e) {
-							// TODO: report control error
-							//throw e;
-							
-							
-						}
-					}
-				}
-
-				t.container.trigger('controlsready');
-
-				// reset all layers and controls
-				t.setPlayerSize(t.width, t.height);
-				t.setControlsSize();
-
-
-				// controls fade
-				if (t.isVideo) {
-
-					if (mejs.MediaFeatures.hasTouch) {
-
-						// for touch devices (iOS, Android)
-						// show/hide without animation on touch
-
-						t.$media.bind('touchstart', function() {
-
-							// toggle controls
-							if (t.controlsAreVisible) {
-								t.hideControls(false);
-							} else {
-								if (t.controlsEnabled) {
-									t.showControls(false);
-								}
-							}
-						});
-
-					} else {
-
-						// create callback here since it needs access to current
-						// MediaElement object
-						t.clickToPlayPauseCallback = function() {
-							//
-
-							if (t.options.clickToPlayPause) {
-								if (t.media.paused) {
-									t.play();
-								} else {
-									t.pause();
-								}
-							}
-						};
-
-						// click to play/pause
-						t.media.addEventListener('click', t.clickToPlayPauseCallback, false);
-
-						// show/hide controls
-						t.container
-							.bind('mouseenter', function () {
-								if (t.controlsEnabled) {
-									if (!t.options.alwaysShowControls ) {
-										t.killControlsTimer('enter');
-										t.showControls();
-										t.startControlsTimer(2500);
-									}
-								}
-							})
-							.bind('mousemove', function() {
-								if (t.controlsEnabled) {
-									if (!t.controlsAreVisible) {
-										t.showControls();
-									}
-									if (!t.options.alwaysShowControls) {
-										t.startControlsTimer(2500);
-									}
-								}
-							})
-							.bind('mouseleave', function () {
-								if (t.controlsEnabled) {
-									if (!t.media.paused && !t.options.alwaysShowControls) {
-										t.startControlsTimer(1000);
-									}
-								}
-							});
-					}
-
-					if(t.options.hideVideoControlsOnLoad) {
-						t.hideControls(false);
-					}
-
-					// check for autoplay
-					if (autoplay && !t.options.alwaysShowControls) {
-						t.hideControls();
-					}
-
-					// resizer
-					if (t.options.enableAutosize) {
-						t.media.addEventListener('loadedmetadata', function(e) {
-							// if the <video height> was not set and the options.videoHeight was not set
-							// then resize to the real dimensions
-							if (t.options.videoHeight <= 0 && t.domNode.getAttribute('height') === null && !isNaN(e.target.videoHeight)) {
-								t.setPlayerSize(e.target.videoWidth, e.target.videoHeight);
-								t.setControlsSize();
-								t.media.setVideoSize(e.target.videoWidth, e.target.videoHeight);
-							}
-						}, false);
-					}
-				}
-
-				// EVENTS
-
-				// FOCUS: when a video starts playing, it takes focus from other players (possibily pausing them)
-				t.media.addEventListener('play', function() {
-					var playerIndex;
-
-					// go through all other players
-					for (playerIndex in mejs.players) {
-						var p = mejs.players[playerIndex];
-						if (p.id != t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended) {
-							p.pause();
-						}
-						p.hasFocus = false;
-					}
-
-					t.hasFocus = true;
-				},false);
-
-
-				// ended for all
-				t.media.addEventListener('ended', function (e) {
-					if(t.options.autoRewind) {
-						try{
-							t.media.setCurrentTime(0);
-							// Fixing an Android stock browser bug, where "seeked" isn't fired correctly after ending the video and jumping to the beginning
-							window.setTimeout(function(){
-								$(t.container).find('.mejs-overlay-loading').parent().hide();
-							}, 20);
-						} catch (exp) {
-
-						}
-					}
-					t.media.pause();
-
-					if (t.setProgressRail) {
-						t.setProgressRail();
-					}
-					if (t.setCurrentRail) {
-						t.setCurrentRail();
-					}
-
-					if (t.options.loop) {
-						t.play();
-					} else if (!t.options.alwaysShowControls && t.controlsEnabled) {
-						t.showControls();
-					}
-				}, false);
-
-				// resize on the first play
-				t.media.addEventListener('loadedmetadata', function(e) {
-					if (t.updateDuration) {
-						t.updateDuration();
-					}
-					if (t.updateCurrent) {
-						t.updateCurrent();
-					}
-
-					if (!t.isFullScreen) {
-						t.setPlayerSize(t.width, t.height);
-						t.setControlsSize();
-					}
-				}, false);
-
-				// Only change the time format when necessary
-				var duration = null;
-				t.media.addEventListener('timeupdate',function() {
-					if (duration !== this.duration) {
-						duration = this.duration;
-						mejs.Utility.calculateTimeFormat(duration, t.options, t.options.framesPerSecond || 25);
-						
-						// make sure to fill in and resize the controls (e.g., 00:00 => 01:13:15
-						if (t.updateDuration) {
-							t.updateDuration();
-						}
-						if (t.updateCurrent) {
-							t.updateCurrent();
-						}
-						t.setControlsSize();
-						
-					}
-				}, false);
-
-				t.container.focusout(function (e) {
-					if( e.relatedTarget ) { //FF is working on supporting focusout https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-						var $target = $(e.relatedTarget);
-						if (t.keyboardAction && $target.parents('.mejs-container').length === 0) {
-							t.keyboardAction = false;
-							t.hideControls(true);
-						}
-					}
-				});
-
-				// webkit has trouble doing this without a delay
-				setTimeout(function () {
-					t.setPlayerSize(t.width, t.height);
-					t.setControlsSize();
-				}, 50);
-
-				// adjust controls whenever window sizes (used to be in fullscreen only)
-				t.globalBind('resize', function() {
-
-					// don't resize for fullscreen mode
-					if ( !(t.isFullScreen || (mejs.MediaFeatures.hasTrueNativeFullScreen && document.webkitIsFullScreen)) ) {
-						t.setPlayerSize(t.width, t.height);
-					}
-
-					// always adjust controls
-					t.setControlsSize();
-				});
-
-				// This is a work-around for a bug in the YouTube iFrame player, which means
-				//	we can't use the play() API for the initial playback on iOS or Android;
-				//	user has to start playback directly by tapping on the iFrame.
-				if (t.media.pluginType == 'youtube' && ( mf.isiOS || mf.isAndroid ) ) {
-					t.container.find('.mejs-overlay-play').hide();
-					t.container.find('.mejs-poster').hide();
-				}
-			}
-
-			// force autoplay for HTML5
-			if (autoplay && media.pluginType == 'native') {
-				t.play();
-			}
-
-
-			if (t.options.success) {
-
-				if (typeof t.options.success == 'string') {
-					window[t.options.success](t.media, t.domNode, t);
-				} else {
-					t.options.success(t.media, t.domNode, t);
-				}
-			}
-		},
-
-		handleError: function(e) {
-			var t = this;
-
-			if (t.controls) {
-				t.controls.hide();
-			}
-
-			// Tell user that the file cannot be played
-			if (t.options.error) {
-				t.options.error(e);
-			}
-		},
-
-		setPlayerSize: function(width,height) {
-			var t = this;
-
-			if( !t.options.setDimensions ) {
-				return false;
-			}
-
-			if (typeof width != 'undefined') {
-				t.width = width;
-			}
-
-			if (typeof height != 'undefined') {
-				t.height = height;
-			}
- 
-			// check stretching modes
-			switch (t.options.stretching) {
-				case 'fill':
-					// The 'fill' effect only makes sense on video; for audio we will set the dimensions
-					if (t.isVideo) {
-						this.setFillMode();
-					} else {
-						this.setDimensions(t.width, t.height);
-					}
-					break;
-				case 'responsive':
-					this.setResponsiveMode();
-					break;
-				case 'none':
-					this.setDimensions(t.width, t.height);
-					break;
-				// This is the 'auto' mode
-				default:
-					if (this.hasFluidMode() === true) {
-						this.setResponsiveMode();
-					} else {
-						this.setDimensions(t.width, t.height);
-					}
-					break;
-			}
-		},
- 
-		hasFluidMode: function() {
-			var t = this;
-	 
-			// detect 100% mode - use currentStyle for IE since css() doesn't return percentages
-			return (t.height.toString().indexOf('%') > 0 || (t.$node.css('max-width') !== 'none' && t.$node.css('max-width') !== 't.width') || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%'));
-		},
- 
-		setResponsiveMode: function() {
-			var t = this;
-		
-			// do we have the native dimensions yet?
-			var nativeWidth = (function() {
-				if (t.isVideo) {
-					if (t.media.videoWidth && t.media.videoWidth > 0) {
-						return t.media.videoWidth;
-					} else if (t.media.getAttribute('width') !== null) {
-						return t.media.getAttribute('width');
-					} else {
-						return t.options.defaultVideoWidth;
-					}
-				} else {
-					return t.options.defaultAudioWidth;
-				}
-			})();
-		
-			var nativeHeight = (function() {
-				if (t.isVideo) {
-					if (t.media.videoHeight && t.media.videoHeight > 0) {
-						return t.media.videoHeight;
-					} else if (t.media.getAttribute('height') !== null) {
-						return t.media.getAttribute('height');
-					} else {
-						return t.options.defaultVideoHeight;
-					}
-				} else {
-					return t.options.defaultAudioHeight;
-				}
-			})();
-		
-			var parentWidth = t.container.parent().closest(':visible').width(),
-			parentHeight = t.container.parent().closest(':visible').height(),
-			newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight;
-			
-			// When we use percent, the newHeight can't be calculated so we get the container height
-			if (isNaN(newHeight) || ( parentHeight !== 0 && newHeight > parentHeight && parentHeight > nativeHeight)) {
-				newHeight = parentHeight;
-			}
-		
-			if (t.container.parent().length > 0 && t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) {
-				parentWidth = $(window).width();
-				newHeight = $(window).height();
-			}
-		
-			if ( newHeight && parentWidth ) {
-			
-				// set outer container size
-				t.container
-					.width(parentWidth)
-					.height(newHeight);
-				
-				// set native <video> or <audio> and shims
-				t.$media.add(t.container.find('.mejs-shim'))
-					.width('100%')
-					.height('100%');
-				
-				// if shim is ready, send the size to the embeded plugin
-				if (t.isVideo) {
-					if (t.media.setVideoSize) {
-						t.media.setVideoSize(parentWidth, newHeight);
-					}
-				}
-		
-				// set the layers
-				t.layers.children('.mejs-layer')
-					.width('100%')
-					.height('100%');
-			}
-		},
- 
-		setFillMode: function() {
-			var t = this,
-				parent = t.outerContainer;
- 
-			if (!parent.width()) {
-				parent.height(t.$media.width());
-			}
- 
-			if (!parent.height()) {
-				parent.height(t.$media.height());
-			}
- 
-			var parentWidth = parent.width(),
-				parentHeight = parent.height();
-			
-			t.setDimensions('100%', '100%');
-			
-			// This prevents an issue when displaying poster
-			t.container.find('.mejs-poster img').css('display', 'block');
-			
-			targetElement = t.container.find('object, embed, iframe, video');
-			
-			// calculate new width and height
-			var initHeight = t.height,
-				initWidth = t.width,
-				// scale to the target width
-				scaleX1 = parentWidth,
-				scaleY1 = (initHeight * parentWidth) / initWidth,
-				// scale to the target height
-				scaleX2 = (initWidth * parentHeight) / initHeight,
-				scaleY2 = parentHeight,
-				// now figure out which one we should use
-				bScaleOnWidth = !(scaleX2 > parentWidth),
-				finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2),
-				finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2);
-			
-			if (bScaleOnWidth) {
-				targetElement.height(finalHeight).width(parentWidth);
-				if (t.media.setVideoSize) {
-					t.media.setVideoSize(parentWidth, finalHeight);
-				}
-			} else {
-				targetElement.height(parentHeight).width(finalWidth);
-				if (t.media.setVideoSize) {
-					t.media.setVideoSize(finalWidth, parentHeight);
-				}
-			}
-			
-			targetElement.css({
-				'margin-left': Math.floor((parentWidth - finalWidth) / 2),
-				'margin-top': 0
-			});
-		},
-	 
-		setDimensions: function(width, height) {
-			var t = this;
-			
-			t.container
-				.width(width)
-				.height(height);
-			
-			t.layers.children('.mejs-layer')
-				.width(width)
-				.height(height);
-		},
-
-		setControlsSize: function() {
-			var t = this,
-				usedWidth = 0,
-				railWidth = 0,
-				rail = t.controls.find('.mejs-time-rail'),
-				total = t.controls.find('.mejs-time-total'),
-				others = rail.siblings(),
-				lastControl = others.last(),
-				lastControlPosition = null;
-
-			// skip calculation if hidden
-			if (!t.container.is(':visible') || !rail.length || !rail.is(':visible')) {
-				return;
-			}
-
-			// allow the size to come from custom CSS
-			if (t.options && !t.options.autosizeProgress) {
-				// Also, frontends devs can be more flexible
-				// due the opportunity of absolute positioning.
-				railWidth = parseInt(rail.css('width'), 10);
-			}
-
-			// attempt to autosize
-			if (railWidth === 0 || !railWidth) {
-
-				// find the size of all the other controls besides the rail
-				others.each(function() {
-					var $this = $(this);
-					if ($this.css('position') != 'absolute' && $this.is(':visible')) {
-						usedWidth += $(this).outerWidth(true);
-					}
-				});
-
-				// fit the rail into the remaining space
-				railWidth = t.controls.width() - usedWidth - (rail.outerWidth(true) - rail.width());
-			}
-
-			// resize the rail,
-			// but then check if the last control (say, the fullscreen button) got pushed down
-			// this often happens when zoomed
-			do {
-				// outer area
-				rail.width(railWidth);
-				// dark space
-				total.width(railWidth - (total.outerWidth(true) - total.width()));
-
-				if (lastControl.css('position') != 'absolute') {
-					lastControlPosition = lastControl.length ? lastControl.position() : null;
-					railWidth--;
-				}
-			} while (lastControlPosition !== null && lastControlPosition.top.toFixed(2) > 0 && railWidth > 0);
-
-			t.container.trigger('controlsresize');
-		},
-
-
-		buildposter: function(player, controls, layers, media) {
-			var t = this,
-				poster =
-				$('<div class="mejs-poster mejs-layer">' +
-				'</div>')
-					.appendTo(layers),
-				posterUrl = player.$media.attr('poster');
-
-			// prioriy goes to option (this is useful if you need to support iOS 3.x (iOS completely fails with poster)
-			if (player.options.poster !== '') {
-				posterUrl = player.options.poster;
-			}
-
-			// second, try the real poster
-			if ( posterUrl ) {
-				t.setPoster(posterUrl);
-			} else {
-				poster.hide();
-			}
-
-			media.addEventListener('play',function() {
-				poster.hide();
-			}, false);
-
-			if(player.options.showPosterWhenEnded && player.options.autoRewind){
-				media.addEventListener('ended',function() {
-					poster.show();
-				}, false);
-			}
-		},
-
-		setPoster: function(url) {
-			var t = this,
-				posterDiv = t.container.find('.mejs-poster'),
-				posterImg = posterDiv.find('img');
-
-			if (posterImg.length === 0) {
-				posterImg = $('<img width="100%" height="100%" alt="" />').appendTo(posterDiv);
-			}
-
-			posterImg.attr('src', url);
-			posterDiv.css({'background-image' : 'url(' + url + ')'});
-		},
-
-		buildoverlays: function(player, controls, layers, media) {
-			var t = this;
-			if (!player.isVideo)
-				return;
-
-			var
-			loading =
-				$('<div class="mejs-overlay mejs-layer">'+
-					'<div class="mejs-overlay-loading"><span></span></div>'+
-				'</div>')
-				.hide() // start out hidden
-				.appendTo(layers),
-			error =
-				$('<div class="mejs-overlay mejs-layer">'+
-					'<div class="mejs-overlay-error"></div>'+
-				'</div>')
-				.hide() // start out hidden
-				.appendTo(layers),
-			// this needs to come last so it's on top
-			bigPlay =
-				$('<div class="mejs-overlay mejs-layer mejs-overlay-play">'+
-					'<div class="mejs-overlay-button"></div>'+
-				'</div>')
-				.appendTo(layers)
-				.bind('click', function() {	 // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video
-					if (t.options.clickToPlayPause) {
-						if (media.paused) {
-							media.play();
-						}
-					}
-				});
-
-			/*
-			if (mejs.MediaFeatures.isiOS || mejs.MediaFeatures.isAndroid) {
-				bigPlay.remove();
-				loading.remove();
-			}
-			*/
-
-
-			// show/hide big play button
-			media.addEventListener('play',function() {
-				bigPlay.hide();
-				loading.hide();
-				controls.find('.mejs-time-buffering').hide();
-				error.hide();
-			}, false);
-
-			media.addEventListener('playing', function() {
-				bigPlay.hide();
-				loading.hide();
-				controls.find('.mejs-time-buffering').hide();
-				error.hide();
-			}, false);
-
-			media.addEventListener('seeking', function() {
-				loading.show();
-				controls.find('.mejs-time-buffering').show();
-			}, false);
-
-			media.addEventListener('seeked', function() {
-				loading.hide();
-				controls.find('.mejs-time-buffering').hide();
-			}, false);
-
-			media.addEventListener('pause',function() {
-				if (!mejs.MediaFeatures.isiPhone) {
-					bigPlay.show();
-				}
-			}, false);
-
-			media.addEventListener('waiting', function() {
-				loading.show();
-				controls.find('.mejs-time-buffering').show();
-			}, false);
-
-
-			// show/hide loading
-			media.addEventListener('loadeddata',function() {
-				// for some reason Chrome is firing this event
-				//if (mejs.MediaFeatures.isChrome && media.getAttribute && media.getAttribute('preload') === 'none')
-				//	return;
-
-				loading.show();
-				controls.find('.mejs-time-buffering').show();
-				// Firing the 'canplay' event after a timeout which isn't getting fired on some Android 4.1 devices (https://github.com/johndyer/mediaelement/issues/1305)
-				if (mejs.MediaFeatures.isAndroid) {
-					media.canplayTimeout = window.setTimeout(
-						function() {
-							if (document.createEvent) {
-								var evt = document.createEvent('HTMLEvents');
-								evt.initEvent('canplay', true, true);
-								return media.dispatchEvent(evt);
-							}
-						}, 300
-					);
-				}
-			}, false);
-			media.addEventListener('canplay',function() {
-				loading.hide();
-				controls.find('.mejs-time-buffering').hide();
-				clearTimeout(media.canplayTimeout); // Clear timeout inside 'loadeddata' to prevent 'canplay' to fire twice
-			}, false);
-
-			// error handling
-			media.addEventListener('error',function(e) {
-				t.handleError(e);
-				loading.hide();
-				bigPlay.hide();
-				error.show();
-				error.find('.mejs-overlay-error').html("Error loading this resource");
-			}, false);
-
-			media.addEventListener('keydown', function(e) {
-				t.onkeydown(player, media, e);
-			}, false);
-		},
-
-		buildkeyboard: function(player, controls, layers, media) {
-
-				var t = this;
-
-				t.container.keydown(function () {
-					t.keyboardAction = true;
-				});
-
-				// listen for key presses
-				t.globalBind('keydown', function(event) {
-					player.hasFocus = $(event.target).closest('.mejs-container').length !== 0
-						&& $(event.target).closest('.mejs-container').attr('id') === player.$media.closest('.mejs-container').attr('id');
-					return t.onkeydown(player, media, event);
-				});
-
-
-				// check if someone clicked outside a player region, then kill its focus
-				t.globalBind('click', function(event) {
-					player.hasFocus = $(event.target).closest('.mejs-container').length !== 0;
-				});
-
-		},
-		onkeydown: function(player, media, e) {
-			if (player.hasFocus && player.options.enableKeyboard) {
-				// find a matching key
-				for (var i = 0, il = player.options.keyActions.length; i < il; i++) {
-					var keyAction = player.options.keyActions[i];
-
-					for (var j = 0, jl = keyAction.keys.length; j < jl; j++) {
-						if (e.keyCode == keyAction.keys[j]) {
-							if (typeof(e.preventDefault) == "function") e.preventDefault();
-							keyAction.action(player, media, e.keyCode, e);
-							return false;
-						}
-					}
-				}
-			}
-
-			return true;
-		},
-
-		findTracks: function() {
-			var t = this,
-				tracktags = t.$media.find('track');
-
-			// store for use by plugins
-			t.tracks = [];
-			tracktags.each(function(index, track) {
-
-				track = $(track);
-
-				t.tracks.push({
-					srclang: (track.attr('srclang')) ? track.attr('srclang').toLowerCase() : '',
-					src: track.attr('src'),
-					kind: track.attr('kind'),
-					label: track.attr('label') || '',
-					entries: [],
-					isLoaded: false
-				});
-			});
-		},
-		changeSkin: function(className) {
-			this.container[0].className = 'mejs-container ' + className;
-			this.setPlayerSize(this.width, this.height);
-			this.setControlsSize();
-		},
-		play: function() {
-			this.load();
-			this.media.play();
-		},
-		pause: function() {
-			try {
-				this.media.pause();
-			} catch (e) {}
-		},
-		load: function() {
-			if (!this.isLoaded) {
-				this.media.load();
-			}
-
-			this.isLoaded = true;
-		},
-		setMuted: function(muted) {
-			this.media.setMuted(muted);
-		},
-		setCurrentTime: function(time) {
-			this.media.setCurrentTime(time);
-		},
-		getCurrentTime: function() {
-			return this.media.currentTime;
-		},
-		setVolume: function(volume) {
-			this.media.setVolume(volume);
-		},
-		getVolume: function() {
-			return this.media.volume;
-		},
-		setSrc: function(src) {
-			this.media.setSrc(src);
-		},
-		remove: function() {
-			var t = this, featureIndex, feature;
-
-			t.container.prev('.mejs-offscreen').remove();
-
-			// invoke features cleanup
-			for (featureIndex in t.options.features) {
-				feature = t.options.features[featureIndex];
-				if (t['clean' + feature]) {
-					try {
-						t['clean' + feature](t);
-					} catch (e) {
-						// TODO: report control error
-						//throw e;
-						//
-						//
-					}
-				}
-			}
-
-			// grab video and put it back in place
-			if (!t.isDynamic) {
-				t.$media.prop('controls', true);
-				// detach events from the video
-				// TODO: detach event listeners better than this;
-				//		 also detach ONLY the events attached by this plugin!
-				t.$node.clone().insertBefore(t.container).show();
-				t.$node.remove();
-			} else {
-				t.$node.insertBefore(t.container);
-			}
-
-			if (t.media.pluginType !== 'native') {
-				t.media.remove();
-			}
-
-			// Remove the player from the mejs.players object so that pauseOtherPlayers doesn't blow up when trying to pause a non existance flash api.
-			delete mejs.players[t.id];
-
-			if (typeof t.container == 'object') {
-				t.container.remove();
-			}
-			t.globalUnbind();
-			delete t.node.player;
-		},
-		rebuildtracks: function(){
-			var t = this;
-			t.findTracks();
-			t.buildtracks(t, t.controls, t.layers, t.media);
-		},
-		resetSize: function(){
-			var t = this;
-			// webkit has trouble doing this without a delay
-			setTimeout(function () {
-				//
-				t.setPlayerSize(t.width, t.height);
-				t.setControlsSize();
-			}, 50);
-		}
-	};
-
-	(function(){
-		var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/;
-
-		function splitEvents(events, id) {
-			// add player ID as an event namespace so it's easier to unbind them all later
-			var ret = {d: [], w: []};
-			$.each((events || '').split(' '), function(k, v){
-				var eventname = v + '.' + id;
-				if (eventname.indexOf('.') === 0) {
-					ret.d.push(eventname);
-					ret.w.push(eventname);
-				}
-				else {
-					ret[rwindow.test(v) ? 'w' : 'd'].push(eventname);
-				}
-			});
-			ret.d = ret.d.join(' ');
-			ret.w = ret.w.join(' ');
-			return ret;
-		}
-
-		mejs.MediaElementPlayer.prototype.globalBind = function(events, data, callback) {
-			var t = this;
-			var doc = t.node ? t.node.ownerDocument : document;
-
-			events = splitEvents(events, t.id);
-			if (events.d) $(doc).bind(events.d, data, callback);
-			if (events.w) $(window).bind(events.w, data, callback);
-		};
-
-		mejs.MediaElementPlayer.prototype.globalUnbind = function(events, callback) {
-			var t = this;
-			var doc = t.node ? t.node.ownerDocument : document;
-
-			events = splitEvents(events, t.id);
-			if (events.d) $(doc).unbind(events.d, callback);
-			if (events.w) $(window).unbind(events.w, callback);
-		};
-	})();
-
-	// turn into jQuery plugin
-	if (typeof $ != 'undefined') {
-		$.fn.mediaelementplayer = function (options) {
-			if (options === false) {
-				this.each(function () {
-					var player = $(this).data('mediaelementplayer');
-					if (player) {
-						player.remove();
-					}
-					$(this).removeData('mediaelementplayer');
-				});
-			}
-			else {
-				this.each(function () {
-					$(this).data('mediaelementplayer', new mejs.MediaElementPlayer(this, options));
-				});
-			}
-			return this;
-		};
-
-
-		$(document).ready(function() {
-			// auto enable using JSON attribute
-			$('.mejs-player').mediaelementplayer();
-		});
-	}
-
-	// push out to window
-	window.MediaElementPlayer = mejs.MediaElementPlayer;
-
-})(mejs.$);
-
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		playText: mejs.i18n.t('Play'),
-		pauseText: mejs.i18n.t('Pause')
-	});
-
-	// PLAY/pause BUTTON
-	$.extend(MediaElementPlayer.prototype, {
-		buildplaypause: function(player, controls, layers, media) {
-			var 
-				t = this,
-				op = t.options,
-				play = 
-				$('<div class="mejs-button mejs-playpause-button mejs-play" >' +
-					'<button type="button" aria-controls="' + t.id + '" title="' + op.playText + '" aria-label="' + op.playText + '"></button>' +
-				'</div>')
-				.appendTo(controls)
-				.click(function(e) {
-					e.preventDefault();
-				
-					if (media.paused) {
-						media.play();
-					} else {
-						media.pause();
-					}
-					
-					return false;
-				}),
-				play_btn = play.find('button');
-
-
-			function togglePlayPause(which) {
-				if ('play' === which) {
-					play.removeClass('mejs-play').addClass('mejs-pause');
-					play_btn.attr({
-						'title': op.pauseText,
-						'aria-label': op.pauseText
-					});
-				} else {
-					play.removeClass('mejs-pause').addClass('mejs-play');
-					play_btn.attr({
-						'title': op.playText,
-						'aria-label': op.playText
-					});
-				}
-			};
-			togglePlayPause('pse');
-
-
-			media.addEventListener('play',function() {
-				togglePlayPause('play');
-			}, false);
-			media.addEventListener('playing',function() {
-				togglePlayPause('play');
-			}, false);
-
-
-			media.addEventListener('pause',function() {
-				togglePlayPause('pse');
-			}, false);
-			media.addEventListener('paused',function() {
-				togglePlayPause('pse');
-			}, false);
-		}
-	});
-	
-})(mejs.$);
-
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		stopText: 'Stop'
-	});
-
-	// STOP BUTTON
-	$.extend(MediaElementPlayer.prototype, {
-		buildstop: function(player, controls, layers, media) {
-			var t = this;
-
-			$('<div class="mejs-button mejs-stop-button mejs-stop">' +
-					'<button type="button" aria-controls="' + t.id + '" title="' + t.options.stopText + '" aria-label="' + t.options.stopText + '"></button>' +
-				'</div>')
-				.appendTo(controls)
-				.click(function() {
-					if (!media.paused) {
-						media.pause();
-					}
-					if (media.currentTime > 0) {
-						media.setCurrentTime(0);
-                        media.pause();
-						controls.find('.mejs-time-current').width('0px');
-						controls.find('.mejs-time-handle').css('left', '0px');
-						controls.find('.mejs-time-float-current').html( mejs.Utility.secondsToTimeCode(0, player.options));
-						controls.find('.mejs-currenttime').html( mejs.Utility.secondsToTimeCode(0, player.options));
-						layers.find('.mejs-poster').show();
-					}
-				});
-		}
-	});
-	
-})(mejs.$);
-
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		progessHelpText: mejs.i18n.t(
-		'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.')
-	});
-
-	// progress/loaded bar
-	$.extend(MediaElementPlayer.prototype, {
-		buildprogress: function(player, controls, layers, media) {
-
-			$('<div class="mejs-time-rail">' +
-				'<span  class="mejs-time-total mejs-time-slider">' +
-				//'<span class="mejs-offscreen">' + this.options.progessHelpText + '</span>' +
-					'<span class="mejs-time-buffering"></span>' +
-					'<span class="mejs-time-loaded"></span>' +
-					'<span class="mejs-time-current"></span>' +
-					'<span class="mejs-time-handle"></span>' +
-					'<span class="mejs-time-float">' +
-						'<span class="mejs-time-float-current">00:00</span>' +
-						'<span class="mejs-time-float-corner"></span>' +
-					'</span>' +
-				'</span>' +
-			'</div>')
-				.appendTo(controls);
-			controls.find('.mejs-time-buffering').hide();
-
-			var 
-				t = this,
-				total = controls.find('.mejs-time-total'),
-				loaded  = controls.find('.mejs-time-loaded'),
-				current  = controls.find('.mejs-time-current'),
-				handle  = controls.find('.mejs-time-handle'),
-				timefloat  = controls.find('.mejs-time-float'),
-				timefloatcurrent  = controls.find('.mejs-time-float-current'),
-                slider = controls.find('.mejs-time-slider'),
-				handleMouseMove = function (e) {
-					
-                    var offset = total.offset(),
-						width = total.width(),
-						percentage = 0,
-						newTime = 0,
-						pos = 0,
-                        x;
-                    
-                    // mouse or touch position relative to the object
-					if (e.originalEvent && e.originalEvent.changedTouches) {
-						x = e.originalEvent.changedTouches[0].pageX;
-					} else if (e.changedTouches) { // for Zepto
-						x = e.changedTouches[0].pageX;
-					} else {
-						x = e.pageX;
-					}
-
-					if (media.duration) {
-						if (x < offset.left) {
-							x = offset.left;
-						} else if (x > width + offset.left) {
-							x = width + offset.left;
-						}
-						
-						pos = x - offset.left;
-						percentage = (pos / width);
-						newTime = (percentage <= 0.02) ? 0 : percentage * media.duration;
-
-						// seek to where the mouse is
-						if (mouseIsDown && newTime !== media.currentTime) {
-							media.setCurrentTime(newTime);
-						}
-
-						// position floating time box
-						if (!mejs.MediaFeatures.hasTouch) {
-								timefloat.css('left', pos);
-								timefloatcurrent.html( mejs.Utility.secondsToTimeCode(newTime, player.options) );
-								timefloat.show();
-						}
-					}
-				},
-				mouseIsDown = false,
-				mouseIsOver = false,
-				lastKeyPressTime = 0,
-				startedPaused = false,
-				autoRewindInitial = player.options.autoRewind;
-            // Accessibility for slider
-            var updateSlider = function (e) {
-
-				var seconds = media.currentTime,
-					timeSliderText = mejs.i18n.t('Time Slider'),
-					time = mejs.Utility.secondsToTimeCode(seconds, player.options),
-					duration = media.duration;
-
-				slider.attr({
-					'aria-label': timeSliderText,
-					'aria-valuemin': 0,
-					'aria-valuemax': duration,
-					'aria-valuenow': seconds,
-					'aria-valuetext': time,
-					'role': 'slider',
-					'tabindex': 0
-				});
-
-			};
-
-				var restartPlayer = function () {
-				var now = new Date();
-				if (now - lastKeyPressTime >= 1000) {
-					media.play();
-				}
-			};
-
-			slider.bind('focus', function (e) {
-				player.options.autoRewind = false;
-			});
-
-			slider.bind('blur', function (e) {
-				player.options.autoRewind = autoRewindInitial;
-			});
-
-			slider.bind('keydown', function (e) {
-
-				if ((new Date() - lastKeyPressTime) >= 1000) {
-					startedPaused = media.paused;
-				}
-
-				var keyCode = e.keyCode,
-					duration = media.duration,
-					seekTime = media.currentTime,
-					seekForward  = player.options.defaultSeekForwardInterval(duration),
-					seekBackward = player.options.defaultSeekBackwardInterval(duration);
-
-				switch (keyCode) {
-				case 37: // left
-				case 40: // Down
-					seekTime -= seekBackward;
-					break;
-				case 39: // Right
-				case 38: // Up
-					seekTime += seekForward;
-					break;
-				case 36: // Home
-					seekTime = 0;
-					break;
-				case 35: // end
-					seekTime = duration;
-					break;
-				case 32: // space
-				case 13: // enter
-					media.paused ? media.play() : media.pause();
-					return;
-				default:
-					return;
-				}
-
-				seekTime = seekTime < 0 ? 0 : (seekTime >= duration ? duration : Math.floor(seekTime));
-				lastKeyPressTime = new Date();
-				if (!startedPaused) {
-					media.pause();
-				}
-
-				if (seekTime < media.duration && !startedPaused) {
-					setTimeout(restartPlayer, 1100);
-				}
-
-				media.setCurrentTime(seekTime);
-
-				e.preventDefault();
-				e.stopPropagation();
-				return false;
-			});
-
-
-			// handle clicks
-			//controls.find('.mejs-time-rail').delegate('span', 'click', handleMouseMove);
-			total
-				.bind('mousedown touchstart', function (e) {
-					// only handle left clicks or touch
-					if (e.which === 1 || e.which === 0) {
-						mouseIsDown = true;
-						handleMouseMove(e);
-						t.globalBind('mousemove.dur touchmove.dur', function(e) {
-							handleMouseMove(e);
-						});
-						t.globalBind('mouseup.dur touchend.dur', function (e) {
-							mouseIsDown = false;
-							timefloat.hide();
-							t.globalUnbind('.dur');
-						});
-					}
-				})
-				.bind('mouseenter', function(e) {
-					mouseIsOver = true;
-					t.globalBind('mousemove.dur', function(e) {
-						handleMouseMove(e);
-					});
-					if (!mejs.MediaFeatures.hasTouch) {
-						timefloat.show();
-					}
-				})
-				.bind('mouseleave',function(e) {
-					mouseIsOver = false;
-					if (!mouseIsDown) {
-						t.globalUnbind('.dur');
-						timefloat.hide();
-					}
-				});
-
-			// loading
-			media.addEventListener('progress', function (e) {
-				player.setProgressRail(e);
-				player.setCurrentRail(e);
-			}, false);
-
-			// current time
-			media.addEventListener('timeupdate', function(e) {
-				player.setProgressRail(e);
-				player.setCurrentRail(e);
-				updateSlider(e);
-			}, false);
-			
-			t.container.on('controlsresize', function() {
-				player.setProgressRail();
-				player.setCurrentRail();
-			});
-			
-			// store for later use
-			t.loaded = loaded;
-			t.total = total;
-			t.current = current;
-			t.handle = handle;
-		},
-		setProgressRail: function(e) {
-
-			var
-				t = this,
-				target = (e !== undefined) ? e.target : t.media,
-				percent = null;
-
-			// newest HTML5 spec has buffered array (FF4, Webkit)
-			if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && target.duration) {
-				// account for a real array with multiple values - always read the end of the last buffer
-				percent = target.buffered.end(target.buffered.length - 1) / target.duration;
-			} 
-			// Some browsers (e.g., FF3.6 and Safari 5) cannot calculate target.bufferered.end()
-			// to be anything other than 0. If the byte count is available we use this instead.
-			// Browsers that support the else if do not seem to have the bufferedBytes value and
-			// should skip to there. Tested in Safari 5, Webkit head, FF3.6, Chrome 6, IE 7/8.
-			else if (target && target.bytesTotal !== undefined && target.bytesTotal > 0 && target.bufferedBytes !== undefined) {
-				percent = target.bufferedBytes / target.bytesTotal;
-			}
-			// Firefox 3 with an Ogg file seems to go this way
-			else if (e && e.lengthComputable && e.total !== 0) {
-				percent = e.loaded / e.total;
-			}
-
-			// finally update the progress bar
-			if (percent !== null) {
-				percent = Math.min(1, Math.max(0, percent));
-				// update loaded bar
-				if (t.loaded && t.total) {
-					t.loaded.width(t.total.width() * percent);
-				}
-			}
-		},
-		setCurrentRail: function() {
-
-			var t = this;
-		
-			if (t.media.currentTime !== undefined && t.media.duration) {
-
-				// update bar and handle
-				if (t.total && t.handle) {
-					var 
-						newWidth = Math.round(t.total.width() * t.media.currentTime / t.media.duration),
-						handlePos = newWidth - Math.round(t.handle.outerWidth(true) / 2);
-
-					t.current.width(newWidth);
-					t.handle.css('left', handlePos);
-				}
-			}
-
-		}
-	});
-})(mejs.$);
-
-(function($) {
-	
-	// options
-	$.extend(mejs.MepDefaults, {
-		duration: -1,
-		timeAndDurationSeparator: '<span> | </span>'
-	});
-
-
-	// current and duration 00:00 / 00:00
-	$.extend(MediaElementPlayer.prototype, {
-		buildcurrent: function(player, controls, layers, media) {
-			var t = this;
-			
-			$('<div class="mejs-time" role="timer" aria-live="off">' +
-					'<span class="mejs-currenttime">' + 
-						mejs.Utility.secondsToTimeCode(0, player.options) +
-                    '</span>'+
-				'</div>')
-			.appendTo(controls);
-			
-			t.currenttime = t.controls.find('.mejs-currenttime');
-
-			media.addEventListener('timeupdate',function() {
-				player.updateCurrent();
-			}, false);
-		},
-
-
-		buildduration: function(player, controls, layers, media) {
-			var t = this;
-			
-			if (controls.children().last().find('.mejs-currenttime').length > 0) {
-				$(t.options.timeAndDurationSeparator +
-					'<span class="mejs-duration">' + 
-						mejs.Utility.secondsToTimeCode(t.options.duration, t.options) +
-					'</span>')
-					.appendTo(controls.find('.mejs-time'));
-			} else {
-
-				// add class to current time
-				controls.find('.mejs-currenttime').parent().addClass('mejs-currenttime-container');
-				
-				$('<div class="mejs-time mejs-duration-container">'+
-					'<span class="mejs-duration">' + 
-						mejs.Utility.secondsToTimeCode(t.options.duration, t.options) +
-					'</span>' +
-				'</div>')
-				.appendTo(controls);
-			}
-			
-			t.durationD = t.controls.find('.mejs-duration');
-
-			media.addEventListener('timeupdate',function() {
-				player.updateDuration();
-			}, false);
-		},
-		
-		updateCurrent:  function() {
-			var t = this;
-			
-			var currentTime = t.media.currentTime;
-			
-			if (isNaN(currentTime)) {
-				currentTime = 0;
-			}
-
-			if (t.currenttime) {
-				t.currenttime.html(mejs.Utility.secondsToTimeCode(currentTime, t.options));
-			}
-		},
-		
-		updateDuration: function() {
-			var t = this;
-			
-			var duration = t.media.duration;
-			if (t.options.duration > 0) {
-				duration = t.options.duration;
-			}
-			
-			if (isNaN(duration)) {
-				duration = 0;
-			}
-
-			//Toggle the long video class if the video is longer than an hour.
-			t.container.toggleClass("mejs-long-video", duration > 3600);
-			
-			if (t.durationD && duration > 0) {
-				t.durationD.html(mejs.Utility.secondsToTimeCode(duration, t.options));
-			}		
-		}
-	});
-
-})(mejs.$);
-
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		muteText: mejs.i18n.t('Mute Toggle'),
-        allyVolumeControlText: mejs.i18n.t('Use Up/Down Arrow keys to increase or decrease volume.'),
-		hideVolumeOnTouchDevices: true,
-		
-		audioVolume: 'horizontal',
-		videoVolume: 'vertical'
-	});
-
-	$.extend(MediaElementPlayer.prototype, {
-		buildvolume: function(player, controls, layers, media) {
-				
-			// Android and iOS don't support volume controls
-			if ((mejs.MediaFeatures.isAndroid || mejs.MediaFeatures.isiOS) && this.options.hideVolumeOnTouchDevices)
-				return;
-			
-			var t = this,
-				mode = (t.isVideo) ? t.options.videoVolume : t.options.audioVolume,
-				mute = (mode == 'horizontal') ?
-				
-				// horizontal version
-				$('<div class="mejs-button mejs-volume-button mejs-mute">' +
-					'<button type="button" aria-controls="' + t.id + 
-						'" title="' + t.options.muteText + 
-						'" aria-label="' + t.options.muteText +
-					'"></button>'+
-				'</div>' +
-                  '<a href="javascript:void(0);" class="mejs-horizontal-volume-slider">' + // outer background
-					'<span class="mejs-offscreen">' + t.options.allyVolumeControlText + '</span>' +
-					'<div class="mejs-horizontal-volume-total"></div>'+ // line background
-					'<div class="mejs-horizontal-volume-current"></div>'+ // current volume
-					'<div class="mejs-horizontal-volume-handle"></div>'+ // handle
-				'</a>'
-				)
-					.appendTo(controls) :
-				
-				// vertical version
-				$('<div class="mejs-button mejs-volume-button mejs-mute">'+
-					'<button type="button" aria-controls="' + t.id + 
-						'" title="' + t.options.muteText + 
-						'" aria-label="' + t.options.muteText + 
-					'"></button>'+
-					'<a href="javascript:void(0);" class="mejs-volume-slider">'+ // outer background
-						'<span class="mejs-offscreen">' + t.options.allyVolumeControlText + '</span>' +                  
-						'<div class="mejs-volume-total"></div>'+ // line background
-						'<div class="mejs-volume-current"></div>'+ // current volume
-						'<div class="mejs-volume-handle"></div>'+ // handle
-					'</a>'+
-				'</div>')
-					.appendTo(controls),
-			volumeSlider = t.container.find('.mejs-volume-slider, .mejs-horizontal-volume-slider'),
-			volumeTotal = t.container.find('.mejs-volume-total, .mejs-horizontal-volume-total'),
-			volumeCurrent = t.container.find('.mejs-volume-current, .mejs-horizontal-volume-current'),
-			volumeHandle = t.container.find('.mejs-volume-handle, .mejs-horizontal-volume-handle'),
-
-			positionVolumeHandle = function(volume, secondTry) {
-
-				if (!volumeSlider.is(':visible') && typeof secondTry == 'undefined') {
-					volumeSlider.show();
-					positionVolumeHandle(volume, true);
-					volumeSlider.hide();
-					return;
-				}
-
-				// correct to 0-1
-				volume = Math.max(0,volume);
-				volume = Math.min(volume,1);
-
-				// ajust mute button style
-				if (volume === 0) {
-					mute.removeClass('mejs-mute').addClass('mejs-unmute');
-					mute.children('button').attr('title', mejs.i18n.t('Unmute')).attr('aria-label', mejs.i18n.t('Unmute'));
-				} else {
-					mute.removeClass('mejs-unmute').addClass('mejs-mute');
-					mute.children('button').attr('title', mejs.i18n.t('Mute')).attr('aria-label', mejs.i18n.t('Mute'));
-				}
-
-                // top/left of full size volume slider background
-                var totalPosition = volumeTotal.position();
-				// position slider 
-				if (mode == 'vertical') {
-					var
-                    // height of the full size volume slider background
-						totalHeight = volumeTotal.height(),
-
-                        // the new top position based on the current volume
-						// 70% volume on 100px height == top:30px
-						newTop = totalHeight - (totalHeight * volume);
-	
-					// handle
-					volumeHandle.css('top', Math.round(totalPosition.top + newTop - (volumeHandle.height() / 2)));
-	
-					// show the current visibility
-					volumeCurrent.height(totalHeight - newTop );
-					volumeCurrent.css('top', totalPosition.top + newTop);
-				} else {
-                    var
-						// height of the full size volume slider background
-						totalWidth = volumeTotal.width(),
-						
-						// the new left position based on the current volume
-						newLeft = totalWidth * volume;
-	
-					// handle
-					volumeHandle.css('left', Math.round(totalPosition.left + newLeft - (volumeHandle.width() / 2)));
-	
-					// rezize the current part of the volume bar
-					volumeCurrent.width( Math.round(newLeft) );
-				}
-			},
-			handleVolumeMove = function(e) {
-				
-				var volume = null,
-					totalOffset = volumeTotal.offset();
-				
-				// calculate the new volume based on the moust position
-				if (mode === 'vertical') {
-				
-					var
-						railHeight = volumeTotal.height(),
-						newY = e.pageY - totalOffset.top;
-						
-					volume = (railHeight - newY) / railHeight;
-						
-					// the controls just hide themselves (usually when mouse moves too far up)
-					if (totalOffset.top === 0 || totalOffset.left === 0) {
-						return;
-                    }
-					
-				} else {
-					var
-						railWidth = volumeTotal.width(),
-						newX = e.pageX - totalOffset.left;
-						
-					volume = newX / railWidth;
-				}
-				
-				// ensure the volume isn't outside 0-1
-				volume = Math.max(0,volume);
-				volume = Math.min(volume,1);
-				
-				// position the slider and handle
-				positionVolumeHandle(volume);
-				
-				// set the media object (this will trigger the volumechanged event)
-				if (volume === 0) {
-					media.setMuted(true);
-				} else {
-					media.setMuted(false);
-				}
-				media.setVolume(volume);
-			},
-			mouseIsDown = false,
-			mouseIsOver = false;
-
-			// SLIDER
-			
-			mute
-				.hover(function() {
-					volumeSlider.show();
-					mouseIsOver = true;
-				}, function() {
-					mouseIsOver = false;
-						
-					if (!mouseIsDown && mode == 'vertical')	{
-						volumeSlider.hide();
-					}
-				});
-            
-            var updateVolumeSlider = function (e) {
-
-                var volume = Math.floor(media.volume*100);
-
-				volumeSlider.attr({
-					'aria-label': mejs.i18n.t('Volume Slider'),
-					'aria-valuemin': 0,
-					'aria-valuemax': 100,
-					'aria-valuenow': volume,
-					'aria-valuetext': volume+'%',
-					'role': 'slider',
-					'tabindex': 0
-				});
-
-			};
-			
-			volumeSlider
-				.bind('mouseover', function() {
-					mouseIsOver = true;	
-				})
-				.bind('mousedown', function (e) {
-					handleVolumeMove(e);
-					t.globalBind('mousemove.vol', function(e) {
-						handleVolumeMove(e);
-					});
-					t.globalBind('mouseup.vol', function () {
-						mouseIsDown = false;
-						t.globalUnbind('.vol');
-
-						if (!mouseIsOver && mode == 'vertical') {
-							volumeSlider.hide();
-						}
-					});
-					mouseIsDown = true;
-						
-					return false;
-				})
-				.bind('keydown', function (e) {
-					var keyCode = e.keyCode;
-					var volume = media.volume;
-					switch (keyCode) {
-                        case 38: // Up
-                            volume = Math.min(volume + 0.1, 1);
-                            break;
-                        case 40: // Down
-                            volume = Math.max(0, volume - 0.1);
-                            break;
-                        default:
-                            return true;
-                    }
-
-					mouseIsDown = false;
-					positionVolumeHandle(volume);
-					media.setVolume(volume);
-					return false;
-				});
-
-			// MUTE button
-			mute.find('button').click(function() {
-				media.setMuted( !media.muted );
-			});
-            
-            //Keyboard input
-            mute.find('button').bind('focus', function () {
-				volumeSlider.show();
-			});
-
-			// listen for volume change events from other sources
-			media.addEventListener('volumechange', function(e) {
-				if (!mouseIsDown) {
-					if (media.muted) {
-						positionVolumeHandle(0);
-						mute.removeClass('mejs-mute').addClass('mejs-unmute');
-					} else {
-						positionVolumeHandle(media.volume);
-						mute.removeClass('mejs-unmute').addClass('mejs-mute');
-					}
-				}
-				updateVolumeSlider(e);
-			}, false);
-			
-			// mutes the media and sets the volume icon muted if the initial volume is set to 0
-			if (player.options.startVolume === 0) {
-				media.setMuted(true);
-			}
-			
-			// shim gets the startvolume as a parameter, but we have to set it on the native <video> and <audio> elements
-			if (media.pluginType === 'native') {
-				media.setVolume(player.options.startVolume);
-			}
-			
-			t.container.on('controlsresize', function() {
-				positionVolumeHandle(media.volume);
-			});
-		}
-	});
-	
-})(mejs.$);
-
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		usePluginFullScreen: true,
-		newWindowCallback: function() { return '';},
-		fullscreenText: mejs.i18n.t('Fullscreen')
-	});
-
-	$.extend(MediaElementPlayer.prototype, {
-
-		isFullScreen: false,
-
-		isNativeFullScreen: false,
-
-		isInIframe: false,
-							
-		// Possible modes
-		// (1) 'native-native' 	HTML5 video  + browser fullscreen (IE10+, etc.)
-		// (2) 'plugin-native' 	plugin video + browser fullscreen (fails in some versions of Firefox)
-		// (3) 'fullwindow' 	Full window (retains all UI)
-		// usePluginFullScreen = true
-		// (4) 'plugin-click' 	Flash 1 - click through with pointer events
-		// (5) 'plugin-hover' 	Flash 2 - hover popup in flash (IE6-8)		
-		fullscreenMode: '',
-
-		buildfullscreen: function(player, controls, layers, media) {
-
-			if (!player.isVideo)
-				return;
-				
-			player.isInIframe = (window.location != window.parent.location);	
-		
-			// detect on start
-			media.addEventListener('play', function() { player.detectFullscreenMode(); });
-				
-			// build button
-			var t = this,
-				hideTimeout = null,
-				fullscreenBtn =
-					$('<div class="mejs-button mejs-fullscreen-button">' +
-						'<button type="button" aria-controls="' + t.id + '" title="' + t.options.fullscreenText + '" aria-label="' + t.options.fullscreenText + '"></button>' +
-					'</div>')
-					.appendTo(controls)
-					.on('click', function() {
-						
-						// toggle fullscreen
-						var isFullScreen = (mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || player.isFullScreen;
-	
-						if (isFullScreen) {
-							player.exitFullScreen();
-						} else {
-							player.enterFullScreen();
-						}
-					})										
-					.on('mouseover', function() {
-						
-						// very old browsers with a plugin
-						if (t.fullscreenMode == 'plugin-hover') {						
-							if (hideTimeout !== null) {
-								clearTimeout(hideTimeout);
-								delete hideTimeout;
-							}
-	
-							var buttonPos = fullscreenBtn.offset(),
-								containerPos = player.container.offset();
-	
-							media.positionFullscreenButton(buttonPos.left - containerPos.left, buttonPos.top - containerPos.top, true);
-						}
-
-					})
-					.on('mouseout', function() {
-
-						if (t.fullscreenMode == 'plugin-hover') {						
-							if (hideTimeout !== null) {
-								clearTimeout(hideTimeout);
-								delete hideTimeout;
-							}
-	
-							hideTimeout = setTimeout(function() {
-								media.hideFullscreenButton();
-							}, 1500);
-						}
-
-					});
-
-					
-
-			player.fullscreenBtn = fullscreenBtn;
-
-			t.globalBind('keydown',function (e) {
-				if (e.keyCode == 27 && ((mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || t.isFullScreen)) {
-					player.exitFullScreen();
-				}
-			});
-			
-			t.normalHeight = 0;
-			t.normalWidth = 0;					
-					
-			// setup native fullscreen event
-			if (mejs.MediaFeatures.hasTrueNativeFullScreen) {
-
-				// chrome doesn't alays fire this in an iframe
-				var fullscreenChanged = function(e) {
-					if (player.isFullScreen) {
-						if (mejs.MediaFeatures.isFullScreen()) {
-							player.isNativeFullScreen = true;
-							// reset the controls once we are fully in full screen
-							player.setControlsSize();
-						} else {
-							player.isNativeFullScreen = false;
-							// when a user presses ESC
-							// make sure to put the player back into place
-							player.exitFullScreen();
-						}
-					}
-				};
-
-				player.globalBind(mejs.MediaFeatures.fullScreenEventName, fullscreenChanged);
-			}
-
-		},
-		
-		detectFullscreenMode: function() {
-			
-			var t = this,
-				mode = '',
-				features = mejs.MediaFeatures;
-			
-			if (features.hasTrueNativeFullScreen && t.media.pluginType === 'native') {
-				mode = 'native-native';
-			} else if (features.hasTrueNativeFullScreen && t.media.pluginType !== 'native' && !features.hasFirefoxPluginMovingProblem) {
-				mode = 'plugin-native';					
-			} else if (t.usePluginFullScreen) { 
-				if (mejs.MediaFeatures.supportsPointerEvents) {
-					mode = 'plugin-click';
-					// this needs some special setup
-					t.createPluginClickThrough();				
-				} else { 
-					mode = 'plugin-hover';
-				}
-				
-			} else {
-				mode = 'fullwindow';
-			}
-			
-			
-			t.fullscreenMode = mode;		
-			return mode;
-		},
-		
-		isPluginClickThroughCreated: false,
-		
-		createPluginClickThrough: function() {
-				
-			var t = this;
-			
-			// don't build twice
-			if (t.isPluginClickThroughCreated) {
-				return;
-			}	
-
-			// allows clicking through the fullscreen button and controls down directly to Flash
-
-			/*
-			 When a user puts his mouse over the fullscreen button, we disable the controls so that mouse events can go down to flash (pointer-events)
-			 We then put a divs over the video and on either side of the fullscreen button
-			 to capture mouse movement and restore the controls once the mouse moves outside of the fullscreen button
-			*/
-
-			var fullscreenIsDisabled = false,
-				restoreControls = function() {
-					if (fullscreenIsDisabled) {
-						// hide the hovers
-						for (var i in hoverDivs) {
-							hoverDivs[i].hide();
-						}
-
-						// restore the control bar
-						t.fullscreenBtn.css('pointer-events', '');
-						t.controls.css('pointer-events', '');
-
-						// prevent clicks from pausing video
-						t.media.removeEventListener('click', t.clickToPlayPauseCallback);
-
-						// store for later
-						fullscreenIsDisabled = false;
-					}
-				},
-				hoverDivs = {},
-				hoverDivNames = ['top', 'left', 'right', 'bottom'],
-				i, len,
-				positionHoverDivs = function() {
-					var fullScreenBtnOffsetLeft = fullscreenBtn.offset().left - t.container.offset().left,
-						fullScreenBtnOffsetTop = fullscreenBtn.offset().top - t.container.offset().top,
-						fullScreenBtnWidth = fullscreenBtn.outerWidth(true),
-						fullScreenBtnHeight = fullscreenBtn.outerHeight(true),
-						containerWidth = t.container.width(),
-						containerHeight = t.container.height();
-
-					for (i in hoverDivs) {
-						hoverDivs[i].css({position: 'absolute', top: 0, left: 0}); //, backgroundColor: '#f00'});
-					}
-
-					// over video, but not controls
-					hoverDivs['top']
-						.width( containerWidth )
-						.height( fullScreenBtnOffsetTop );
-
-					// over controls, but not the fullscreen button
-					hoverDivs['left']
-						.width( fullScreenBtnOffsetLeft )
-						.height( fullScreenBtnHeight )
-						.css({top: fullScreenBtnOffsetTop});
-
-					// after the fullscreen button
-					hoverDivs['right']
-						.width( containerWidth - fullScreenBtnOffsetLeft - fullScreenBtnWidth )
-						.height( fullScreenBtnHeight )
-						.css({top: fullScreenBtnOffsetTop,
-							 left: fullScreenBtnOffsetLeft + fullScreenBtnWidth});
-
-					// under the fullscreen button
-					hoverDivs['bottom']
-						.width( containerWidth )
-						.height( containerHeight - fullScreenBtnHeight - fullScreenBtnOffsetTop )
-						.css({top: fullScreenBtnOffsetTop + fullScreenBtnHeight});
-				};
-
-			t.globalBind('resize', function() {
-				positionHoverDivs();
-			});
-
-			for (i = 0, len = hoverDivNames.length; i < len; i++) {
-				hoverDivs[hoverDivNames[i]] = $('<div class="mejs-fullscreen-hover" />').appendTo(t.container).mouseover(restoreControls).hide();
-			}
-
-			// on hover, kill the fullscreen button's HTML handling, allowing clicks down to Flash
-			fullscreenBtn.on('mouseover',function() {
-
-				if (!t.isFullScreen) {
-
-					var buttonPos = fullscreenBtn.offset(),
-						containerPos = player.container.offset();
-
-					// move the button in Flash into place
-					media.positionFullscreenButton(buttonPos.left - containerPos.left, buttonPos.top - containerPos.top, false);
-
-					// allows click through
-					t.fullscreenBtn.css('pointer-events', 'none');
-					t.controls.css('pointer-events', 'none');
-
-					// restore click-to-play
-					t.media.addEventListener('click', t.clickToPlayPauseCallback);
-
-					// show the divs that will restore things
-					for (i in hoverDivs) {
-						hoverDivs[i].show();
-					}
-
-					positionHoverDivs();
-
-					fullscreenIsDisabled = true;
-				}
-
-			});
-
-			// restore controls anytime the user enters or leaves fullscreen
-			media.addEventListener('fullscreenchange', function(e) {
-				t.isFullScreen = !t.isFullScreen;
-				// don't allow plugin click to pause video - messes with
-				// plugin's controls
-				if (t.isFullScreen) {
-					t.media.removeEventListener('click', t.clickToPlayPauseCallback);
-				} else {
-					t.media.addEventListener('click', t.clickToPlayPauseCallback);
-				}
-				restoreControls();
-			});
-
-
-			// the mouseout event doesn't work on the fullscren button, because we already killed the pointer-events
-			// so we use the document.mousemove event to restore controls when the mouse moves outside the fullscreen button
-
-			t.globalBind('mousemove', function(e) {
-
-				// if the mouse is anywhere but the fullsceen button, then restore it all
-				if (fullscreenIsDisabled) {
-
-					var fullscreenBtnPos = fullscreenBtn.offset();
-
-
-					if (e.pageY < fullscreenBtnPos.top || e.pageY > fullscreenBtnPos.top + fullscreenBtn.outerHeight(true) ||
-						e.pageX < fullscreenBtnPos.left || e.pageX > fullscreenBtnPos.left + fullscreenBtn.outerWidth(true)
-						) {
-
-						fullscreenBtn.css('pointer-events', '');
-						t.controls.css('pointer-events', '');
-
-						fullscreenIsDisabled = false;
-					}
-				}
-			});
-
-
-			t.isPluginClickThroughCreated = true;
-		},		
-
-		cleanfullscreen: function(player) {
-			player.exitFullScreen();
-		},
-
-        containerSizeTimeout: null,
-
-		enterFullScreen: function() {
-
-			var t = this;
-
-			if (mejs.MediaFeatures.hasiOSFullScreen) {
-				t.media.webkitEnterFullscreen();
-				return;
-			}
-
-			// set it to not show scroll bars so 100% will work
-            $(document.documentElement).addClass('mejs-fullscreen');
-
-			// store sizing
-			t.normalHeight = t.container.height();
-			t.normalWidth = t.container.width();
-
-
-
-			// attempt to do true fullscreen
-			if (t.fullscreenMode === 'native-native' || t.fullscreenMode === 'plugin-native') {
-
-				mejs.MediaFeatures.requestFullScreen(t.container[0]);
-				//return;
-
-				if (t.isInIframe) {
-					// sometimes exiting from fullscreen doesn't work
-					// notably in Chrome <iframe>. Fixed in version 17
-					setTimeout(function checkFullscreen() {
-
-						if (t.isNativeFullScreen) {
-							var percentErrorMargin = 0.002, // 0.2%
-								windowWidth = $(window).width(),
-								screenWidth = screen.width,
-								absDiff = Math.abs(screenWidth - windowWidth),
-								marginError = screenWidth * percentErrorMargin;
-
-							// check if the video is suddenly not really fullscreen
-							if (absDiff > marginError) {
-								// manually exit
-								t.exitFullScreen();
-							} else {
-								// test again
-								setTimeout(checkFullscreen, 500);
-							}
-						}
-						
-					}, 1000);
-				}
-				
-			} else if (t.fullscreeMode == 'fullwindow') {				
-				// move into position
-				
-			}			
-			
-			// make full size
-			t.container
-				.addClass('mejs-container-fullscreen')
-				.width('100%')
-				.height('100%');
-				//.css({position: 'fixed', left: 0, top: 0, right: 0, bottom: 0, overflow: 'hidden', width: '100%', height: '100%', 'z-index': 1000});
-
-			// Only needed for safari 5.1 native full screen, can cause display issues elsewhere
-			// Actually, it seems to be needed for IE8, too
-			//if (mejs.MediaFeatures.hasTrueNativeFullScreen) {
-				t.containerSizeTimeout = setTimeout(function() {
-					t.container.css({width: '100%', height: '100%'});
-					t.setControlsSize();
-				}, 500);
-			//}
-
-			if (t.media.pluginType === 'native') {
-				t.$media
-					.width('100%')
-					.height('100%');
-			} else {
-				t.container.find('.mejs-shim')
-					.width('100%')
-					.height('100%');	
-				
-				setTimeout(function() {
-					var win = $(window),
-						winW = win.width(),
-						winH = win.height();
-							
-					t.media.setVideoSize(winW,winH);			
-				}, 500);
-			}
-
-			t.layers.children('div')
-				.width('100%')
-				.height('100%');
-
-			if (t.fullscreenBtn) {
-				t.fullscreenBtn
-					.removeClass('mejs-fullscreen')
-					.addClass('mejs-unfullscreen');
-			}
-
-			t.setControlsSize();
-			t.isFullScreen = true;
-
-			t.container.find('.mejs-captions-text').css('font-size', screen.width / t.width * 1.00 * 100 + '%');
-			t.container.find('.mejs-captions-position').css('bottom', '45px');
-
-			t.container.trigger('enteredfullscreen');
-		},
-
-		exitFullScreen: function() {
-
-			var t = this;
-
-            // Prevent container from attempting to stretch a second time
-            clearTimeout(t.containerSizeTimeout);
-
-			// firefox can't adjust plugins
-			/*
-			if (t.media.pluginType !== 'native' && mejs.MediaFeatures.isFirefox) {
-				t.media.setFullscreen(false);
-				//player.isFullScreen = false;
-				return;
-			}
-			*/
-
-			// come out of native fullscreen
-			if (mejs.MediaFeatures.hasTrueNativeFullScreen && (mejs.MediaFeatures.isFullScreen() || t.isFullScreen)) {
-				mejs.MediaFeatures.cancelFullScreen();
-			}
-
-			// restore scroll bars to document
-            $(document.documentElement).removeClass('mejs-fullscreen');
-
-			t.container
-				.removeClass('mejs-container-fullscreen')
-				.width(t.normalWidth)
-				.height(t.normalHeight);
-
-			if (t.media.pluginType === 'native') {
-				t.$media
-					.width(t.normalWidth)
-					.height(t.normalHeight);
-			} else {
-				t.container.find('.mejs-shim')
-					.width(t.normalWidth)
-					.height(t.normalHeight);
-
-				t.media.setVideoSize(t.normalWidth, t.normalHeight);
-			}
-
-			t.layers.children('div')
-				.width(t.normalWidth)
-				.height(t.normalHeight);
-
-			t.fullscreenBtn
-				.removeClass('mejs-unfullscreen')
-				.addClass('mejs-fullscreen');
-
-			t.setControlsSize();
-			t.isFullScreen = false;
-
-			t.container.find('.mejs-captions-text').css('font-size','');
-			t.container.find('.mejs-captions-position').css('bottom', '');
-
-			t.container.trigger('exitedfullscreen');
-		}
-	});
-
-})(mejs.$);
-
-(function($) {
-
-	// Speed
-	$.extend(mejs.MepDefaults, {
-
-		// We also support to pass object like this:
-		// [{name: 'Slow', value: '0.75'}, {name: 'Normal', value: '1.00'}, ...]
-		speeds: ['2.00', '1.50', '1.25', '1.00', '0.75'],
-
-		defaultSpeed: '1.00',
-		
-		speedChar: 'x'
-
-	});
-
-	$.extend(MediaElementPlayer.prototype, {
-
-		buildspeed: function(player, controls, layers, media) {
-			var t = this;
-
-			if (t.media.pluginType == 'native') {
-				var 
-					speedButton = null,
-					speedSelector = null,
-					playbackSpeed = null,
-					inputId = null;
-
-				var speeds = [];
-				var defaultInArray = false;
-				for (var i=0, len=t.options.speeds.length; i < len; i++) {
-					var s = t.options.speeds[i];
-					if (typeof(s) === 'string'){
-						speeds.push({
-							name: s + t.options.speedChar,
-							value: s
-						});
-						if(s === t.options.defaultSpeed) {
-							defaultInArray = true;
-						}
-					}
-					else {
-						speeds.push(s);
-						if(s.value === t.options.defaultSpeed) {
-							defaultInArray = true;
-						}
-					}
-				}
-
-				if (!defaultInArray) {
-					speeds.push({
-						name: t.options.defaultSpeed + t.options.speedChar,
-						value: t.options.defaultSpeed
-					});
-				}
-
-				speeds.sort(function(a, b) {
-					return parseFloat(b.value) - parseFloat(a.value);
-				});
-
-				var getSpeedNameFromValue = function(value) {
-					for(i=0,len=speeds.length; i <len; i++) {
-						if (speeds[i].value === value) {
-							return speeds[i].name;
-						}
-					}
-				};
-
-				var html = '<div class="mejs-button mejs-speed-button">' +
-							'<button type="button">' + getSpeedNameFromValue(t.options.defaultSpeed) + '</button>' +
-							'<div class="mejs-speed-selector">' +
-							'<ul>';
-
-				for (i = 0, il = speeds.length; i<il; i++) {
-					inputId = t.id + '-speed-' + speeds[i].value;
-					html += '<li>' + 
-								'<input type="radio" name="speed" ' + 
-											'value="' + speeds[i].value + '" ' +
-											'id="' + inputId + '" ' +
-											(speeds[i].value === t.options.defaultSpeed ? ' checked' : '') +
-											' />' +
-								'<label for="' + inputId + '" ' +
-											(speeds[i].value === t.options.defaultSpeed ? ' class="mejs-speed-selected"' : '') +
-											'>' + speeds[i].name + '</label>' +
-							'</li>';
-				}
-				html += '</ul></div></div>';
-
-				speedButton = $(html).appendTo(controls);
-				speedSelector = speedButton.find('.mejs-speed-selector');
-
-				playbackSpeed = t.options.defaultSpeed;
-
-				media.addEventListener('loadedmetadata', function(e) {
-					if (playbackSpeed) {
-						media.playbackRate = parseFloat(playbackSpeed);
-					}
-				}, true);
-
-				speedSelector
-					.on('click', 'input[type="radio"]', function() {
-						var newSpeed = $(this).attr('value');
-						playbackSpeed = newSpeed;
-						media.playbackRate = parseFloat(newSpeed);
-						speedButton.find('button').html(getSpeedNameFromValue(newSpeed));
-						speedButton.find('.mejs-speed-selected').removeClass('mejs-speed-selected');
-						speedButton.find('input[type="radio"]:checked').next().addClass('mejs-speed-selected');
-					});
-				speedButton
-					.one( 'mouseenter focusin', function() {
-						speedSelector
-							.height(
-								speedButton.find('.mejs-speed-selector ul').outerHeight(true) +
-								speedButton.find('.mejs-speed-translations').outerHeight(true))
-							.css('top', (-1 * speedSelector.height()) + 'px');
-					});
-			}
-		}
-	});
-
-})(mejs.$);
-
-(function($) {
-
-	// add extra default options
-	$.extend(mejs.MepDefaults, {
-		// this will automatically turn on a <track>
-		startLanguage: '',
-
-		tracksText: mejs.i18n.t('Captions/Subtitles'),
-
-		// By default, no WAI-ARIA live region - don't make a
-		// screen reader speak captions over an audio track.
-		tracksAriaLive: false,
-
-		// option to remove the [cc] button when no <track kind="subtitles"> are present
-		hideCaptionsButtonWhenEmpty: true,
-
-		// If true and we only have one track, change captions to popup
-		toggleCaptionsButtonWhenOnlyOne: false,
-
-		// #id or .class
-		slidesSelector: ''
-	});
-
-	$.extend(MediaElementPlayer.prototype, {
-
-		hasChapters: false,
-
-		cleartracks: function(player, controls, layers, media){
-			if(player) {
-				if(player.captions) player.captions.remove();
-				if(player.chapters) player.chapters.remove();
-				if(player.captionsText) player.captionsText.remove();
-				if(player.captionsButton) player.captionsButton.remove();
-			}
-		},
-		buildtracks: function(player, controls, layers, media) {
-			if (player.tracks.length === 0)
-				return;
-
-			var t = this,
-				attr = t.options.tracksAriaLive ?
-					'role="log" aria-live="assertive" aria-atomic="false"' : '',
-				i;
-
-			if (t.domNode.textTracks) { // if browser will do native captions, prefer mejs captions, loop through tracks and hide
-				for (i = t.domNode.textTracks.length - 1; i >= 0; i--) {
-					t.domNode.textTracks[i].mode = "hidden";
-				}
-			}
-			t.cleartracks(player, controls, layers, media);
-			player.chapters =
-					$('<div class="mejs-chapters mejs-layer"></div>')
-						.prependTo(layers).hide();
-			player.captions =
-					$('<div class="mejs-captions-layer mejs-layer"><div class="mejs-captions-position mejs-captions-position-hover" ' +
-					attr + '><span class="mejs-captions-text"></span></div></div>')
-						.prependTo(layers).hide();
-			player.captionsText = player.captions.find('.mejs-captions-text');
-			player.captionsButton =
-					$('<div class="mejs-button mejs-captions-button">'+
-						'<button type="button" aria-controls="' + t.id + '" title="' + t.options.tracksText + '" aria-label="' + t.options.tracksText + '"></button>'+
-						'<div class="mejs-captions-selector">'+
-							'<ul>'+
-								'<li>'+
-									'<input type="radio" name="' + player.id + '_captions" id="' + player.id + '_captions_none" value="none" checked="checked" />' +
-									'<label for="' + player.id + '_captions_none">' + mejs.i18n.t('None') +'</label>'+
-								'</li>'	+
-							'</ul>'+
-						'</div>'+
-					'</div>')
-						.appendTo(controls);
-
-
-			var subtitleCount = 0;
-			for (i=0; i<player.tracks.length; i++) {
-				if (player.tracks[i].kind == 'subtitles') {
-					subtitleCount++;
-				}
-			}
-
-			// if only one language then just make the button a toggle
-			if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount == 1){
-				// click
-				player.captionsButton.on('click',function() {
-					if (player.selectedTrack === null) {
-						lang = player.tracks[0].srclang;
-					} else {
-						lang = 'none';
-					}
-					player.setTrack(lang);
-				});
-			} else {
-				// hover or keyboard focus
-				player.captionsButton.on( 'mouseenter focusin', function() {
-					$(this).find('.mejs-captions-selector').removeClass('mejs-offscreen');
-				})
-
-				// handle clicks to the language radio buttons
-				.on('click','input[type=radio]',function() {
-					lang = this.value;
-					player.setTrack(lang);
-				});
-
-				player.captionsButton.on( 'mouseleave focusout', function() {
-					$(this).find(".mejs-captions-selector").addClass("mejs-offscreen");
-				});
-
-			}
-
-			if (!player.options.alwaysShowControls) {
-				// move with controls
-				player.container
-					.bind('controlsshown', function () {
-						// push captions above controls
-						player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover');
-
-					})
-					.bind('controlshidden', function () {
-						if (!media.paused) {
-							// move back to normal place
-							player.container.find('.mejs-captions-position').removeClass('mejs-captions-position-hover');
-						}
-					});
-			} else {
-				player.container.find('.mejs-captions-position').addClass('mejs-captions-position-hover');
-			}
-
-			player.trackToLoad = -1;
-			player.selectedTrack = null;
-			player.isLoadingTrack = false;
-
-			// add to list
-			for (i=0; i<player.tracks.length; i++) {
-				if (player.tracks[i].kind == 'subtitles') {
-					player.addTrackButton(player.tracks[i].srclang, player.tracks[i].label);
-				}
-			}
-
-			// start loading tracks
-			player.loadNextTrack();
-
-			media.addEventListener('timeupdate',function(e) {
-				player.displayCaptions();
-			}, false);
-
-			if (player.options.slidesSelector !== '') {
-				player.slidesContainer = $(player.options.slidesSelector);
-
-				media.addEventListener('timeupdate',function(e) {
-					player.displaySlides();
-				}, false);
-
-			}
-
-			media.addEventListener('loadedmetadata', function(e) {
-				player.displayChapters();
-			}, false);
-
-			player.container.hover(
-				function () {
-					// chapters
-					if (player.hasChapters) {
-						player.chapters.removeClass('mejs-offscreen');
-						player.chapters.fadeIn(200).height(player.chapters.find('.mejs-chapter').outerHeight());
-					}
-				},
-				function () {
-					if (player.hasChapters && !media.paused) {
-						player.chapters.fadeOut(200, function() {
-							$(this).addClass('mejs-offscreen');
-							$(this).css('display','block');
-						});
-					}
-				});
-
-			t.container.on('controlsresize', function() {
-				t.adjustLanguageBox();
-			});
-
-			// check for autoplay
-			if (player.node.getAttribute('autoplay') !== null) {
-				player.chapters.addClass('mejs-offscreen');
-			}
-		},
-
-		setTrack: function(lang){
-
-			var t = this,
-				i;
-
-			if (lang == 'none') {
-				t.selectedTrack = null;
-				t.captionsButton.removeClass('mejs-captions-enabled');
-			} else {
-				for (i=0; i<t.tracks.length; i++) {
-					if (t.tracks[i].srclang == lang) {
-						if (t.selectedTrack === null)
-							t.captionsButton.addClass('mejs-captions-enabled');
-						t.selectedTrack = t.tracks[i];
-						t.captions.attr('lang', t.selectedTrack.srclang);
-						t.displayCaptions();
-						break;
-					}
-				}
-			}
-		},
-
-		loadNextTrack: function() {
-			var t = this;
-
-			t.trackToLoad++;
-			if (t.trackToLoad < t.tracks.length) {
-				t.isLoadingTrack = true;
-				t.loadTrack(t.trackToLoad);
-			} else {
-				// add done?
-				t.isLoadingTrack = false;
-
-				t.checkForTracks();
-			}
-		},
-
-		loadTrack: function(index){
-			var
-				t = this,
-				track = t.tracks[index],
-				after = function() {
-
-					track.isLoaded = true;
-
-					t.enableTrackButton(track.srclang, track.label);
-
-					t.loadNextTrack();
-
-				};
-
-
-			$.ajax({
-				url: track.src,
-				dataType: "text",
-				success: function(d) {
-
-					// parse the loaded file
-					if (typeof d == "string" && (/<tt\s+xml/ig).exec(d)) {
-						track.entries = mejs.TrackFormatParser.dfxp.parse(d);
-					} else {
-						track.entries = mejs.TrackFormatParser.webvtt.parse(d);
-					}
-
-					after();
-
-					if (track.kind == 'chapters') {
-						t.media.addEventListener('play', function(e) {
-							if (t.media.duration > 0) {
-								t.displayChapters(track);
-							}
-						}, false);
-					}
-
-					if (track.kind == 'slides') {
-						t.setupSlides(track);
-					}
-				},
-				error: function() {
-					t.removeTrackButton(track.srclang);
-					t.loadNextTrack();
-				}
-			});
-		},
-
-		enableTrackButton: function(lang, label) {
-			var t = this;
-
-			if (label === '') {
-				label = mejs.language.codes[lang] || lang;
-			}
-
-			t.captionsButton
-				.find('input[value=' + lang + ']')
-					.prop('disabled',false)
-				.siblings('label')
-					.html( label );
-
-			// auto select
-			if (t.options.startLanguage == lang) {
-				$('#' + t.id + '_captions_' + lang).prop('checked', true).trigger('click');
-			}
-
-			t.adjustLanguageBox();
-		},
-
-		removeTrackButton: function(lang) {
-			var t = this;
-
-			t.captionsButton.find('input[value=' + lang + ']').closest('li').remove();
-
-			t.adjustLanguageBox();
-		},
-
-		addTrackButton: function(lang, label) {
-			var t = this;
-			if (label === '') {
-				label = mejs.language.codes[lang] || lang;
-			}
-
-			t.captionsButton.find('ul').append(
-				$('<li>'+
-					'<input type="radio" name="' + t.id + '_captions" id="' + t.id + '_captions_' + lang + '" value="' + lang + '" disabled="disabled" />' +
-					'<label for="' + t.id + '_captions_' + lang + '">' + label + ' (loading)' + '</label>'+
-				'</li>')
-			);
-
-			t.adjustLanguageBox();
-
-			// remove this from the dropdownlist (if it exists)
-			t.container.find('.mejs-captions-translations option[value=' + lang + ']').remove();
-		},
-
-		adjustLanguageBox:function() {
-			var t = this;
-			// adjust the size of the outer box
-			t.captionsButton.find('.mejs-captions-selector').height(
-				t.captionsButton.find('.mejs-captions-selector ul').outerHeight(true) +
-				t.captionsButton.find('.mejs-captions-translations').outerHeight(true)
-			);
-		},
-
-		checkForTracks: function() {
-			var
-				t = this,
-				hasSubtitles = false;
-
-			// check if any subtitles
-			if (t.options.hideCaptionsButtonWhenEmpty) {
-				for (i=0; i<t.tracks.length; i++) {
-					if (t.tracks[i].kind == 'subtitles' && t.tracks[i].isLoaded) {
-						hasSubtitles = true;
-						break;
-					}
-				}
-
-				if (!hasSubtitles) {
-					t.captionsButton.hide();
-					t.setControlsSize();
-				}
-			}
-		},
-
-		displayCaptions: function() {
-
-			if (typeof this.tracks == 'undefined')
-				return;
-
-			var
-				t = this,
-				i,
-				track = t.selectedTrack;
-
-			if (track !== null && track.isLoaded) {
-				for (i=0; i<track.entries.times.length; i++) {
-					if (t.media.currentTime >= track.entries.times[i].start && t.media.currentTime <= track.entries.times[i].stop) {
-						// Set the line before the timecode as a class so the cue can be targeted if needed
-						t.captionsText.html(track.entries.text[i]).attr('class', 'mejs-captions-text ' + (track.entries.times[i].identifier || ''));
-						t.captions.show().height(0);
-						return; // exit out if one is visible;
-					}
-				}
-				t.captions.hide();
-			} else {
-				t.captions.hide();
-			}
-		},
-
-		setupSlides: function(track) {
-			var t = this;
-
-			t.slides = track;
-			t.slides.entries.imgs = [t.slides.entries.text.length];
-			t.showSlide(0);
-
-		},
-
-		showSlide: function(index) {
-			if (typeof this.tracks == 'undefined' || typeof this.slidesContainer == 'undefined') {
-				return;
-			}
-
-			var t = this,
-				url = t.slides.entries.text[index],
-				img = t.slides.entries.imgs[index];
-
-			if (typeof img == 'undefined' || typeof img.fadeIn == 'undefined') {
-
-				t.slides.entries.imgs[index] = img = $('<img src="' + url + '">')
-						.on('load', function() {
-							img.appendTo(t.slidesContainer)
-								.hide()
-								.fadeIn()
-								.siblings(':visible')
-									.fadeOut();
-
-						});
-
-			} else {
-
-				if (!img.is(':visible') && !img.is(':animated')) {
-
-					//
-
-					img.fadeIn()
-						.siblings(':visible')
-							.fadeOut();
-				}
-			}
-
-		},
-
-		displaySlides: function() {
-
-			if (typeof this.slides == 'undefined')
-				return;
-
-			var
-				t = this,
-				slides = t.slides,
-				i;
-
-			for (i=0; i<slides.entries.times.length; i++) {
-				if (t.media.currentTime >= slides.entries.times[i].start && t.media.currentTime <= slides.entries.times[i].stop){
-
-					t.showSlide(i);
-
-					return; // exit out if one is visible;
-				}
-			}
-		},
-
-		displayChapters: function() {
-			var
-				t = this,
-				i;
-
-			for (i=0; i<t.tracks.length; i++) {
-				if (t.tracks[i].kind == 'chapters' && t.tracks[i].isLoaded) {
-					t.drawChapters(t.tracks[i]);
-					t.hasChapters = true;
-					break;
-				}
-			}
-		},
-
-		drawChapters: function(chapters) {
-			var
-				t = this,
-				i,
-				dur,
-				//width,
-				//left,
-				percent = 0,
-				usedPercent = 0;
-
-			t.chapters.empty();
-
-			for (i=0; i<chapters.entries.times.length; i++) {
-				dur = chapters.entries.times[i].stop - chapters.entries.times[i].start;
-				percent = Math.floor(dur / t.media.duration * 100);
-				if (percent + usedPercent > 100 || // too large
-					i == chapters.entries.times.length-1 && percent + usedPercent < 100) // not going to fill it in
-					{
-					percent = 100 - usedPercent;
-				}
-				//width = Math.floor(t.width * dur / t.media.duration);
-				//left = Math.floor(t.width * chapters.entries.times[i].start / t.media.duration);
-				//if (left + width > t.width) {
-				//	width = t.width - left;
-				//}
-
-				t.chapters.append( $(
-					'<div class="mejs-chapter" rel="' + chapters.entries.times[i].start + '" style="left: ' + usedPercent.toString() + '%;width: ' + percent.toString() + '%;">' +
-						'<div class="mejs-chapter-block' + ((i==chapters.entries.times.length-1) ? ' mejs-chapter-block-last' : '') + '">' +
-							'<span class="ch-title">' + chapters.entries.text[i] + '</span>' +
-							'<span class="ch-time">' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].start, t.options) + '&ndash;' + mejs.Utility.secondsToTimeCode(chapters.entries.times[i].stop, t.options) + '</span>' +
-						'</div>' +
-					'</div>'));
-				usedPercent += percent;
-			}
-
-			t.chapters.find('div.mejs-chapter').click(function() {
-				t.media.setCurrentTime( parseFloat( $(this).attr('rel') ) );
-				if (t.media.paused) {
-					t.media.play();
-				}
-			});
-
-			t.chapters.show();
-		}
-	});
-
-
-
-	mejs.language = {
-		codes:  {
-			af:'Afrikaans',
-			sq:'Albanian',
-			ar:'Arabic',
-			be:'Belarusian',
-			bg:'Bulgarian',
-			ca:'Catalan',
-			zh:'Chinese',
-			'zh-cn':'Chinese Simplified',
-			'zh-tw':'Chinese Traditional',
-			hr:'Croatian',
-			cs:'Czech',
-			da:'Danish',
-			nl:'Dutch',
-			en:'English',
-			et:'Estonian',
-			fl:'Filipino',
-			fi:'Finnish',
-			fr:'French',
-			gl:'Galician',
-			de:'German',
-			el:'Greek',
-			ht:'Haitian Creole',
-			iw:'Hebrew',
-			hi:'Hindi',
-			hu:'Hungarian',
-			is:'Icelandic',
-			id:'Indonesian',
-			ga:'Irish',
-			it:'Italian',
-			ja:'Japanese',
-			ko:'Korean',
-			lv:'Latvian',
-			lt:'Lithuanian',
-			mk:'Macedonian',
-			ms:'Malay',
-			mt:'Maltese',
-			no:'Norwegian',
-			fa:'Persian',
-			pl:'Polish',
-			pt:'Portuguese',
-			// 'pt-pt':'Portuguese (Portugal)',
-			ro:'Romanian',
-			ru:'Russian',
-			sr:'Serbian',
-			sk:'Slovak',
-			sl:'Slovenian',
-			es:'Spanish',
-			sw:'Swahili',
-			sv:'Swedish',
-			tl:'Tagalog',
-			th:'Thai',
-			tr:'Turkish',
-			uk:'Ukrainian',
-			vi:'Vietnamese',
-			cy:'Welsh',
-			yi:'Yiddish'
-		}
-	};
-
-	/*
-	Parses WebVTT format which should be formatted as
-	================================
-	WEBVTT
-
-	1
-	00:00:01,1 --> 00:00:05,000
-	A line of text
-
-	2
-	00:01:15,1 --> 00:02:05,000
-	A second line of text
-
-	===============================
-
-	Adapted from: http://www.delphiki.com/html5/playr
-	*/
-	mejs.TrackFormatParser = {
-		webvtt: {
-			pattern_timecode: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,
-
-			parse: function(trackText) {
-				var
-					i = 0,
-					lines = mejs.TrackFormatParser.split2(trackText, /\r?\n/),
-					entries = {text:[], times:[]},
-					timecode,
-					text,
-					identifier;
-				for(; i<lines.length; i++) {
-					timecode = this.pattern_timecode.exec(lines[i]);
-
-					if (timecode && i<lines.length) {
-						if ((i - 1) >= 0 && lines[i - 1] !== '') {
-							identifier = lines[i - 1];
-						}
-						i++;
-						// grab all the (possibly multi-line) text that follows
-						text = lines[i];
-						i++;
-						while(lines[i] !== '' && i<lines.length){
-							text = text + '\n' + lines[i];
-							i++;
-						}
-						text = $.trim(text).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
-						// Text is in a different array so I can use .join
-						entries.text.push(text);
-						entries.times.push(
-						{
-							identifier: identifier,
-							start: (mejs.Utility.convertSMPTEtoSeconds(timecode[1]) === 0) ? 0.200 : mejs.Utility.convertSMPTEtoSeconds(timecode[1]),
-							stop: mejs.Utility.convertSMPTEtoSeconds(timecode[3]),
-							settings: timecode[5]
-						});
-					}
-					identifier = '';
-				}
-				return entries;
-			}
-		},
-		// Thanks to Justin Capella: https://github.com/johndyer/mediaelement/pull/420
-		dfxp: {
-			parse: function(trackText) {
-				trackText = $(trackText).filter("tt");
-				var
-					i = 0,
-					container = trackText.children("div").eq(0),
-					lines = container.find("p"),
-					styleNode = trackText.find("#" + container.attr("style")),
-					styles,
-					text,
-					entries = {text:[], times:[]};
-
-
-				if (styleNode.length) {
-					var attributes = styleNode.removeAttr("id").get(0).attributes;
-					if (attributes.length) {
-						styles = {};
-						for (i = 0; i < attributes.length; i++) {
-							styles[attributes[i].name.split(":")[1]] = attributes[i].value;
-						}
-					}
-				}
-
-				for(i = 0; i<lines.length; i++) {
-					var style;
-					var _temp_times = {
-						start: null,
-						stop: null,
-						style: null
-					};
-					if (lines.eq(i).attr("begin")) _temp_times.start = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i).attr("begin"));
-					if (!_temp_times.start && lines.eq(i-1).attr("end")) _temp_times.start = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i-1).attr("end"));
-					if (lines.eq(i).attr("end")) _temp_times.stop = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i).attr("end"));
-					if (!_temp_times.stop && lines.eq(i+1).attr("begin")) _temp_times.stop = mejs.Utility.convertSMPTEtoSeconds(lines.eq(i+1).attr("begin"));
-					if (styles) {
-						style = "";
-						for (var _style in styles) {
-							style += _style + ":" + styles[_style] + ";";
-						}
-					}
-					if (style) _temp_times.style = style;
-					if (_temp_times.start === 0) _temp_times.start = 0.200;
-					entries.times.push(_temp_times);
-					text = $.trim(lines.eq(i).html()).replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "<a href='$1' target='_blank'>$1</a>");
-					entries.text.push(text);
-					if (entries.times.start === 0) entries.times.start = 2;
-				}
-				return entries;
-			}
-		},
-		split2: function (text, regex) {
-			// normal version for compliant browsers
-			// see below for IE fix
-			return text.split(regex);
-		}
-	};
-
-	// test for browsers with bad String.split method.
-	if ('x\n\ny'.split(/\n/gi).length != 3) {
-		// add super slow IE8 and below version
-		mejs.TrackFormatParser.split2 = function(text, regex) {
-			var
-				parts = [],
-				chunk = '',
-				i;
-
-			for (i=0; i<text.length; i++) {
-				chunk += text.substring(i,i+1);
-				if (regex.test(chunk)) {
-					parts.push(chunk.replace(regex, ''));
-					chunk = '';
-				}
-			}
-			parts.push(chunk);
-			return parts;
-		};
-	}
-
-})(mejs.$);
-
-/*
-* ContextMenu Plugin
-* 
-*
-*/
-
-(function($) {
-
-$.extend(mejs.MepDefaults,
-	{ 'contextMenuItems': [
-		// demo of a fullscreen option
-		{ 
-			render: function(player) {
-				
-				// check for fullscreen plugin
-				if (typeof player.enterFullScreen == 'undefined')
-					return null;
-			
-				if (player.isFullScreen) {
-					return mejs.i18n.t('Turn off Fullscreen');
-				} else {
-					return mejs.i18n.t('Go Fullscreen');
-				}
-			},
-			click: function(player) {
-				if (player.isFullScreen) {
-					player.exitFullScreen();
-				} else {
-					player.enterFullScreen();
-				}
-			}
-		}
-		,
-		// demo of a mute/unmute button
-		{ 
-			render: function(player) {
-				if (player.media.muted) {
-					return mejs.i18n.t('Unmute');
-				} else {
-					return mejs.i18n.t('Mute');
-				}
-			},
-			click: function(player) {
-				if (player.media.muted) {
-					player.setMuted(false);
-				} else {
-					player.setMuted(true);
-				}
-			}
-		},
-		// separator
-		{
-			isSeparator: true
-		}
-		,
-		// demo of simple download video
-		{ 
-			render: function(player) {
-				return mejs.i18n.t('Download Video');
-			},
-			click: function(player) {
-				window.location.href = player.media.currentSrc;
-			}
-		}	
-	]}
-);
-
-
-	$.extend(MediaElementPlayer.prototype, {
-		buildcontextmenu: function(player, controls, layers, media) {
-			
-			// create context menu
-			player.contextMenu = $('<div class="mejs-contextmenu"></div>')
-								.appendTo($('body'))
-								.hide();
-			
-			// create events for showing context menu
-			player.container.bind('contextmenu', function(e) {
-				if (player.isContextMenuEnabled) {
-					e.preventDefault();
-					player.renderContextMenu(e.clientX-1, e.clientY-1);
-					return false;
-				}
-			});
-			player.container.bind('click', function() {
-				player.contextMenu.hide();
-			});	
-			player.contextMenu.bind('mouseleave', function() {
-
-				//
-				player.startContextMenuTimer();
-				
-			});		
-		},
-
-		cleancontextmenu: function(player) {
-			player.contextMenu.remove();
-		},
-		
-		isContextMenuEnabled: true,
-		enableContextMenu: function() {
-			this.isContextMenuEnabled = true;
-		},
-		disableContextMenu: function() {
-			this.isContextMenuEnabled = false;
-		},
-		
-		contextMenuTimeout: null,
-		startContextMenuTimer: function() {
-			//
-			
-			var t = this;
-			
-			t.killContextMenuTimer();
-			
-			t.contextMenuTimer = setTimeout(function() {
-				t.hideContextMenu();
-				t.killContextMenuTimer();
-			}, 750);
-		},
-		killContextMenuTimer: function() {
-			var timer = this.contextMenuTimer;
-			
-			//
-			
-			if (timer != null) {				
-				clearTimeout(timer);
-				delete timer;
-				timer = null;
-			}
-		},		
-		
-		hideContextMenu: function() {
-			this.contextMenu.hide();
-		},
-		
-		renderContextMenu: function(x,y) {
-			
-			// alway re-render the items so that things like "turn fullscreen on" and "turn fullscreen off" are always written correctly
-			var t = this,
-				html = '',
-				items = t.options.contextMenuItems;
-			
-			for (var i=0, il=items.length; i<il; i++) {
-				
-				if (items[i].isSeparator) {
-					html += '<div class="mejs-contextmenu-separator"></div>';
-				} else {
-				
-					var rendered = items[i].render(t);
-				
-					// render can return null if the item doesn't need to be used at the moment
-					if (rendered != null) {
-						html += '<div class="mejs-contextmenu-item" data-itemindex="' + i + '" id="element-' + (Math.random()*1000000) + '">' + rendered + '</div>';
-					}
-				}
-			}
-			
-			// position and show the context menu
-			t.contextMenu
-				.empty()
-				.append($(html))
-				.css({top:y, left:x})
-				.show();
-				
-			// bind events
-			t.contextMenu.find('.mejs-contextmenu-item').each(function() {
-							
-				// which one is this?
-				var $dom = $(this),
-					itemIndex = parseInt( $dom.data('itemindex'), 10 ),
-					item = t.options.contextMenuItems[itemIndex];
-				
-				// bind extra functionality?
-				if (typeof item.show != 'undefined')
-					item.show( $dom , t);
-				
-				// bind click action
-				$dom.click(function() {			
-					// perform click action
-					if (typeof item.click != 'undefined')
-						item.click(t);
-					
-					// close
-					t.contextMenu.hide();				
-				});				
-			});	
-			
-			// stop the controls from hiding
-			setTimeout(function() {
-				t.killControlsTimer('rev3');	
-			}, 100);
-						
-		}
-	});
-	
-})(mejs.$);
-(function($) {
-	// skip back button
-
-	$.extend(mejs.MepDefaults, {
-		skipBackInterval: 30,
-		// %1 will be replaced with skipBackInterval in this string
-		skipBackText: mejs.i18n.t('Skip back %1 seconds')
-	});
-
-	$.extend(MediaElementPlayer.prototype, {
-		buildskipback: function(player, controls, layers, media) {
-			var
-				t = this,
-				// Replace %1 with skip back interval
-				backText = t.options.skipBackText.replace('%1', t.options.skipBackInterval),
-				// create the loop button
-				loop =
-				$('<div class="mejs-button mejs-skip-back-button">' +
-					'<button type="button" aria-controls="' + t.id + '" title="' + backText + '" aria-label="' + backText + '">' + t.options.skipBackInterval + '</button>' +
-				'</div>')
-				// append it to the toolbar
-				.appendTo(controls)
-				// add a click toggle event
-				.click(function() {
-					media.setCurrentTime(Math.max(media.currentTime - t.options.skipBackInterval, 0));
-					$(this).find('button').blur();
-				});
-		}
-	});
-
-})(mejs.$);
-
-/**
- * Postroll plugin
- */
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		postrollCloseText: mejs.i18n.t('Close')
-	});
-
-	// Postroll
-	$.extend(MediaElementPlayer.prototype, {
-		buildpostroll: function(player, controls, layers, media) {
-			var
-				t = this,
-				postrollLink = t.container.find('link[rel="postroll"]').attr('href');
-
-			if (typeof postrollLink !== 'undefined') {
-				player.postroll =
-					$('<div class="mejs-postroll-layer mejs-layer"><a class="mejs-postroll-close" onclick="$(this).parent().hide();return false;">' + t.options.postrollCloseText + '</a><div class="mejs-postroll-layer-content"></div></div>').prependTo(layers).hide();
-
-				t.media.addEventListener('ended', function (e) {
-					$.ajax({
-						dataType: 'html',
-						url: postrollLink,
-						success: function (data, textStatus) {
-							layers.find('.mejs-postroll-layer-content').html(data);
-						}
-					});
-					player.postroll.show();
-				}, false);
-			}
-		}
-	});
-
-})(mejs.$);
\ No newline at end of file
diff --git a/static/mediaelementjs/mediaelementplayer.css b/static/mediaelementjs/mediaelementplayer.css
deleted file mode 100644
index b9178c7..0000000
--- a/static/mediaelementjs/mediaelementplayer.css
+++ /dev/null
@@ -1,1009 +0,0 @@
-.mejs-offscreen{
-/* Accessibility: hide screen reader texts (and prefer "top" for RTL languages).  Reference: http://blog.rrwd.nl/2015/04/04/the-screen-reader-text-class-why-and-how/ */
-	clip: rect(1px 1px 1px 1px); /* IE6, IE7 - no likey commas */
-	clip: rect(1px, 1px, 1px, 1px); /* IE8-IE11 - we likey commas, no support for clip-path */
-	clip-path: polygon(0px 0px, 0px 0px,0px 0px, 0px 0px);
-	position: absolute !important;
-	height: 1px;
-	width: 1px;
-	overflow: hidden;
-}
-
-.mejs-container {
-	position: relative;
-	background: #000;
-	font-family: Helvetica, Arial;
-	text-align: left;
-	vertical-align: top;
-	text-indent: 0;
-}
-
-.mejs-fill-container,.mejs-fill-container .mejs-container{
-    	width: 100%;
-    	height: 100%;
-}
-
-.mejs-fill-container{
-    	overflow: hidden;
-}
-
-.mejs-container:focus {
-	outline: none;
-}
-
-.me-plugin {
-	position: absolute;
-}
-
-.mejs-embed, .mejs-embed body {
-	width: 100%;
-	height: 100%;
-	margin: 0;
-	padding: 0;
-	background: #000;
-	overflow: hidden;
-}
-
-.mejs-fullscreen {
-	/* set it to not show scroll bars so 100% will work */
-	overflow: hidden !important;
-}
-
-.mejs-container-fullscreen {
-	position: fixed;
-	left: 0;
-	top: 0;
-	right: 0;
-	bottom: 0;
-	overflow: hidden;
-	z-index: 1000;
-}
-.mejs-container-fullscreen .mejs-mediaelement,
-.mejs-container-fullscreen video {
-	width: 100%;
-	height: 100%;
-}
-
-.mejs-clear {
-	clear: both;
-}
-
-/* Start: LAYERS */
-.mejs-background {
-	position: absolute;
-	top: 0;
-	left: 0;
-}
-
-.mejs-mediaelement {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-}
-
-.mejs-poster {
-	position: absolute;
-	top: 0;
-	left: 0;
-	background-size: contain ;
-	background-position: 50% 50% ;
-	background-repeat: no-repeat ;
-}
-:root .mejs-poster img {
-	display: none ;
-}
-
-.mejs-poster img {
-	border: 0;
-	padding: 0;
-	border: 0;
-}
-
-.mejs-overlay {
-	position: absolute;
-	top: 0;
-	left: 0;
-}
-
-.mejs-overlay-play {
-	cursor: pointer;
-}
-
-.mejs-overlay-button {
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	width: 100px;
-	height: 100px;
-	margin: -50px 0 0 -50px;
-	background: url(bigplay.svg) no-repeat;
-}
-
-.no-svg .mejs-overlay-button {
-	background-image: url(bigplay.png);
-}
-
-.mejs-overlay:hover .mejs-overlay-button {
-	background-position: 0 -100px ;
-}
-
-.mejs-overlay-loading {
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	width: 80px;
-	height: 80px;
-	margin: -40px 0 0 -40px;
-	background: #333;
-	background: url(background.png);
-	background: rgba(0, 0, 0, 0.9);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(50,50,50,0.9)), to(rgba(0,0,0,0.9)));
-	background: -webkit-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9));
-	background: -moz-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9));
-	background: -o-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9));
-	background: -ms-linear-gradient(top, rgba(50,50,50,0.9), rgba(0,0,0,0.9));
-	background: linear-gradient(rgba(50,50,50,0.9), rgba(0,0,0,0.9));
-}
-
-.mejs-overlay-loading span {
-	display: block;
-	width: 80px;
-	height: 80px;
-	background: transparent url(loading.gif) 50% 50% no-repeat;
-}
-
-/* End: LAYERS */
-
-/* Start: CONTROL BAR */
-.mejs-container .mejs-controls {
-	position: absolute;
-	list-style-type: none;
-	margin: 0;
-	padding: 0;
-	bottom: 0;
-	left: 0;
-	background: url(background.png);
-	background: rgba(0, 0, 0, 0.7);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(50,50,50,0.7)), to(rgba(0,0,0,0.7)));
-	background: -webkit-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: -moz-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: -o-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: -ms-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: linear-gradient(rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	height: 30px;
-	width: 100%;
-}
-.mejs-container .mejs-controls  div {
-	list-style-type: none;
-	background-image: none;
-	display: block;
-	float: left;
-	margin: 0;
-	padding: 0;
-	width: 26px;
-	height: 26px;
-	font-size: 11px;
-	line-height: 11px;
-	font-family: Helvetica, Arial;
-	border: 0;
-}
-
-.mejs-controls .mejs-button button {
-	cursor: pointer;
-	display: block;
-	font-size: 0;
-	line-height: 0;
-	text-decoration: none;
-	margin: 7px 5px;
-	padding: 0;
-	position: absolute;
-	height: 16px;
-	width: 16px;
-	border: 0;
-	background: transparent url(controls.svg) no-repeat;
-}
-
-.no-svg .mejs-controls .mejs-button button {
-	background-image: url(controls.png);
-}
-
-	/* :focus for accessibility */
-.mejs-controls .mejs-button button:focus {
-	outline: dotted 1px #999;
-}
-
-/* End: CONTROL BAR */
-
-/* Start: Time (Current / Duration) */
-.mejs-container .mejs-controls .mejs-time {
-	color: #fff;
-	display: block;
-	height: 17px;
-	width: auto;
-	padding: 10px 3px 0 3px ;
-	overflow: hidden;
-	text-align: center;
-	-moz-box-sizing: content-box;
-	-webkit-box-sizing: content-box;
-	box-sizing: content-box;
-}
-
-.mejs-container .mejs-controls .mejs-time a {
-	color: #fff;
-	font-size: 11px;
-	line-height: 12px;
-	display: block;
-	float: left;
-	margin: 1px 2px 0 0;
-	width: auto;
-}
-/* End: Time (Current / Duration) */
-
-/* Start: Play/Pause/Stop */
-.mejs-controls .mejs-play button {
-	background-position: 0 0;
-}
-
-.mejs-controls .mejs-pause button {
-	background-position: 0 -16px;
-}
-
-.mejs-controls .mejs-stop button {
-	background-position: -112px 0;
-}
-/* Start: Play/Pause/Stop */
-
-/* Start: Progress Bar */
-.mejs-controls div.mejs-time-rail {
-	direction: ltr;
-	width: 200px;
-	padding-top: 5px;
-}
-
-.mejs-controls .mejs-time-rail span, .mejs-controls .mejs-time-rail a {
-	display: block;
-	position: absolute;
-	width: 180px;
-	height: 10px;
-	-webkit-border-radius: 2px;
-	-moz-border-radius: 2px;
-	border-radius: 2px;
-	cursor: pointer;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-total {
-	margin: 5px;
-	background: #333;
-	background: rgba(50,50,50,0.8);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(30,30,30,0.8)), to(rgba(60,60,60,0.8)));
-	background: -webkit-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: -moz-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: -o-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: -ms-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: linear-gradient(rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-buffering {
-	width: 100%;
-	background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-	background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	-webkit-background-size: 15px 15px;
-	-moz-background-size: 15px 15px;
-	-o-background-size: 15px 15px;
-	background-size: 15px 15px;
-	-webkit-animation: buffering-stripes 2s linear infinite;
-	-moz-animation: buffering-stripes 2s linear infinite;
-	-ms-animation: buffering-stripes 2s linear infinite;
-	-o-animation: buffering-stripes 2s linear infinite;
-	animation: buffering-stripes 2s linear infinite;
-}
-
-@-webkit-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
-@-moz-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
-@-ms-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
-@-o-keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
-@keyframes buffering-stripes { from {background-position: 0 0;} to {background-position: 30px 0;} }
-
-.mejs-controls .mejs-time-rail .mejs-time-loaded {
-	background: #3caac8;
-	background: rgba(60,170,200,0.8);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(44,124,145,0.8)), to(rgba(78,183,212,0.8)));
-	background: -webkit-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8));
-	background: -moz-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8));
-	background: -o-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8));
-	background: -ms-linear-gradient(top, rgba(44,124,145,0.8), rgba(78,183,212,0.8));
-	background: linear-gradient(rgba(44,124,145,0.8), rgba(78,183,212,0.8));
-	width: 0;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-current {
-	background: #fff;
-	background: rgba(255,255,255,0.8);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,255,255,0.9)), to(rgba(200,200,200,0.8)));
-	background: -webkit-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: -moz-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: -o-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: -ms-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: linear-gradient(rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	width: 0;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-handle {
-	display: none;
-	position: absolute;
-	margin: 0;
-	width: 10px;
-	background: #fff;
-	-webkit-border-radius: 5px;
-	-moz-border-radius: 5px;
-	border-radius: 5px;
-	cursor: pointer;
-	border: solid 2px #333;
-	top: -2px;
-	text-align: center;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-float {
-	position: absolute;
-	display: none;
-	background: #eee;
-	width: 36px;
-	height: 17px;
-	border: solid 1px #333;
-	top: -26px;
-	margin-left: -18px;
-	text-align: center;
-	color: #111;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-float-current {
-	margin: 2px;
-	width: 30px;
-	display: block;
-	text-align: center;
-	left: 0;
-}
-
-.mejs-controls .mejs-time-rail .mejs-time-float-corner {
-	position: absolute;
-	display: block;
-	width: 0;
-	height: 0;
-	line-height: 0;
-	border: solid 5px #eee;
-	border-color: #eee transparent transparent transparent;
-	-webkit-border-radius: 0;
-	-moz-border-radius: 0;
-	border-radius: 0;
-	top: 15px;
-	left: 13px;
-}
-
-.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float {
-	width: 48px;
-}
-
-.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-current {
-	width: 44px;
-}
-
-.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-corner {
-	left: 18px;
-}
-
-/*
-.mejs-controls .mejs-time-rail:hover .mejs-time-handle {
-	visibility:visible;
-}
-*/
-/* End: Progress Bar */
-
-/* Start: Fullscreen */
-.mejs-controls .mejs-fullscreen-button button {
-	background-position: -32px 0;
-}
-
-.mejs-controls .mejs-unfullscreen button {
-	background-position: -32px -16px;
-}
-/* End: Fullscreen */
-
-
-/* Start: Mute/Volume */
-.mejs-controls .mejs-volume-button {
-}
-
-.mejs-controls .mejs-mute button {
-	background-position: -16px -16px;
-}
-
-.mejs-controls .mejs-unmute button {
-	background-position: -16px 0;
-}
-
-.mejs-controls .mejs-volume-button {
-	position: relative;
-}
-
-.mejs-controls .mejs-volume-button .mejs-volume-slider {
-	display: none;
-	height: 115px;
-	width: 25px;
-	background: url(background.png);
-	background: rgba(50, 50, 50, 0.7);
-	-webkit-border-radius: 0;
-	-moz-border-radius: 0;
-	border-radius: 0;
-	top: -115px;
-	left: 0;
-	z-index: 1;
-	position: absolute;
-	margin: 0;
-}
-
-.mejs-controls .mejs-volume-button:hover {
-	-webkit-border-radius: 0 0 4px 4px;
-	-moz-border-radius: 0 0 4px 4px;
-	border-radius: 0 0 4px 4px;
-}
-
-/*
-.mejs-controls .mejs-volume-button:hover .mejs-volume-slider {
-	display: block;
-}
-*/
-
-.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-total {
-	position: absolute;
-	left: 11px;
-	top: 8px;
-	width: 2px;
-	height: 100px;
-	background: #ddd;
-	background: rgba(255, 255, 255, 0.5);
-	margin: 0;
-}
-
-.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-current {
-	position: absolute;
-	left: 11px;
-	top: 8px;
-	width: 2px;
-	height: 100px;
-	background: #ddd;
-	background: rgba(255, 255, 255, 0.9);
-	margin: 0;
-}
-
-.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-handle {
-	position: absolute;
-	left: 4px;
-	top: -3px;
-	width: 16px;
-	height: 6px;
-	background: #ddd;
-	background: rgba(255, 255, 255, 0.9);
-	cursor: N-resize;
-	-webkit-border-radius: 1px;
-	-moz-border-radius: 1px;
-	border-radius: 1px;
-	margin: 0;
-}
-
-/* horizontal version */
-.mejs-controls a.mejs-horizontal-volume-slider {
-	height: 26px;
-	width: 56px;
-	position: relative;
-    display: block;
-    float: left;
-    vertical-align: middle;
-}
-
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total {
-	position: absolute;
-	left: 0;
-	top: 11px;
-	width: 50px;
-	height: 8px;
-	margin: 0;
-	padding: 0;
-	font-size: 1px;
-	-webkit-border-radius: 2px;
-	-moz-border-radius: 2px;
-	border-radius: 2px;
-	background: #333;
-	background: rgba(50,50,50,0.8);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(30,30,30,0.8)), to(rgba(60,60,60,0.8)));
-	background: -webkit-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: -moz-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: -o-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: -ms-linear-gradient(top, rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-	background: linear-gradient(rgba(30,30,30,0.8), rgba(60,60,60,0.8));
-}
-
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current {
-	position: absolute;
-	left: 0;
-	top: 11px;
-	width: 50px;
-	height: 8px;
-	margin: 0;
-	padding: 0;
-	font-size: 1px;
-	-webkit-border-radius: 2px;
-	-moz-border-radius: 2px;
-	border-radius: 2px;
-	background: #fff;
-	background: rgba(255,255,255,0.8);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,255,255,0.9)), to(rgba(200,200,200,0.8)));
-	background: -webkit-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: -moz-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: -o-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: -ms-linear-gradient(top, rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-	background: linear-gradient(rgba(255,255,255,0.9), rgba(200,200,200,0.8));
-}
-
-.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-handle {
-	display: none;
-}
-
-/* End: Mute/Volume */
-
-/* Start: Track (Captions and Chapters) */
-.mejs-controls .mejs-captions-button {
-	position: relative;
-}
-
-.mejs-controls .mejs-captions-button button {
-	background-position: -48px 0;
-}
-.mejs-controls .mejs-captions-button .mejs-captions-selector {
-	visibility: hidden;
-	position: absolute;
-	bottom: 26px;
-	right: -51px;
-	width: 85px;
-	height: 100px;
-	background: url(background.png);
-	background: rgba(50,50,50,0.7);
-	border: solid 1px transparent;
-	padding: 10px 10px 0 10px;
-	overflow: hidden;
-	-webkit-border-radius: 0;
-	-moz-border-radius: 0;
-	border-radius: 0;
-}
-
-.mejs-controls .mejs-captions-button:hover  .mejs-captions-selector {
-	visibility: visible;
-}
-
-.mejs-controls .mejs-captions-button .mejs-captions-selector ul {
-	margin: 0;
-	padding: 0;
-	display: block;
-	list-style-type: none !important;
-	overflow: hidden;
-}
-
-.mejs-controls .mejs-captions-button .mejs-captions-selector ul li {
-	margin: 0 0 6px 0;
-	padding: 0;
-	list-style-type: none !important;
-	display: block;
-	color: #fff;
-	overflow: hidden;
-}
-
-.mejs-controls .mejs-captions-button .mejs-captions-selector ul li input {
-	clear: both;
-	float: left;
-	margin: 3px 3px 0 5px;
-}
-
-.mejs-controls .mejs-captions-button .mejs-captions-selector ul li label {
-	width: 55px;
-	float: left;
-	padding: 4px 0 0 0;
-	line-height: 15px;
-	font-family: helvetica, arial;
-	font-size: 10px;
-}
-
-.mejs-controls .mejs-captions-button .mejs-captions-translations {
-	font-size: 10px;
-	margin: 0 0 5px 0;
-}
-
-.mejs-chapters {
-	position: absolute;
-	top: 0;
-	left: 0;
-	-xborder-right: solid 1px #fff;
-	width: 10000px;
-	z-index: 1;
-}
-
-.mejs-chapters .mejs-chapter {
-	position: absolute;
-	float: left;
-	background: #222;
-	background: rgba(0, 0, 0, 0.7);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(50,50,50,0.7)), to(rgba(0,0,0,0.7)));
-	background: -webkit-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: -moz-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: -o-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: -ms-linear-gradient(top, rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	background: linear-gradient(rgba(50,50,50,0.7), rgba(0,0,0,0.7));
-	filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr=#323232,endColorstr=#000000);
-	overflow: hidden;
-	border: 0;
-}
-
-.mejs-chapters .mejs-chapter .mejs-chapter-block {
-	font-size: 11px;
-	color: #fff;
-	padding: 5px;
-	display: block;
-	border-right: solid 1px #333;
-	border-bottom: solid 1px #333;
-	cursor: pointer;
-}
-
-.mejs-chapters .mejs-chapter .mejs-chapter-block-last {
-	border-right: none;
-}
-
-.mejs-chapters .mejs-chapter .mejs-chapter-block:hover {
-	background: #666;
-	background: rgba(102,102,102, 0.7);
-	background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(102,102,102,0.7)), to(rgba(50,50,50,0.6)));
-	background: -webkit-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6));
-	background: -moz-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6));
-	background: -o-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6));
-	background: -ms-linear-gradient(top, rgba(102,102,102,0.7), rgba(50,50,50,0.6));
-	background: linear-gradient(rgba(102,102,102,0.7), rgba(50,50,50,0.6));
-	filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr=#666666,endColorstr=#323232);
-}
-
-.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-title {
-	font-size: 12px;
-	font-weight: bold;
-	display: block;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-	margin: 0 0 3px 0;
-	line-height: 12px;
-}
-
-.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-timespan {
-	font-size: 12px;
-	line-height: 12px;
-	margin: 3px 0 4px 0;
-	display: block;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-}
-
-.mejs-captions-layer {
-	position: absolute;
-	bottom: 0;
-	left: 0;
-	text-align:center;
-	line-height: 20px;
-	font-size: 16px;
-	color: #fff;
-}
-
-.mejs-captions-layer  a {
-	color: #fff;
-	text-decoration: underline;
-}
-
-.mejs-captions-layer[lang=ar] {
-	font-size: 20px;
-	font-weight: normal;
-}
-
-.mejs-captions-position {
-	position: absolute;
-	width: 100%;
-	bottom: 15px;
-	left: 0;
-}
-
-.mejs-captions-position-hover {
-	bottom: 35px;
-}
-
-.mejs-captions-text {
-	padding: 3px 5px;
-	background: url(background.png);
-	background: rgba(20, 20, 20, 0.5);
-	white-space: pre-wrap;
-}
-/* End: Track (Captions and Chapters) */
-
-/* Start: Error */
-.me-cannotplay {
-}
-
-.me-cannotplay a {
-	color: #fff;
-	font-weight: bold;
-}
-
-.me-cannotplay span {
-	padding: 15px;
-	display: block;
-}
-/* End: Error */
-
-
-/* Start: Loop */
-.mejs-controls .mejs-loop-off button {
-	background-position: -64px -16px;
-}
-
-.mejs-controls .mejs-loop-on button {
-	background-position: -64px 0;
-}
-
-/* End: Loop */
-
-/* Start: backlight */
-.mejs-controls .mejs-backlight-off button {
-	background-position: -80px -16px;
-}
-
-.mejs-controls .mejs-backlight-on button {
-	background-position: -80px 0;
-}
-/* End: backlight */
-
-/* Start: Picture Controls */
-.mejs-controls .mejs-picturecontrols-button {
-	background-position: -96px 0;
-}
-/* End: Picture Controls */
-
-
-/* context menu */
-.mejs-contextmenu {
-	position: absolute;
-	width: 150px;
-	padding: 10px;
-	border-radius: 4px;
-	top: 0;
-	left: 0;
-	background: #fff;
-	border: solid 1px #999;
-	z-index: 1001; /* make sure it shows on fullscreen */
-}
-.mejs-contextmenu .mejs-contextmenu-separator {
-	height: 1px;
-	font-size: 0;
-	margin: 5px 6px;
-	background: #333;
-}
-
-.mejs-contextmenu .mejs-contextmenu-item {
-	font-family: Helvetica, Arial;
-	font-size: 12px;
-	padding: 4px 6px;
-	cursor: pointer;
-	color: #333;
-}
-.mejs-contextmenu .mejs-contextmenu-item:hover {
-	background: #2C7C91;
-	color: #fff;
-}
-
-/* Start: Source Chooser */
-.mejs-controls .mejs-sourcechooser-button {
-	position: relative;
-}
-
-.mejs-controls .mejs-sourcechooser-button button {
-	background-position: -128px 0;
-}
-
-.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector {
-	visibility: hidden;
-	position: absolute;
-	bottom: 26px;
-	right: -10px;
-	width: 130px;
-	height: 100px;
-	background: url(background.png);
-	background: rgba(50,50,50,0.7);
-	border: solid 1px transparent;
-	padding: 10px;
-	overflow: hidden;
-	-webkit-border-radius: 0;
-	-moz-border-radius: 0;
-	border-radius: 0;
-}
-
-.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul {
-	margin: 0;
-	padding: 0;
-	display: block;
-	list-style-type: none !important;
-	overflow: hidden;
-}
-
-.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li {
-	margin: 0 0 6px 0;
-	padding: 0;
-	list-style-type: none !important;
-	display: block;
-	color: #fff;
-	overflow: hidden;
-}
-
-.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li input {
-	clear: both;
-	float: left;
-	margin: 3px 3px 0 5px;
-}
-
-.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li label {
-	width: 100px;
-	float: left;
-	padding: 4px 0 0 0;
-	line-height: 15px;
-	font-family: helvetica, arial;
-	font-size: 10px;
-}
-/* End: Source Chooser */
-
-/* Start: Postroll */
-.mejs-postroll-layer {
-	position: absolute;
-	bottom: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	background: url(background.png);
-	background: rgba(50,50,50,0.7);
-	z-index: 1000;
-	overflow: hidden;
-}
-.mejs-postroll-layer-content {
-	width: 100%;
-	height: 100%;
-}
-.mejs-postroll-close {
-	position: absolute;
-	right: 0;
-	top: 0;
-	background: url(background.png);
-	background: rgba(50,50,50,0.7);
-	color: #fff;
-	padding: 4px;
-	z-index: 100;
-	cursor: pointer;
-}
-/* End: Postroll */
-
-
-/* Start: Speed */
-div.mejs-speed-button {
-	width: 46px !important;
-	position: relative;
-}
-
-.mejs-controls .mejs-button.mejs-speed-button button {
-	background: transparent;
-	width: 36px;
-	font-size: 11px;
-	line-height: normal;
-	color: #ffffff;
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector {
-	display: none;
-	position: absolute;
-	top: -100px;
-	left: -10px;
-	width: 60px;
-	height: 100px;
-	background: url(background.png);
-	background: rgba(50, 50, 50, 0.7);
-	border: solid 1px transparent;
-	padding: 0;
-	overflow: hidden;
-	-webkit-border-radius: 0;
-	-moz-border-radius: 0;
-	border-radius: 0;
-}
-
-
-.mejs-controls .mejs-speed-button:hover > .mejs-speed-selector {
-	display: block;
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector ul li label.mejs-speed-selected {
-	color: rgba(33, 248, 248, 1);
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector ul {
-	margin: 0;
-	padding: 0;
-	display: block;
-	list-style-type: none !important;
-	overflow: hidden;
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector ul li {
-	margin: 0 0 6px 0;
-	padding: 0 10px;
-	list-style-type: none !important;
-	display: block;
-	color: #fff;
-	overflow: hidden;
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector ul li input {
-	clear: both;
-	float: left;
-	margin: 3px 3px 0 5px;
-	display: none;
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector ul li label {
-	width: 60px;
-	float: left;
-	padding: 4px 0 0 0;
-	line-height: 15px;
-	font-family: helvetica, arial;
-	font-size: 11.5px;
-	color: white;
-	margin-left: 5px;
-	cursor: pointer;
-}
-
-.mejs-controls .mejs-speed-button .mejs-speed-selector ul li:hover {
-	background-color: rgb(200, 200, 200) !important;
-	background-color: rgba(255,255,255,.4) !important;
-}
-/* End: Speed */
-
-/* Start: Jump Forward */
-
-.mejs-controls .mejs-button.mejs-jump-forward-button {
-	background: transparent url(jumpforward.png) no-repeat;
-	background-position: 3px 3px;
-}
-.mejs-controls .mejs-button.mejs-jump-forward-button button {
-	background: transparent;
-	font-size: 9px;
-	line-height: normal;
-	color: #ffffff;
-}
-
-/* End: Jump Forward */
-
-/* Start: Skip Back */
-
-.mejs-controls .mejs-button.mejs-skip-back-button {
-	background: transparent url(skipback.png) no-repeat;
-	background-position: 3px 3px;
-}
-.mejs-controls .mejs-button.mejs-skip-back-button button {
-	background: transparent;
-	font-size: 9px;
-	line-height: normal;
-	color: #ffffff;
-}
-
-/* End: Skip Back */
-
diff --git a/static/mediaelementjs/mep-feature-sourcechooser.js b/static/mediaelementjs/mep-feature-sourcechooser.js
deleted file mode 100644
index e13e755..0000000
--- a/static/mediaelementjs/mep-feature-sourcechooser.js
+++ /dev/null
@@ -1,93 +0,0 @@
-// Source Chooser Plugin
-(function($) {
-
-	$.extend(mejs.MepDefaults, {
-		sourcechooserText: 'Source Chooser'
-	});
-
-	$.extend(MediaElementPlayer.prototype, {
-		buildsourcechooser: function(player, controls, layers, media) {
-
-			var t = this;
-
-			player.sourcechooserButton =
-				$('<div class="mejs-button mejs-sourcechooser-button">'+
-					'<button type="button" aria-controls="' + t.id + '" title="' + t.options.sourcechooserText + '" aria-label="' + t.options.sourcechooserText + '"></button>'+
-					'<div class="mejs-sourcechooser-selector">'+
-						'<ul>'+
-						'</ul>'+
-					'</div>'+
-				'</div>')
-					.appendTo(controls)
-
-					// hover
-					.hover(function() {
-						$(this).find('.mejs-sourcechooser-selector').css('visibility','visible');
-					}, function() {
-						$(this).find('.mejs-sourcechooser-selector').css('visibility','hidden');
-					})
-
-					// handle clicks to the language radio buttons
-					.delegate('input[type=radio]', 'click', function() {
-						var src = this.value;
-
-						if (media.currentSrc != src) {
-							var currentTime = media.currentTime;
-							var paused = media.paused;
-							media.pause();
-							media.setSrc(src);
-
-							media.addEventListener('loadedmetadata', function(e) {
-								media.currentTime = currentTime;
-							}, true);
-
-							var canPlayAfterSourceSwitchHandler = function(e) {
-								if (!paused) {
-									media.play();
-								}
-								media.removeEventListener("canplay", canPlayAfterSourceSwitchHandler, true);
-							};
-							media.addEventListener('canplay', canPlayAfterSourceSwitchHandler, true);
-							media.load();
-						}
-				});
-
-			// add to list
-			for (var i in this.node.children) {
-				var src = this.node.children[i];
-				if (src.nodeName === 'SOURCE' && (media.canPlayType(src.type) == 'probably' || media.canPlayType(src.type) == 'maybe')) {
-					player.addSourceButton(src.src, src.title, src.type, media.src == src.src);
-				}
-			}
-
-		},
-
-		addSourceButton: function(src, label, type, isCurrent) {
-			var t = this;
-			if (label === '' || label == undefined) {
-				label = src;
-			}
-			type = type.split('/')[1];
-
-			t.sourcechooserButton.find('ul').append(
-				$('<li>'+
-					'<label for="' + t.id + '_sourcechooser_' + label + type + '">' +
-					'<input type="radio" name="' + t.id + '_sourcechooser" id="' + t.id + '_sourcechooser_' + label + type + '" value="' + src + '" ' + (isCurrent ? 'checked="checked"' : '') + ' />'+
-					label + ' (' + type + ')</label>'+
-				'</li>')
-			);
-
-			t.adjustSourcechooserBox();
-
-		},
-
-		adjustSourcechooserBox: function() {
-			var t = this;
-			// adjust the size of the outer box
-			t.sourcechooserButton.find('.mejs-sourcechooser-selector').height(
-				t.sourcechooserButton.find('.mejs-sourcechooser-selector ul').outerHeight(true)
-			);
-		}
-	});
-
-})(mejs.$);
diff --git a/static/mediaelementjs/silverlightmediaelement.xap b/static/mediaelementjs/silverlightmediaelement.xap
deleted file mode 100755
index 38a9cc490bf7e66037bd83e5c0ab7aad83e08942..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12459
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
ZU05IB&B_K+%*4RN(9XcXz-IvB0RYM+O@sgd

diff --git a/static/mediaelementjs/skipback.png b/static/mediaelementjs/skipback.png
deleted file mode 100644
index 04756f966d760e8e2728bb90fe8a420ecdc04ecb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4245
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
RQ(d64-qY33Wt~$(69DbXScCuo

diff --git a/static/style.css b/static/style.css
index 73d6832..e669b97 100644
--- a/static/style.css
+++ b/static/style.css
@@ -6,8 +6,6 @@
 }
 
 .table-top-aligned tr { vertical-align: top; }
-.mejs-controls label { font-weight: normal; margin-bottom: 0px;  }
-.mejs-speed-selector { top: -130px !important; height: 130px !important; }
 .footer {
 	position: fixed;
 	bottom: 0;
diff --git a/static/videojs/alt/video-js-cdn.css b/static/videojs/alt/video-js-cdn.css
new file mode 100644
index 0000000..64c7adc
--- /dev/null
+++ b/static/videojs/alt/video-js-cdn.css
@@ -0,0 +1,1295 @@
+.video-js .vjs-big-play-button:before, .video-js .vjs-control:before, .video-js .vjs-modal-dialog, .vjs-modal-dialog .vjs-modal-dialog-content {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%; }
+
+.video-js .vjs-big-play-button:before, .video-js .vjs-control:before {
+  text-align: center; }
+
+@font-face {
+  font-family: VideoJS;
+  src: url("//vjs.zencdn.net/font/1.5.1/VideoJS.eot?#iefix") format("eot"); }
+
+@font-face {
+  font-family: VideoJS;
+  src: url(data:application/font-woff;charset=utf-8;base64,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) format("woff"), url(data:application/x-font-ttf;charset=utf-8;base64,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FjY3PgE3LgEnIwYfAR4BFw4BBTM/ARUzESMGAyUVJwMchM2UWwgNq4JHrQgBAapUaAoJcWMBfiIhDiMrAQJLMB0BBAokNAIBPmMiIQ4iLAECSzAeAQUKJDQBP2MiIQ4iLAECSzAeAQUKJDQBAT75g+5B4arNLNIBJ44ByQL9BQ9mvYCKwA8FBQMDwwJVTGdzBf6VB8IHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvVJkAWUDDEf+tYP5AQAAAAEAAAAABiAGtgAbAAABBAADER4BFzMRITU2ADcWABcVIREzPgE3EQIAA4D+4v6FBwJ/X+D+1QYBJ97eAScG/tXgX38CB/6FBrUH/oX+4v32X38CAlWV3gEnBgb+2d6V/asCf18CCgEeAXsAAAAAEADGAAEAAAAAAAEABwAAAAEAAAAAAAIABwAHAAEAAAAAAAMABwAOAAEAAAAAAAQABwAVAAEAAAAAAAUACwAcAAEAAAAAAAYABwAnAAEAAAAAAAoAKwAuAAEAAAAAAAsAEwBZAAMAAQQJAAEADgBsAAMAAQQJAAIADgB6AAMAAQQJAAMADgCIAAMAAQQJAAQADgCWAAMAAQQJAAUAFgCkAAMAAQQJAAYADgC6AAMAAQQJAAoAVgDIAAMAAQQJAAsAJgEeVmlkZW9KU1JlZ3VsYXJWaWRlb0pTVmlkZW9KU1ZlcnNpb24gMS4wVmlkZW9KU0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAFYAaQBkAGUAbwBKAFMAUgBlAGcAdQBsAGEAcgBWAGkAZABlAG8ASgBTAFYAaQBkAGUAbwBKAFMAVgBlAHIAcwBpAG8AbgAgADEALgAwAFYAaQBkAGUAbwBKAFMARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgVhdWRpbwAAAAAA) format("truetype");
+  font-weight: normal;
+  font-style: normal; }
+
+.vjs-icon-play, .video-js .vjs-big-play-button, .video-js .vjs-play-control {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-play:before, .video-js .vjs-big-play-button:before, .video-js .vjs-play-control:before {
+    content: "\f101"; }
+
+.vjs-icon-play-circle {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-play-circle:before {
+    content: "\f102"; }
+
+.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing:before {
+    content: "\f103"; }
+
+.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0,
+.video-js .vjs-volume-menu-button.vjs-vol-0 {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0:before,
+  .video-js .vjs-volume-menu-button.vjs-vol-0:before {
+    content: "\f104"; }
+
+.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1,
+.video-js .vjs-volume-menu-button.vjs-vol-1 {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1:before,
+  .video-js .vjs-volume-menu-button.vjs-vol-1:before {
+    content: "\f105"; }
+
+.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2,
+.video-js .vjs-volume-menu-button.vjs-vol-2 {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2:before,
+  .video-js .vjs-volume-menu-button.vjs-vol-2:before {
+    content: "\f106"; }
+
+.vjs-icon-volume-high, .video-js .vjs-mute-control,
+.video-js .vjs-volume-menu-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-high:before, .video-js .vjs-mute-control:before,
+  .video-js .vjs-volume-menu-button:before {
+    content: "\f107"; }
+
+.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control:before {
+    content: "\f108"; }
+
+.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control:before {
+    content: "\f109"; }
+
+.vjs-icon-square {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-square:before {
+    content: "\f10a"; }
+
+.vjs-icon-spinner {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-spinner:before {
+    content: "\f10b"; }
+
+.vjs-icon-subtitles, .video-js .vjs-subtitles-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-subtitles:before, .video-js .vjs-subtitles-button:before {
+    content: "\f10c"; }
+
+.vjs-icon-captions, .video-js .vjs-captions-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-captions:before, .video-js .vjs-captions-button:before {
+    content: "\f10d"; }
+
+.vjs-icon-chapters, .video-js .vjs-chapters-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-chapters:before, .video-js .vjs-chapters-button:before {
+    content: "\f10e"; }
+
+.vjs-icon-share {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-share:before {
+    content: "\f10f"; }
+
+.vjs-icon-cog {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-cog:before {
+    content: "\f110"; }
+
+.vjs-icon-circle, .video-js .vjs-mouse-display, .video-js .vjs-play-progress, .video-js .vjs-volume-level {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-circle:before, .video-js .vjs-mouse-display:before, .video-js .vjs-play-progress:before, .video-js .vjs-volume-level:before {
+    content: "\f111"; }
+
+.vjs-icon-circle-outline {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-circle-outline:before {
+    content: "\f112"; }
+
+.vjs-icon-circle-inner-circle {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-circle-inner-circle:before {
+    content: "\f113"; }
+
+.vjs-icon-hd {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-hd:before {
+    content: "\f114"; }
+
+.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button:before {
+    content: "\f115"; }
+
+.vjs-icon-replay {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-replay:before {
+    content: "\f116"; }
+
+.vjs-icon-facebook {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-facebook:before {
+    content: "\f117"; }
+
+.vjs-icon-gplus {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-gplus:before {
+    content: "\f118"; }
+
+.vjs-icon-linkedin {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-linkedin:before {
+    content: "\f119"; }
+
+.vjs-icon-twitter {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-twitter:before {
+    content: "\f11a"; }
+
+.vjs-icon-tumblr {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-tumblr:before {
+    content: "\f11b"; }
+
+.vjs-icon-pinterest {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-pinterest:before {
+    content: "\f11c"; }
+
+.vjs-icon-audio-description, .video-js .vjs-descriptions-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-audio-description:before, .video-js .vjs-descriptions-button:before {
+    content: "\f11d"; }
+
+.vjs-icon-audio, .video-js .vjs-audio-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-audio:before, .video-js .vjs-audio-button:before {
+    content: "\f11e"; }
+
+.video-js {
+  display: block;
+  vertical-align: top;
+  box-sizing: border-box;
+  color: #fff;
+  background-color: #000;
+  position: relative;
+  padding: 0;
+  font-size: 10px;
+  line-height: 1;
+  font-weight: normal;
+  font-style: normal;
+  font-family: Arial, Helvetica, sans-serif;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none; }
+  .video-js:-moz-full-screen {
+    position: absolute; }
+  .video-js:-webkit-full-screen {
+    width: 100% !important;
+    height: 100% !important; }
+
+.video-js *,
+.video-js *:before,
+.video-js *:after {
+  box-sizing: inherit; }
+
+.video-js ul {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+  list-style-position: outside;
+  margin-left: 0;
+  margin-right: 0;
+  margin-top: 0;
+  margin-bottom: 0; }
+
+.video-js.vjs-fluid,
+.video-js.vjs-16-9,
+.video-js.vjs-4-3 {
+  width: 100%;
+  max-width: 100%;
+  height: 0; }
+
+.video-js.vjs-16-9 {
+  padding-top: 56.25%; }
+
+.video-js.vjs-4-3 {
+  padding-top: 75%; }
+
+.video-js.vjs-fill {
+  width: 100%;
+  height: 100%; }
+
+.video-js .vjs-tech {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%; }
+
+body.vjs-full-window {
+  padding: 0;
+  margin: 0;
+  height: 100%;
+  overflow-y: auto; }
+
+.vjs-full-window .video-js.vjs-fullscreen {
+  position: fixed;
+  overflow: hidden;
+  z-index: 1000;
+  left: 0;
+  top: 0;
+  bottom: 0;
+  right: 0; }
+
+.video-js.vjs-fullscreen {
+  width: 100% !important;
+  height: 100% !important;
+  padding-top: 0 !important; }
+
+.video-js.vjs-fullscreen.vjs-user-inactive {
+  cursor: none; }
+
+.vjs-hidden {
+  display: none !important; }
+
+.vjs-disabled {
+  opacity: 0.5;
+  cursor: default; }
+
+.video-js .vjs-offscreen {
+  height: 1px;
+  left: -9999px;
+  position: absolute;
+  top: 0;
+  width: 1px; }
+
+.vjs-lock-showing {
+  display: block !important;
+  opacity: 1;
+  visibility: visible; }
+
+.vjs-no-js {
+  padding: 20px;
+  color: #fff;
+  background-color: #000;
+  font-size: 18px;
+  font-family: Arial, Helvetica, sans-serif;
+  text-align: center;
+  width: 300px;
+  height: 150px;
+  margin: 0px auto; }
+
+.vjs-no-js a,
+.vjs-no-js a:visited {
+  color: #66A8CC; }
+
+.video-js .vjs-big-play-button {
+  font-size: 3em;
+  line-height: 1.5em;
+  height: 1.5em;
+  width: 3em;
+  display: block;
+  position: absolute;
+  top: 10px;
+  left: 10px;
+  padding: 0;
+  cursor: pointer;
+  opacity: 1;
+  border: 0.06666em solid #fff;
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.7);
+  -webkit-border-radius: 0.3em;
+  -moz-border-radius: 0.3em;
+  border-radius: 0.3em;
+  -webkit-transition: all 0.4s;
+  -moz-transition: all 0.4s;
+  -o-transition: all 0.4s;
+  transition: all 0.4s; }
+
+.vjs-big-play-centered .vjs-big-play-button {
+  top: 50%;
+  left: 50%;
+  margin-top: -0.75em;
+  margin-left: -1.5em; }
+
+.video-js:hover .vjs-big-play-button,
+.video-js .vjs-big-play-button:focus {
+  outline: 0;
+  border-color: #fff;
+  background-color: #73859f;
+  background-color: rgba(115, 133, 159, 0.5);
+  -webkit-transition: all 0s;
+  -moz-transition: all 0s;
+  -o-transition: all 0s;
+  transition: all 0s; }
+
+.vjs-controls-disabled .vjs-big-play-button,
+.vjs-has-started .vjs-big-play-button,
+.vjs-using-native-controls .vjs-big-play-button,
+.vjs-error .vjs-big-play-button {
+  display: none; }
+
+.video-js button {
+  background: none;
+  border: none;
+  color: inherit;
+  display: inline-block;
+  overflow: visible;
+  font-size: inherit;
+  line-height: inherit;
+  text-transform: none;
+  text-decoration: none;
+  transition: none;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none; }
+
+.video-js .vjs-control.vjs-close-button {
+  cursor: pointer;
+  height: 3em;
+  position: absolute;
+  right: 0;
+  top: 0.5em;
+  z-index: 2; }
+
+.vjs-menu-button {
+  cursor: pointer; }
+
+.vjs-menu-button.vjs-disabled {
+  cursor: default; }
+
+.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu {
+  display: none; }
+
+.vjs-menu .vjs-menu-content {
+  display: block;
+  padding: 0;
+  margin: 0;
+  overflow: auto;
+  font-family: Arial, Helvetica, sans-serif; }
+
+.vjs-scrubbing .vjs-menu-button:hover .vjs-menu {
+  display: none; }
+
+.vjs-menu li {
+  list-style: none;
+  margin: 0;
+  padding: 0.2em 0;
+  line-height: 1.4em;
+  font-size: 1.2em;
+  text-align: center;
+  text-transform: lowercase; }
+
+.vjs-menu li:focus,
+.vjs-menu li:hover {
+  outline: 0;
+  background-color: #73859f;
+  background-color: rgba(115, 133, 159, 0.5); }
+
+.vjs-menu li.vjs-selected,
+.vjs-menu li.vjs-selected:focus,
+.vjs-menu li.vjs-selected:hover {
+  background-color: #fff;
+  color: #2B333F; }
+
+.vjs-menu li.vjs-menu-title {
+  text-align: center;
+  text-transform: uppercase;
+  font-size: 1em;
+  line-height: 2em;
+  padding: 0;
+  margin: 0 0 0.3em 0;
+  font-weight: bold;
+  cursor: default; }
+
+.vjs-menu-button-popup .vjs-menu {
+  display: none;
+  position: absolute;
+  bottom: 0;
+  width: 10em;
+  left: -3em;
+  height: 0em;
+  margin-bottom: 1.5em;
+  border-top-color: rgba(43, 51, 63, 0.7); }
+
+.vjs-menu-button-popup .vjs-menu .vjs-menu-content {
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.7);
+  position: absolute;
+  width: 100%;
+  bottom: 1.5em;
+  max-height: 15em; }
+
+.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu,
+.vjs-menu-button-popup .vjs-menu.vjs-lock-showing {
+  display: block; }
+
+.video-js .vjs-menu-button-inline {
+  -webkit-transition: all 0.4s;
+  -moz-transition: all 0.4s;
+  -o-transition: all 0.4s;
+  transition: all 0.4s;
+  overflow: hidden; }
+
+.video-js .vjs-menu-button-inline:before {
+  width: 2.222222222em; }
+
+.video-js .vjs-menu-button-inline:hover,
+.video-js .vjs-menu-button-inline:focus,
+.video-js .vjs-menu-button-inline.vjs-slider-active,
+.video-js.vjs-no-flex .vjs-menu-button-inline {
+  width: 12em; }
+
+.video-js .vjs-menu-button-inline.vjs-slider-active {
+  -webkit-transition: none;
+  -moz-transition: none;
+  -o-transition: none;
+  transition: none; }
+
+.vjs-menu-button-inline .vjs-menu {
+  opacity: 0;
+  height: 100%;
+  width: auto;
+  position: absolute;
+  left: 4em;
+  top: 0;
+  padding: 0;
+  margin: 0;
+  -webkit-transition: all 0.4s;
+  -moz-transition: all 0.4s;
+  -o-transition: all 0.4s;
+  transition: all 0.4s; }
+
+.vjs-menu-button-inline:hover .vjs-menu,
+.vjs-menu-button-inline:focus .vjs-menu,
+.vjs-menu-button-inline.vjs-slider-active .vjs-menu {
+  display: block;
+  opacity: 1; }
+
+.vjs-no-flex .vjs-menu-button-inline .vjs-menu {
+  display: block;
+  opacity: 1;
+  position: relative;
+  width: auto; }
+
+.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,
+.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,
+.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu {
+  width: auto; }
+
+.vjs-menu-button-inline .vjs-menu-content {
+  width: auto;
+  height: 100%;
+  margin: 0;
+  overflow: hidden; }
+
+.video-js .vjs-control-bar {
+  display: none;
+  width: 100%;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 3.0em;
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.7); }
+
+.vjs-has-started .vjs-control-bar {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  visibility: visible;
+  opacity: 1;
+  -webkit-transition: visibility 0.1s, opacity 0.1s;
+  -moz-transition: visibility 0.1s, opacity 0.1s;
+  -o-transition: visibility 0.1s, opacity 0.1s;
+  transition: visibility 0.1s, opacity 0.1s; }
+
+.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
+  visibility: visible;
+  opacity: 0;
+  -webkit-transition: visibility 1s, opacity 1s;
+  -moz-transition: visibility 1s, opacity 1s;
+  -o-transition: visibility 1s, opacity 1s;
+  transition: visibility 1s, opacity 1s; }
+
+.vjs-controls-disabled .vjs-control-bar,
+.vjs-using-native-controls .vjs-control-bar,
+.vjs-error .vjs-control-bar {
+  display: none !important; }
+
+.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
+  opacity: 1;
+  visibility: visible; }
+
+.vjs-has-started.vjs-no-flex .vjs-control-bar {
+  display: table; }
+
+.video-js .vjs-control {
+  outline: none;
+  position: relative;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  height: 100%;
+  width: 4em;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+  .video-js .vjs-control:before {
+    font-size: 1.8em;
+    line-height: 1.67; }
+
+.video-js .vjs-control:focus:before,
+.video-js .vjs-control:hover:before,
+.video-js .vjs-control:focus {
+  text-shadow: 0em 0em 1em white; }
+
+.video-js .vjs-control-text {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px; }
+
+.vjs-no-flex .vjs-control {
+  display: table-cell;
+  vertical-align: middle; }
+
+.video-js .vjs-custom-control-spacer {
+  display: none; }
+
+.video-js .vjs-progress-control {
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+  min-width: 4em; }
+
+.vjs-live .vjs-progress-control {
+  display: none; }
+
+.video-js .vjs-progress-holder {
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto;
+  -webkit-transition: all 0.2s;
+  -moz-transition: all 0.2s;
+  -o-transition: all 0.2s;
+  transition: all 0.2s;
+  height: 0.3em; }
+
+.video-js .vjs-progress-control:hover .vjs-progress-holder {
+  font-size: 1.666666666666666666em; }
+
+/* If we let the font size grow as much as everything else, the current time tooltip ends up
+ ginormous. If you'd like to enable the current time tooltip all the time, this should be disabled
+ to avoid a weird hitch when you roll off the hover. */
+.video-js .vjs-progress-control:hover .vjs-time-tooltip,
+.video-js .vjs-progress-control:hover .vjs-mouse-display:after,
+.video-js .vjs-progress-control:hover .vjs-play-progress:after {
+  font-family: Arial, Helvetica, sans-serif;
+  visibility: visible;
+  font-size: 0.6em; }
+
+.video-js .vjs-progress-holder .vjs-play-progress,
+.video-js .vjs-progress-holder .vjs-load-progress,
+.video-js .vjs-progress-holder .vjs-tooltip-progress-bar,
+.video-js .vjs-progress-holder .vjs-load-progress div {
+  position: absolute;
+  display: block;
+  height: 0.3em;
+  margin: 0;
+  padding: 0;
+  width: 0;
+  left: 0;
+  top: 0; }
+
+.video-js .vjs-mouse-display:before {
+  display: none; }
+
+.video-js .vjs-play-progress {
+  background-color: #fff; }
+  .video-js .vjs-play-progress:before {
+    position: absolute;
+    top: -0.333333333333333em;
+    right: -0.5em;
+    font-size: 0.9em; }
+
+.video-js .vjs-time-tooltip,
+.video-js .vjs-mouse-display:after,
+.video-js .vjs-play-progress:after {
+  visibility: hidden;
+  pointer-events: none;
+  position: absolute;
+  top: -3.4em;
+  right: -1.9em;
+  font-size: 0.9em;
+  color: #000;
+  content: attr(data-current-time);
+  padding: 6px 8px 8px 8px;
+  background-color: #fff;
+  background-color: rgba(255, 255, 255, 0.8);
+  -webkit-border-radius: 0.3em;
+  -moz-border-radius: 0.3em;
+  border-radius: 0.3em; }
+
+.video-js .vjs-time-tooltip,
+.video-js .vjs-play-progress:before,
+.video-js .vjs-play-progress:after {
+  z-index: 1; }
+
+.video-js .vjs-progress-control .vjs-keep-tooltips-inside:after {
+  display: none; }
+
+.video-js .vjs-load-progress {
+  background: #bfc7d3;
+  background: rgba(115, 133, 159, 0.5); }
+
+.video-js .vjs-load-progress div {
+  background: white;
+  background: rgba(115, 133, 159, 0.75); }
+
+.video-js.vjs-no-flex .vjs-progress-control {
+  width: auto; }
+
+.video-js .vjs-time-tooltip {
+  display: inline-block;
+  height: 2.4em;
+  position: relative;
+  float: right;
+  right: -1.9em; }
+
+.vjs-tooltip-progress-bar {
+  visibility: hidden; }
+
+.video-js .vjs-progress-control .vjs-mouse-display {
+  display: none;
+  position: absolute;
+  width: 1px;
+  height: 100%;
+  background-color: #000;
+  z-index: 1; }
+
+.vjs-no-flex .vjs-progress-control .vjs-mouse-display {
+  z-index: 0; }
+
+.video-js .vjs-progress-control:hover .vjs-mouse-display {
+  display: block; }
+
+.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,
+.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display:after {
+  visibility: hidden;
+  opacity: 0;
+  -webkit-transition: visibility 1s, opacity 1s;
+  -moz-transition: visibility 1s, opacity 1s;
+  -o-transition: visibility 1s, opacity 1s;
+  transition: visibility 1s, opacity 1s; }
+
+.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display,
+.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display:after {
+  display: none; }
+
+.vjs-mouse-display .vjs-time-tooltip,
+.video-js .vjs-progress-control .vjs-mouse-display:after {
+  color: #fff;
+  background-color: #000;
+  background-color: rgba(0, 0, 0, 0.8); }
+
+.video-js .vjs-slider {
+  outline: 0;
+  position: relative;
+  cursor: pointer;
+  padding: 0;
+  margin: 0 0.45em 0 0.45em;
+  background-color: #73859f;
+  background-color: rgba(115, 133, 159, 0.5); }
+
+.video-js .vjs-slider:focus {
+  text-shadow: 0em 0em 1em white;
+  -webkit-box-shadow: 0 0 1em #fff;
+  -moz-box-shadow: 0 0 1em #fff;
+  box-shadow: 0 0 1em #fff; }
+
+.video-js .vjs-mute-control,
+.video-js .vjs-volume-menu-button {
+  cursor: pointer;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+
+.video-js .vjs-volume-control {
+  width: 5em;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center; }
+
+.video-js .vjs-volume-bar {
+  margin: 1.35em 0.45em; }
+
+.vjs-volume-bar.vjs-slider-horizontal {
+  width: 5em;
+  height: 0.3em; }
+
+.vjs-volume-bar.vjs-slider-vertical {
+  width: 0.3em;
+  height: 5em;
+  margin: 1.35em auto; }
+
+.video-js .vjs-volume-level {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  background-color: #fff; }
+  .video-js .vjs-volume-level:before {
+    position: absolute;
+    font-size: 0.9em; }
+
+.vjs-slider-vertical .vjs-volume-level {
+  width: 0.3em; }
+  .vjs-slider-vertical .vjs-volume-level:before {
+    top: -0.5em;
+    left: -0.3em; }
+
+.vjs-slider-horizontal .vjs-volume-level {
+  height: 0.3em; }
+  .vjs-slider-horizontal .vjs-volume-level:before {
+    top: -0.3em;
+    right: -0.5em; }
+
+.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level {
+  height: 100%; }
+
+.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level {
+  width: 100%; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu {
+  display: block;
+  width: 0;
+  height: 0;
+  border-top-color: transparent; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu {
+  left: 0.5em;
+  height: 8em; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu {
+  left: -2em; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content {
+  height: 0;
+  width: 0;
+  overflow-x: hidden;
+  overflow-y: hidden; }
+
+.vjs-volume-menu-button-vertical:hover .vjs-menu-content,
+.vjs-volume-menu-button-vertical:focus .vjs-menu-content,
+.vjs-volume-menu-button-vertical.vjs-slider-active .vjs-menu-content,
+.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content {
+  height: 8em;
+  width: 2.9em; }
+
+.vjs-volume-menu-button-horizontal:hover .vjs-menu-content,
+.vjs-volume-menu-button-horizontal:focus .vjs-menu-content,
+.vjs-volume-menu-button-horizontal .vjs-slider-active .vjs-menu-content,
+.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content {
+  height: 2.9em;
+  width: 8em; }
+
+.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content {
+  background-color: transparent !important; }
+
+.vjs-poster {
+  display: inline-block;
+  vertical-align: middle;
+  background-repeat: no-repeat;
+  background-position: 50% 50%;
+  background-size: contain;
+  background-color: #000000;
+  cursor: pointer;
+  margin: 0;
+  padding: 0;
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 100%; }
+
+.vjs-poster img {
+  display: block;
+  vertical-align: middle;
+  margin: 0 auto;
+  max-height: 100%;
+  padding: 0;
+  width: 100%; }
+
+.vjs-has-started .vjs-poster {
+  display: none; }
+
+.vjs-audio.vjs-has-started .vjs-poster {
+  display: block; }
+
+.vjs-controls-disabled .vjs-poster {
+  display: none; }
+
+.vjs-using-native-controls .vjs-poster {
+  display: none; }
+
+.video-js .vjs-live-control {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: flex-start;
+  -webkit-align-items: flex-start;
+  -ms-flex-align: flex-start;
+  align-items: flex-start;
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto;
+  font-size: 1em;
+  line-height: 3em; }
+
+.vjs-no-flex .vjs-live-control {
+  display: table-cell;
+  width: auto;
+  text-align: left; }
+
+.video-js .vjs-time-control {
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none;
+  font-size: 1em;
+  line-height: 3em;
+  min-width: 2em;
+  width: auto;
+  padding-left: 1em;
+  padding-right: 1em; }
+
+.vjs-live .vjs-time-control {
+  display: none; }
+
+.video-js .vjs-current-time,
+.vjs-no-flex .vjs-current-time {
+  display: none; }
+
+.video-js .vjs-duration,
+.vjs-no-flex .vjs-duration {
+  display: none; }
+
+.vjs-time-divider {
+  display: none;
+  line-height: 3em; }
+
+.vjs-live .vjs-time-divider {
+  display: none; }
+
+.video-js .vjs-play-control {
+  cursor: pointer;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+
+.vjs-text-track-display {
+  position: absolute;
+  bottom: 3em;
+  left: 0;
+  right: 0;
+  top: 0;
+  pointer-events: none; }
+
+.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {
+  bottom: 1em; }
+
+.video-js .vjs-text-track {
+  font-size: 1.4em;
+  text-align: center;
+  margin-bottom: 0.1em;
+  background-color: #000;
+  background-color: rgba(0, 0, 0, 0.5); }
+
+.vjs-subtitles {
+  color: #fff; }
+
+.vjs-captions {
+  color: #fc6; }
+
+.vjs-tt-cue {
+  display: block; }
+
+video::-webkit-media-text-track-display {
+  -moz-transform: translateY(-3em);
+  -ms-transform: translateY(-3em);
+  -o-transform: translateY(-3em);
+  -webkit-transform: translateY(-3em);
+  transform: translateY(-3em); }
+
+.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display {
+  -moz-transform: translateY(-1.5em);
+  -ms-transform: translateY(-1.5em);
+  -o-transform: translateY(-1.5em);
+  -webkit-transform: translateY(-1.5em);
+  transform: translateY(-1.5em); }
+
+.video-js .vjs-fullscreen-control {
+  cursor: pointer;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+
+.vjs-playback-rate .vjs-playback-rate-value {
+  font-size: 1.5em;
+  line-height: 2;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  text-align: center; }
+
+.vjs-playback-rate .vjs-menu {
+  width: 4em;
+  left: 0em; }
+
+.vjs-error .vjs-error-display .vjs-modal-dialog-content {
+  font-size: 1.4em;
+  text-align: center; }
+
+.vjs-error .vjs-error-display:before {
+  color: #fff;
+  content: 'X';
+  font-family: Arial, Helvetica, sans-serif;
+  font-size: 4em;
+  left: 0;
+  line-height: 1;
+  margin-top: -0.5em;
+  position: absolute;
+  text-shadow: 0.05em 0.05em 0.1em #000;
+  text-align: center;
+  top: 50%;
+  vertical-align: middle;
+  width: 100%; }
+
+.vjs-loading-spinner {
+  display: none;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin: -25px 0 0 -25px;
+  opacity: 0.85;
+  text-align: left;
+  border: 6px solid rgba(43, 51, 63, 0.7);
+  box-sizing: border-box;
+  background-clip: padding-box;
+  width: 50px;
+  height: 50px;
+  border-radius: 25px; }
+
+.vjs-seeking .vjs-loading-spinner,
+.vjs-waiting .vjs-loading-spinner {
+  display: block; }
+
+.vjs-loading-spinner:before,
+.vjs-loading-spinner:after {
+  content: "";
+  position: absolute;
+  margin: -6px;
+  box-sizing: inherit;
+  width: inherit;
+  height: inherit;
+  border-radius: inherit;
+  opacity: 1;
+  border: inherit;
+  border-color: transparent;
+  border-top-color: white; }
+
+.vjs-seeking .vjs-loading-spinner:before,
+.vjs-seeking .vjs-loading-spinner:after,
+.vjs-waiting .vjs-loading-spinner:before,
+.vjs-waiting .vjs-loading-spinner:after {
+  -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;
+  animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; }
+
+.vjs-seeking .vjs-loading-spinner:before,
+.vjs-waiting .vjs-loading-spinner:before {
+  border-top-color: white; }
+
+.vjs-seeking .vjs-loading-spinner:after,
+.vjs-waiting .vjs-loading-spinner:after {
+  border-top-color: white;
+  -webkit-animation-delay: 0.44s;
+  animation-delay: 0.44s; }
+
+@keyframes vjs-spinner-spin {
+  100% {
+    transform: rotate(360deg); } }
+
+@-webkit-keyframes vjs-spinner-spin {
+  100% {
+    -webkit-transform: rotate(360deg); } }
+
+@keyframes vjs-spinner-fade {
+  0% {
+    border-top-color: #73859f; }
+  20% {
+    border-top-color: #73859f; }
+  35% {
+    border-top-color: white; }
+  60% {
+    border-top-color: #73859f; }
+  100% {
+    border-top-color: #73859f; } }
+
+@-webkit-keyframes vjs-spinner-fade {
+  0% {
+    border-top-color: #73859f; }
+  20% {
+    border-top-color: #73859f; }
+  35% {
+    border-top-color: white; }
+  60% {
+    border-top-color: #73859f; }
+  100% {
+    border-top-color: #73859f; } }
+
+.vjs-chapters-button .vjs-menu ul {
+  width: 24em; }
+
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer {
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto; }
+
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer {
+  width: auto; }
+
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-audio-button {
+  display: none; }
+
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-menu-button,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-audio-button {
+  display: none; }
+
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button .vjs-audio-button {
+  display: none; }
+
+.vjs-caption-settings {
+  position: relative;
+  top: 1em;
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.75);
+  color: #fff;
+  margin: 0 auto;
+  padding: 0.5em;
+  height: 16em;
+  font-size: 12px;
+  width: 40em; }
+
+.vjs-caption-settings .vjs-tracksettings {
+  top: 0;
+  bottom: 1em;
+  left: 0;
+  right: 0;
+  position: absolute;
+  overflow: auto; }
+
+.vjs-caption-settings .vjs-tracksettings-colors,
+.vjs-caption-settings .vjs-tracksettings-font {
+  float: left; }
+
+.vjs-caption-settings .vjs-tracksettings-colors:after,
+.vjs-caption-settings .vjs-tracksettings-font:after,
+.vjs-caption-settings .vjs-tracksettings-controls:after {
+  clear: both; }
+
+.vjs-caption-settings .vjs-tracksettings-controls {
+  position: absolute;
+  bottom: 1em;
+  right: 1em; }
+
+.vjs-caption-settings .vjs-tracksetting {
+  margin: 5px;
+  padding: 3px;
+  min-height: 40px;
+  border: none; }
+
+.vjs-caption-settings .vjs-tracksetting label,
+.vjs-caption-settings .vjs-tracksetting legend {
+  display: block;
+  width: 100px;
+  margin-bottom: 5px; }
+
+.vjs-caption-settings .vjs-tracksetting span {
+  display: inline;
+  margin-left: 5px;
+  vertical-align: top;
+  float: right; }
+
+.vjs-caption-settings .vjs-tracksetting > div {
+  margin-bottom: 5px;
+  min-height: 20px; }
+
+.vjs-caption-settings .vjs-tracksetting > div:last-child {
+  margin-bottom: 0;
+  padding-bottom: 0;
+  min-height: 0; }
+
+.vjs-caption-settings label > input {
+  margin-right: 10px; }
+
+.vjs-caption-settings fieldset {
+  margin-top: 1em;
+  margin-left: .5em; }
+
+.vjs-caption-settings fieldset .vjs-label {
+  position: absolute;
+  clip: rect(1px 1px 1px 1px);
+  /* for Internet Explorer */
+  clip: rect(1px, 1px, 1px, 1px);
+  padding: 0;
+  border: 0;
+  height: 1px;
+  width: 1px;
+  overflow: hidden; }
+
+.vjs-caption-settings input[type="button"] {
+  width: 40px;
+  height: 40px; }
+
+.video-js .vjs-modal-dialog {
+  background: rgba(0, 0, 0, 0.8);
+  background: -webkit-linear-gradient(-90deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0));
+  background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); }
+
+.vjs-modal-dialog .vjs-modal-dialog-content {
+  font-size: 1.2em;
+  line-height: 1.5;
+  padding: 20px 24px;
+  z-index: 1; }
+
+@media print {
+  .video-js > *:not(.vjs-tech):not(.vjs-poster) {
+    visibility: hidden; } }
diff --git a/static/videojs/alt/video-js-cdn.min.css b/static/videojs/alt/video-js-cdn.min.css
new file mode 100644
index 0000000..8c203ba
--- /dev/null
+++ b/static/videojs/alt/video-js-cdn.min.css
@@ -0,0 +1 @@
+.video-js .vjs-big-play-button:before,.video-js .vjs-control:before,.video-js .vjs-modal-dialog,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button:before,.video-js .vjs-control:before{text-align:center}@font-face{font-family:VideoJS;src:url(//vjs.zencdn.net/font/1.5.1/VideoJS.eot?#iefix) format("eot")}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAA54AAoAAAAAFmgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAD4AAABWUZFeBWNtYXAAAAE0AAAAOgAAAUriMBC2Z2x5ZgAAAXAAAAouAAAPUFvx6AdoZWFkAAALoAAAACsAAAA2DIPpX2hoZWEAAAvMAAAAGAAAACQOogcgaG10eAAAC+QAAAAPAAAAfNkAAABsb2NhAAAL9AAAAEAAAABAMMg06m1heHAAAAw0AAAAHwAAACABMAB5bmFtZQAADFQAAAElAAACCtXH9aBwb3N0AAANfAAAAPwAAAGBZkSN43icY2BkZ2CcwMDKwMFSyPKMgYHhF4RmjmEIZzzHwMDEwMrMgBUEpLmmMDh8ZPwoxw7iLmSHCDOCCADvEAo+AAB4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGD7K/f8PUvCREUTzM0DVAwEjG8OIBwCPdwbVAAB4nI1Xe1CU1xX/zv1eLItLln0JwrIfC7sJGET2hRJ2N1GUoBJE8AESQEEhmBHjaB7UuBMTO4GMaSu7aY3RNlOdRPNqO2pqRmuTaSZtR6JJILUZk00a/4imjpmiecB303O/XUgMJOPufvd+99xzzz33nN855y4HHH7EfrGfIxwHRiANvF/sH71I9BzHszmpW+rGOQOXxXE6YhI4PoMT8zkT4cDFuf1cwMrZJI5cglM0HKVv0MaUFDgIFfg9mJJCG+kbKn1JkqBOVaFOkuhLpARq8fu0Nnc9/zdvfY9PxXW4PdH0C6N+PCejhorxFjAqRjgFRXSINEARbBGsoxcFK7IJmr4OycFJnInL59zIXwxui80fkGRbEHyosMWaATJKUfCskmwJQsAWANkmnIGOhlf514h7U8HNIv3owoHB0WMt0Eb3sx0guLi5pq/8Ny1q6969fKR9X9GBV6dPv6dp04K99SOwtmyPl47ApRa6n4ZpP1yjr5fn7MmYP/vXLUJs715UguklHBaHOZHZmG1N9FAIW2mf0MqWCIdo/8RZ1yGfxKUldDcGIbFA7ICO+vqOMSPTh/ZrSqgHi/bB/O8E8Mnzp+M+acxfpsTShBwej26TiGxBn7m4eEIO+Rueu6Hj+IFBnh88cAEUEQ//nVLx5C7kf+yIR47QEe+eMlhz9SqsGbe3hh2R03NGzoY6O42Kz8l7fB6fAk6LYnTyFo/FYyT6GGyNx2Jx2sdH4rA1Fo/HyCXaFyOp8dhYBCfJb2NIn1ImE6CYNGmgSTb52DawJR6jfXEmDU4xyTEmpgHHOIStoxfjSGdkbsK2w2jbdMQG4sgAstEONgURYCwGHhEhhscioQaAhhCf7McifEQc0l6+mxj9nI+gmSdiQ0Zbm7gZnIO7GSMEXG6UDAVocxAV8GcEXCKg1a02RcTtwANWRGIAyElor6n/+ZU2yOB3+T77Hb1MLqhn4KHVnQBjJnqe9QZSon6Kc5DxAD2vMdPL/BXSmQGwspa67z9wLUjdi9TN7QC7lyyBr9rpt7uXVC1CMpyjKRoXnGPHTuiaPLsNdc2dbAFQLAooPkXEh33FodHl4XpC6sPCIa0ftUIhHSYXVSu5iME+DIXsbZJ51BeidCgajcai43jU9nVzoSn2dPqcFvSoxSzJzgRKAx47WMRxOrIj3Wf0+hndxhJTiOkSEqxar3b3RKM9hY64oxBA64ieURLvCfpkDb8siBdUJ1bgT+urJ5PGfewQrmm5R5+0HmfyIPySD7OYkT0WxRePah8oEiyjlxIP74thVoRTURpmL6QhGuWS+QDjdANXjIM8SQa/1w128ODx0Qp4aLMNg9+JL3joUn8AMxW+aLNiuKjarn4uyyTdXjOzZTsh21uwldUvJoYza+zELALfu3p1L8/3krtyZ0Ag058J3hxHghvbGZn0dHZy6Mim/7Blre4lpHd1c28yVqRViO153F2oIWoXCIKbL4Z0cM1iaQn9mI5KuV2SzEvWXJDMNtkANpMdQoDDhIdD4A/YrP6Aye9ysxyE+uOEAcTDorgvVZJjcua043PnZ/PmdDqcbibZlXOOT8uSo7Kof0YUn9GL+Jo17ficymxiTofC6znUso0DhAxs1Fo+kF+d36vLmgZ8mk5cdGv2mwYj5k3Dm9m3LhJ1aVRNm6HrTbLgYAoWXDhDd/u4PGy5CT+xGMdiaBovewUCF/1BiWNljI9MLn7jeScpg+WyH6mfU62eVDql7hsrmvx1ezp/YldE2LhjbkiDnAn8tGy/MW3IXRMYJduvq9HpmIcKuFt+JCtgdGEGKAcF6UacVwIYbVPGfw/+YuNBS4cx/CUHcnyfc+wRDMtTr72mMSBjT/yn/GKSdeDWQUCH6Xoqq5R10RE60gV6erUL0iCti16d0hZjxut4QI/rEpgSh6WjnJXdBXRg1GKCucGJPtFqM27aD1tOqqKonsQ2KsFSSmEpmvRlsR+TcD9OFwrqXxIclL4sJTnGMSuG8KpkZvKdeVIOKDyWSyPLV16/p1QMPbP8NihwUzr47bdnXtwtjdCvqqpO0H+pOvIl3Pzv46e5CT/tQjklXCXXym1AaWY7bzHLkuDMc7ldKCvgxzLn8wYkJLBhEDyK7MT8bTbwbkxbfp+3mKAGsmTBpabSIEECzMIcQlzOPAMKsxMs7uhsnxPLuofPDTc1hkuq6MX9j16YU7CqegcYHbmWYuvAP6tCS97tgWf7dlQvnl25YPavXLVZvrzQPeHCpZmzzEUVq/xzu5sChnSTPTW7oOYmh69z4zL/gk3b+O6hoa733uviP82vnFcbqWlc9tDmZa23LVzaV1yXURi+JX+28NeBuj3+O8IrQ080Vm1eWB4OKjPmrJu7c1udWynvKF6/vs479lSW9+5gZkn+dKfellNGDPllzeULustz+A0bPvhgw7lkvEUwn/N4Ty7U7nhGsEpFkOfy+kutbOh1JQxhVDJumoW11hnkPThznh6FFlhfT+ra1x9sF56kx5YuDzVY9PQYAYA7iblw4frQ4TPCk2MK/xGU3rlmze62trHz6lsko+v+So/do74PT8KVkpJfOErKcv8znrMGsHTNxoEkWy1mYgDB6XBbPaWsuiS6CryGaL6zCjaXBgvtkuyXBua1wOKnh+k7L9AvPnYWffxK18FcJbuosGf3/Jo7amY+CE1vppzY+UTrva0FXc1i55pKQ/YjVL187N5fCn1kW5uot/1hi+DiZ+5atnJR9E+prvydJ9ZZ5mwOpU5gM4KYysMBQ71UzPuMTl9QQOyUo5nwioeYCPjFklrbK6s6X+ypUZ6rum9+CZYzWRiBJfSP0xzzSmrg7f86g0DKVj/wwFzieD9rRfPGFbeKMl05pn5j9/rsQJJ2iEgRrpohlyBo3f4QK7Kl+EcAYZgAoNVmZWXK704YAa3FwBxgSGUOs5htvGRz4Sgj3yFkSJFBuv/sxu5yk998T8WDJzvv/2RX19HtTUW1S+wpKRKRjJ6zzz/1/OPdFdWGlAKbvzS4PHOtURikg9AGz0LbIB85S/cPOpoXvuue8/iV2H1vPTy3ddvOeZ37HGmO3OmSzVzR+NS53+84dHlFhXPLqtzSO+5ruHM2vXtBdxP87LOzKAD359j/INYIbyPabIi3Cq6Wa+SaGe78diIzu7qcblcAa6/fJRvNopXFJnO+U9KKM5bqH5LM0iQSVmpPCPDu7ZT4Aoubz3709EBTyrTDjyx8MQXgUH1nqm7TWng4TzE4i4AsKskBITXfSyC4Fkl5MxnJDiKSIDSJAsGvd1y+/eNDp2e+A+5d8HeiiunrTkT6TqWLIs+/QRoWr98s0qj8uuzLuS22Ytufg3rdTaHn1m46sfgGKHXt0MGnLaRHdnwN37tvHcWKo2V6lnPxL4UvUQcRdOzmZSQs8X5CH5OxXMXpkATuDz8Et0SH4uyCRR+TjmBDP1GvsVrWEGVzEj33YVQ9jAtIKpqsl/s/0xrocwAAeJxjYGRgYADig3cEzsTz23xl4GZnAIHLRucNkWl2BrA4BwMTiAIAF4IITwB4nGNgZGBgZwCChWASxGZkQAXyABOUANh4nGNnYGBgHyAMADa8ANoAAAAAAAAOAFAAZgCyAMYA5gEeAUgBdAGcAfICLgKOAroDCgOOA7AD6gQ4BHwEuAToBQwFogXoBjYGbAbaB3IHqHicY2BkYGCQZ8hlYGcAASYg5gJCBob/YD4DABbVAaoAeJxdkE1qg0AYhl8Tk9AIoVDaVSmzahcF87PMARLIMoFAl0ZHY1BHdBJIT9AT9AQ9RQ9Qeqy+yteNMzDzfM+88w0K4BY/cNAMB6N2bUaPPBLukybCLvleeAAPj8JD+hfhMV7hC3u4wxs7OO4NzQSZcI/8Ltwnfwi75E/hAR7wJTyk/xYeY49fYQ/PztM+jbTZ7LY6OWdBJdX/pqs6NYWa+zMxa13oKrA6Uoerqi/JwtpYxZXJ1coUVmeZUWVlTjq0/tHacjmdxuL90OR8O0UEDYMNdtiSEpz5XQGqzlm30kzUdAYFFOb8R7NOZk0q2lwAyz1i7oAr1xoXvrOgtYhZx8wY5KRV269JZ5yGpmzPTjQhvY9je6vEElPOuJP3mWKnP5M3V+YAAAB4nG2P2XLCMAxFfYFspGUp3Te+IB9lHJF4cOzUS2n/voaEGR6qB+lKo+WITdhga/a/bRnDBFPMkCBFhhwF5ihxg1sssMQKa9xhg3s84BFPeMYLXvGGd3zgE9tZr/hveXKVkFYoSnoeHJXfRoWOqi54mo9ameNFdrK+dLSyaVf7oJQTlkhXpD3Z5XXhR/rUfQVuKXO91Jps4cLOS6/I5YL3XhodRRsVWZe4NnZOhWnSAWgxhMoEr6SmzZieF43Mk7ZOBdeCVGrp9Eu+54J2xhySplfB5XHwQLXUmT9KH6+kPnQ7ZYuIEzNyfs1DLU1VU4SWZ6LkXGHsD1ZKbMw=) format("woff"),url(data:application/x-font-ttf;charset=utf-8;base64,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FjY3PgE3LgEnIwYfAR4BFw4BBTM/ARUzESMGAyUVJwMchM2UWwgNq4JHrQgBAapUaAoJcWMBfiIhDiMrAQJLMB0BBAokNAIBPmMiIQ4iLAECSzAeAQUKJDQBP2MiIQ4iLAECSzAeAQUKJDQBAT75g+5B4arNLNIBJ44ByQL9BQ9mvYCKwA8FBQMDwwJVTGdzBf6VB8IHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvVJkAWUDDEf+tYP5AQAAAAEAAAAABiAGtgAbAAABBAADER4BFzMRITU2ADcWABcVIREzPgE3EQIAA4D+4v6FBwJ/X+D+1QYBJ97eAScG/tXgX38CB/6FBrUH/oX+4v32X38CAlWV3gEnBgb+2d6V/asCf18CCgEeAXsAAAAAEADGAAEAAAAAAAEABwAAAAEAAAAAAAIABwAHAAEAAAAAAAMABwAOAAEAAAAAAAQABwAVAAEAAAAAAAUACwAcAAEAAAAAAAYABwAnAAEAAAAAAAoAKwAuAAEAAAAAAAsAEwBZAAMAAQQJAAEADgBsAAMAAQQJAAIADgB6AAMAAQQJAAMADgCIAAMAAQQJAAQADgCWAAMAAQQJAAUAFgCkAAMAAQQJAAYADgC6AAMAAQQJAAoAVgDIAAMAAQQJAAsAJgEeVmlkZW9KU1JlZ3VsYXJWaWRlb0pTVmlkZW9KU1ZlcnNpb24gMS4wVmlkZW9KU0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAFYAaQBkAGUAbwBKAFMAUgBlAGcAdQBsAGEAcgBWAGkAZABlAG8ASgBTAFYAaQBkAGUAbwBKAFMAVgBlAHIAcwBpAG8AbgAgADEALgAwAFYAaQBkAGUAbwBKAFMARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgVhdWRpbwAAAAAA) format("truetype");font-weight:400;font-style:normal}.vjs-icon-play,.video-js .vjs-big-play-button,.video-js .vjs-play-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play:before,.video-js .vjs-big-play-button:before,.video-js .vjs-play-control:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing:before{content:"\f103"}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0,.video-js .vjs-volume-menu-button.vjs-vol-0{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0:before,.video-js .vjs-volume-menu-button.vjs-vol-0:before{content:"\f104"}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1,.video-js .vjs-volume-menu-button.vjs-vol-1{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1:before,.video-js .vjs-volume-menu-button.vjs-vol-1:before{content:"\f105"}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2,.video-js .vjs-volume-menu-button.vjs-vol-2{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2:before,.video-js .vjs-volume-menu-button.vjs-vol-2:before{content:"\f106"}.vjs-icon-volume-high,.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control:before,.video-js .vjs-volume-menu-button:before{content:"\f107"}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control:before{content:"\f108"}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\f10b"}.vjs-icon-subtitles,.video-js .vjs-subtitles-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subtitles-button:before{content:"\f10c"}.vjs-icon-captions,.video-js .vjs-captions-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-captions:before,.video-js .vjs-captions-button:before{content:"\f10d"}.vjs-icon-chapters,.video-js .vjs-chapters-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\f110"}.vjs-icon-circle,.video-js .vjs-mouse-display,.video-js .vjs-play-progress,.video-js .vjs-volume-level{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle:before,.video-js .vjs-mouse-display:before,.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\f114"}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button:before{content:"\f115"}.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\f11c"}.vjs-icon-audio-description,.video-js .vjs-descriptions-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button:before{content:"\f11d"}.vjs-icon-audio,.video-js .vjs-audio-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio:before,.video-js .vjs-audio-button:before{content:"\f11e"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js *,.video-js :before,.video-js :after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen{width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66A8CC}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.5em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2B333F;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.75em;margin-left:-1.5em}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.video-js button{background:0 0;border:0;color:inherit;display:inline-block;overflow:visible;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;overflow:auto;font-family:Arial,Helvetica,sans-serif}.vjs-scrubbing .vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li:focus,.vjs-menu li:hover{outline:0;background-color:#73859f;background-color:rgba(115,133,159,.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2B333F}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2B333F;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.video-js .vjs-menu-button-inline.vjs-slider-active{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2B333F;background-color:rgba(43,51,63,.7)}.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{outline:0;position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-control:before{font-size:1.8em;line-height:1.67}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0 0 1em #fff}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-width:4em}.vjs-live .vjs-progress-control{display:none}.video-js .vjs-progress-holder{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.666666666666666666em}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-mouse-display:after,.video-js .vjs-progress-control:hover .vjs-play-progress:after{font-family:Arial,Helvetica,sans-serif;visibility:visible;font-size:.6em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-tooltip-progress-bar,.video-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:.3em;margin:0;padding:0;width:0;left:0;top:0}.video-js .vjs-mouse-display:before{display:none}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{position:absolute;top:-.333333333333333em;right:-.5em;font-size:.9em}.video-js .vjs-time-tooltip,.video-js .vjs-mouse-display:after,.video-js .vjs-play-progress:after{visibility:hidden;pointer-events:none;position:absolute;top:-3.4em;right:-1.9em;font-size:.9em;color:#000;content:attr(data-current-time);padding:6px 8px 8px;background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-time-tooltip,.video-js .vjs-play-progress:before,.video-js .vjs-play-progress:after{z-index:1}.video-js .vjs-progress-control .vjs-keep-tooltips-inside:after{display:none}.video-js .vjs-load-progress{background:#bfc7d3;background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:#fff;background:rgba(115,133,159,.75)}.video-js.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-time-tooltip{display:inline-block;height:2.4em;position:relative;float:right;right:-1.9em}.vjs-tooltip-progress-bar{visibility:hidden}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display:after{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display:after{display:none}.vjs-mouse-display .vjs-time-tooltip,.video-js .vjs-progress-control .vjs-mouse-display:after{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;margin:0 .45em;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-volume-control{width:5em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu{left:.5em;height:8em}.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu{left:-2em}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content{height:0;width:0;overflow-x:hidden;overflow-y:hidden}.vjs-volume-menu-button-vertical:hover .vjs-menu-content,.vjs-volume-menu-button-vertical:focus .vjs-menu-content,.vjs-volume-menu-button-vertical.vjs-slider-active .vjs-menu-content,.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content{height:8em;width:2.9em}.vjs-volume-menu-button-horizontal:hover .vjs-menu-content,.vjs-volume-menu-button-horizontal:focus .vjs-menu-content,.vjs-volume-menu-button-horizontal .vjs-slider-active .vjs-menu-content,.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content{height:2.9em;width:8em}.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content{background-color:transparent!important}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-poster img{display:block;vertical-align:middle;margin:0 auto;max-height:100%;padding:0;width:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-controls-disabled .vjs-poster{display:none}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js .vjs-time-control{-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em;background-color:#000;background-color:rgba(0,0,0,.5)}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-moz-transform:translateY(-3em);-ms-transform:translateY(-3em);-o-transform:translateY(-3em);-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-moz-transform:translateY(-1.5em);-ms-transform:translateY(-1.5em);-o-transform:translateY(-1.5em);-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-fullscreen-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-audio-button{display:none}.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-menu-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-audio-button{display:none}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button .vjs-audio-button{display:none}.vjs-caption-settings{position:relative;top:1em;background-color:#2B333F;background-color:rgba(43,51,63,.75);color:#fff;margin:0 auto;padding:.5em;height:16em;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:1em;left:0;right:0;position:absolute;overflow:auto}.vjs-caption-settings .vjs-tracksettings-colors,.vjs-caption-settings .vjs-tracksettings-font{float:left}.vjs-caption-settings .vjs-tracksettings-colors:after,.vjs-caption-settings .vjs-tracksettings-font:after,.vjs-caption-settings .vjs-tracksettings-controls:after{clear:both}.vjs-caption-settings .vjs-tracksettings-controls{position:absolute;bottom:1em;right:1em}.vjs-caption-settings .vjs-tracksetting{margin:5px;padding:3px;min-height:40px;border:0}.vjs-caption-settings .vjs-tracksetting label,.vjs-caption-settings .vjs-tracksetting legend{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px;vertical-align:top;float:right}.vjs-caption-settings .vjs-tracksetting>div{margin-bottom:5px;min-height:20px}.vjs-caption-settings .vjs-tracksetting>div:last-child{margin-bottom:0;padding-bottom:0;min-height:0}.vjs-caption-settings label>input{margin-right:10px}.vjs-caption-settings fieldset{margin-top:1em;margin-left:.5em}.vjs-caption-settings fieldset .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-caption-settings input[type=button]{width:40px;height:40px}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-linear-gradient(-90deg,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0))}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}
\ No newline at end of file
diff --git a/static/videojs/alt/video.novtt.js b/static/videojs/alt/video.novtt.js
new file mode 100644
index 0000000..3bc71dc
--- /dev/null
+++ b/static/videojs/alt/video.novtt.js
@@ -0,0 +1,22992 @@
+/**
+ * @license
+ * Video.js 5.12.1 <http://videojs.com/>
+ * Copyright Brightcove, Inc. <https://www.brightcove.com/>
+ * Available under Apache License Version 2.0
+ * <https://github.com/videojs/video.js/blob/master/LICENSE>
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.videojs = f()}})(function(){var define,module,exports;return (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})({1:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('./button.js');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('./component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file big-play-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Initial play button. Shows before the video has played. The hiding of the
+ * big play button is done via CSS and player states.
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends Button
+ * @class BigPlayButton
+ */
+var BigPlayButton = function (_Button) {
+  _inherits(BigPlayButton, _Button);
+
+  function BigPlayButton(player, options) {
+    _classCallCheck(this, BigPlayButton);
+
+    return _possibleConstructorReturn(this, _Button.call(this, player, options));
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  BigPlayButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-big-play-button';
+  };
+
+  /**
+   * Handles click for play
+   *
+   * @method handleClick
+   */
+
+
+  BigPlayButton.prototype.handleClick = function handleClick() {
+    this.player_.play();
+  };
+
+  return BigPlayButton;
+}(_button2['default']);
+
+BigPlayButton.prototype.controlText_ = 'Play Video';
+
+_component2['default'].registerComponent('BigPlayButton', BigPlayButton);
+exports['default'] = BigPlayButton;
+
+},{"./button.js":2,"./component.js":5}],2:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('./clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Base class for all buttons
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends ClickableComponent
+ * @class Button
+ */
+var Button = function (_ClickableComponent) {
+  _inherits(Button, _ClickableComponent);
+
+  function Button(player, options) {
+    _classCallCheck(this, Button);
+
+    return _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String=} type Element's node type. e.g. 'div'
+   * @param {Object=} props An object of properties that should be set on the element
+   * @param {Object=} attributes An object of attributes that should be set on the element
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Button.prototype.createEl = function createEl() {
+    var tag = arguments.length <= 0 || arguments[0] === undefined ? 'button' : arguments[0];
+    var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+    props = (0, _object2['default'])({
+      className: this.buildCSSClass()
+    }, props);
+
+    if (tag !== 'button') {
+      _log2['default'].warn('Creating a Button with an HTML element of ' + tag + ' is deprecated; use ClickableComponent instead.');
+
+      // Add properties for clickable element which is not a native HTML button
+      props = (0, _object2['default'])({
+        tabIndex: 0
+      }, props);
+
+      // Add ARIA attributes for clickable element which is not a native HTML button
+      attributes = (0, _object2['default'])({
+        role: 'button'
+      }, attributes);
+    }
+
+    // Add attributes for button element
+    attributes = (0, _object2['default'])({
+
+      // Necessary since the default button type is "submit"
+      'type': 'button',
+
+      // let the screen reader user know that the text of the button may change
+      'aria-live': 'polite'
+    }, attributes);
+
+    var el = _component2['default'].prototype.createEl.call(this, tag, props, attributes);
+
+    this.createControlTextEl(el);
+
+    return el;
+  };
+
+  /**
+   * Adds a child component inside this button
+   *
+   * @param {String|Component} child The class name or instance of a child to add
+   * @param {Object=} options Options, including options to be passed to children of the child.
+   * @return {Component} The child component (created by this process if a string was used)
+   * @deprecated
+   * @method addChild
+   */
+
+
+  Button.prototype.addChild = function addChild(child) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    var className = this.constructor.name;
+
+    _log2['default'].warn('Adding an actionable (user controllable) child to a Button (' + className + ') is not supported; use a ClickableComponent instead.');
+
+    // Avoid the error message generated by ClickableComponent's addChild method
+    return _component2['default'].prototype.addChild.call(this, child, options);
+  };
+
+  /**
+   * Handle KeyPress (document level) - Extend with specific functionality for button
+   *
+   * @method handleKeyPress
+   */
+
+
+  Button.prototype.handleKeyPress = function handleKeyPress(event) {
+
+    // Ignore Space (32) or Enter (13) key operation, which is handled by the browser for a button.
+    if (event.which === 32 || event.which === 13) {
+      return;
+    }
+
+    // Pass keypress handling up for unsupported keys
+    _ClickableComponent.prototype.handleKeyPress.call(this, event);
+  };
+
+  return Button;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('Button', Button);
+exports['default'] = Button;
+
+},{"./clickable-component.js":3,"./component":5,"./utils/log.js":85,"object.assign":136}],3:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Clickable Component which is clickable or keyboard actionable, but is not a native HTML button
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends Component
+ * @class ClickableComponent
+ */
+var ClickableComponent = function (_Component) {
+  _inherits(ClickableComponent, _Component);
+
+  function ClickableComponent(player, options) {
+    _classCallCheck(this, ClickableComponent);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.emitTapEvents();
+
+    _this.on('tap', _this.handleClick);
+    _this.on('click', _this.handleClick);
+    _this.on('focus', _this.handleFocus);
+    _this.on('blur', _this.handleBlur);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String=} type Element's node type. e.g. 'div'
+   * @param {Object=} props An object of properties that should be set on the element
+   * @param {Object=} attributes An object of attributes that should be set on the element
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  ClickableComponent.prototype.createEl = function createEl() {
+    var tag = arguments.length <= 0 || arguments[0] === undefined ? 'div' : arguments[0];
+    var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+    props = (0, _object2['default'])({
+      className: this.buildCSSClass(),
+      tabIndex: 0
+    }, props);
+
+    if (tag === 'button') {
+      _log2['default'].error('Creating a ClickableComponent with an HTML element of ' + tag + ' is not supported; use a Button instead.');
+    }
+
+    // Add ARIA attributes for clickable element which is not a native HTML button
+    attributes = (0, _object2['default'])({
+      'role': 'button',
+
+      // let the screen reader user know that the text of the element may change
+      'aria-live': 'polite'
+    }, attributes);
+
+    var el = _Component.prototype.createEl.call(this, tag, props, attributes);
+
+    this.createControlTextEl(el);
+
+    return el;
+  };
+
+  /**
+   * create control text
+   *
+   * @param {Element} el Parent element for the control text
+   * @return {Element}
+   * @method controlText
+   */
+
+
+  ClickableComponent.prototype.createControlTextEl = function createControlTextEl(el) {
+    this.controlTextEl_ = Dom.createEl('span', {
+      className: 'vjs-control-text'
+    });
+
+    if (el) {
+      el.appendChild(this.controlTextEl_);
+    }
+
+    this.controlText(this.controlText_, el);
+
+    return this.controlTextEl_;
+  };
+
+  /**
+   * Controls text - both request and localize
+   *
+   * @param {String}  text Text for element
+   * @param {Element=} el Element to set the title on
+   * @return {String}
+   * @method controlText
+   */
+
+
+  ClickableComponent.prototype.controlText = function controlText(text) {
+    var el = arguments.length <= 1 || arguments[1] === undefined ? this.el() : arguments[1];
+
+    if (!text) {
+      return this.controlText_ || 'Need Text';
+    }
+
+    var localizedText = this.localize(text);
+
+    this.controlText_ = text;
+    this.controlTextEl_.innerHTML = localizedText;
+    el.setAttribute('title', localizedText);
+
+    return this;
+  };
+
+  /**
+   * Allows sub components to stack CSS class names
+   *
+   * @return {String}
+   * @method buildCSSClass
+   */
+
+
+  ClickableComponent.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-control vjs-button ' + _Component.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Adds a child component inside this clickable-component
+   *
+   * @param {String|Component} child The class name or instance of a child to add
+   * @param {Object=} options Options, including options to be passed to children of the child.
+   * @return {Component} The child component (created by this process if a string was used)
+   * @method addChild
+   */
+
+
+  ClickableComponent.prototype.addChild = function addChild(child) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    // TODO: Fix adding an actionable child to a ClickableComponent; currently
+    // it will cause issues with assistive technology (e.g. screen readers)
+    // which support ARIA, since an element with role="button" cannot have
+    // actionable child elements.
+
+    // let className = this.constructor.name;
+    // 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.`);
+
+    return _Component.prototype.addChild.call(this, child, options);
+  };
+
+  /**
+   * Enable the component element
+   *
+   * @return {Component}
+   * @method enable
+   */
+
+
+  ClickableComponent.prototype.enable = function enable() {
+    this.removeClass('vjs-disabled');
+    this.el_.setAttribute('aria-disabled', 'false');
+    return this;
+  };
+
+  /**
+   * Disable the component element
+   *
+   * @return {Component}
+   * @method disable
+   */
+
+
+  ClickableComponent.prototype.disable = function disable() {
+    this.addClass('vjs-disabled');
+    this.el_.setAttribute('aria-disabled', 'true');
+    return this;
+  };
+
+  /**
+   * Handle Click - Override with specific functionality for component
+   *
+   * @method handleClick
+   */
+
+
+  ClickableComponent.prototype.handleClick = function handleClick() {};
+
+  /**
+   * Handle Focus - Add keyboard functionality to element
+   *
+   * @method handleFocus
+   */
+
+
+  ClickableComponent.prototype.handleFocus = function handleFocus() {
+    Events.on(_document2['default'], 'keydown', Fn.bind(this, this.handleKeyPress));
+  };
+
+  /**
+   * Handle KeyPress (document level) - Trigger click when Space or Enter key is pressed
+   *
+   * @method handleKeyPress
+   */
+
+
+  ClickableComponent.prototype.handleKeyPress = function handleKeyPress(event) {
+
+    // Support Space (32) or Enter (13) key operation to fire a click event
+    if (event.which === 32 || event.which === 13) {
+      event.preventDefault();
+      this.handleClick(event);
+    } else if (_Component.prototype.handleKeyPress) {
+
+      // Pass keypress handling up for unsupported keys
+      _Component.prototype.handleKeyPress.call(this, event);
+    }
+  };
+
+  /**
+   * Handle Blur - Remove keyboard triggers
+   *
+   * @method handleBlur
+   */
+
+
+  ClickableComponent.prototype.handleBlur = function handleBlur() {
+    Events.off(_document2['default'], 'keydown', Fn.bind(this, this.handleKeyPress));
+  };
+
+  return ClickableComponent;
+}(_component2['default']);
+
+_component2['default'].registerComponent('ClickableComponent', ClickableComponent);
+exports['default'] = ClickableComponent;
+
+},{"./component":5,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/log.js":85,"global/document":92,"object.assign":136}],4:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * The `CloseButton` component is a button which fires a "close" event
+ * when it is activated.
+ *
+ * @extends Button
+ * @class CloseButton
+ */
+var CloseButton = function (_Button) {
+  _inherits(CloseButton, _Button);
+
+  function CloseButton(player, options) {
+    _classCallCheck(this, CloseButton);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.controlText(options && options.controlText || _this.localize('Close'));
+    return _this;
+  }
+
+  CloseButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-close-button ' + _Button.prototype.buildCSSClass.call(this);
+  };
+
+  CloseButton.prototype.handleClick = function handleClick() {
+    this.trigger({ type: 'close', bubbles: false });
+  };
+
+  return CloseButton;
+}(_button2['default']);
+
+_component2['default'].registerComponent('CloseButton', CloseButton);
+exports['default'] = CloseButton;
+
+},{"./button":2,"./component":5}],5:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _guid = _dereq_('./utils/guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _toTitleCase = _dereq_('./utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+var _mergeOptions = _dereq_('./utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * @file component.js
+                                                                                                                                                           *
+                                                                                                                                                           * Player Component - Base class for all UI objects
+                                                                                                                                                           */
+
+
+/**
+ * Base UI Component class
+ * Components are embeddable UI objects that are represented by both a
+ * javascript object and an element in the DOM. They can be children of other
+ * components, and can have many children themselves.
+ * ```js
+ *     // adding a button to the player
+ *     var button = player.addChild('button');
+ *     button.el(); // -> button element
+ * ```
+ * ```html
+ *     <div class="video-js">
+ *       <div class="vjs-button">Button</div>
+ *     </div>
+ * ```
+ * Components are also event targets.
+ * ```js
+ *     button.on('click', function() {
+ *       console.log('Button Clicked!');
+ *     });
+ *     button.trigger('customevent');
+ * ```
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @class Component
+ */
+var Component = function () {
+  function Component(player, options, ready) {
+    _classCallCheck(this, Component);
+
+    // The component might be the player itself and we can't pass `this` to super
+    if (!player && this.play) {
+      this.player_ = player = this; // eslint-disable-line
+    } else {
+      this.player_ = player;
+    }
+
+    // Make a copy of prototype.options_ to protect against overriding defaults
+    this.options_ = (0, _mergeOptions2['default'])({}, this.options_);
+
+    // Updated options with supplied options
+    options = this.options_ = (0, _mergeOptions2['default'])(this.options_, options);
+
+    // Get ID from options or options element if one is supplied
+    this.id_ = options.id || options.el && options.el.id;
+
+    // If there was no ID from the options, generate one
+    if (!this.id_) {
+      // Don't require the player ID function in the case of mock players
+      var id = player && player.id && player.id() || 'no_player';
+
+      this.id_ = id + '_component_' + Guid.newGUID();
+    }
+
+    this.name_ = options.name || null;
+
+    // Create element if one wasn't provided in options
+    if (options.el) {
+      this.el_ = options.el;
+    } else if (options.createEl !== false) {
+      this.el_ = this.createEl();
+    }
+
+    this.children_ = [];
+    this.childIndex_ = {};
+    this.childNameIndex_ = {};
+
+    // Add any child components in options
+    if (options.initChildren !== false) {
+      this.initChildren();
+    }
+
+    this.ready(ready);
+    // Don't want to trigger ready here or it will before init is actually
+    // finished for all children that run this constructor
+
+    if (options.reportTouchActivity !== false) {
+      this.enableTouchActivity();
+    }
+  }
+
+  /**
+   * Dispose of the component and all child components
+   *
+   * @method dispose
+   */
+
+
+  Component.prototype.dispose = function dispose() {
+    this.trigger({ type: 'dispose', bubbles: false });
+
+    // Dispose all children.
+    if (this.children_) {
+      for (var i = this.children_.length - 1; i >= 0; i--) {
+        if (this.children_[i].dispose) {
+          this.children_[i].dispose();
+        }
+      }
+    }
+
+    // Delete child references
+    this.children_ = null;
+    this.childIndex_ = null;
+    this.childNameIndex_ = null;
+
+    // Remove all event listeners.
+    this.off();
+
+    // Remove element from DOM
+    if (this.el_.parentNode) {
+      this.el_.parentNode.removeChild(this.el_);
+    }
+
+    Dom.removeElData(this.el_);
+    this.el_ = null;
+  };
+
+  /**
+   * Return the component's player
+   *
+   * @return {Player}
+   * @method player
+   */
+
+
+  Component.prototype.player = function player() {
+    return this.player_;
+  };
+
+  /**
+   * Deep merge of options objects
+   * Whenever a property is an object on both options objects
+   * the two properties will be merged using mergeOptions.
+   *
+   * ```js
+   *     Parent.prototype.options_ = {
+   *       optionSet: {
+   *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },
+   *         'childTwo': {},
+   *         'childThree': {}
+   *       }
+   *     }
+   *     newOptions = {
+   *       optionSet: {
+   *         'childOne': { 'foo': 'baz', 'abc': '123' }
+   *         'childTwo': null,
+   *         'childFour': {}
+   *       }
+   *     }
+   *
+   *     this.options(newOptions);
+   * ```
+   * RESULT
+   * ```js
+   *     {
+   *       optionSet: {
+   *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },
+   *         'childTwo': null, // Disabled. Won't be initialized.
+   *         'childThree': {},
+   *         'childFour': {}
+   *       }
+   *     }
+   * ```
+   *
+   * @param  {Object} obj Object of new option values
+   * @return {Object}     A NEW object of this.options_ and obj merged
+   * @method options
+   */
+
+
+  Component.prototype.options = function options(obj) {
+    _log2['default'].warn('this.options() has been deprecated and will be moved to the constructor in 6.0');
+
+    if (!obj) {
+      return this.options_;
+    }
+
+    this.options_ = (0, _mergeOptions2['default'])(this.options_, obj);
+    return this.options_;
+  };
+
+  /**
+   * Get the component's DOM element
+   * ```js
+   *     var domEl = myComponent.el();
+   * ```
+   *
+   * @return {Element}
+   * @method el
+   */
+
+
+  Component.prototype.el = function el() {
+    return this.el_;
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param  {String=} tagName  Element's node type. e.g. 'div'
+   * @param  {Object=} properties An object of properties that should be set
+   * @param  {Object=} attributes An object of attributes that should be set
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Component.prototype.createEl = function createEl(tagName, properties, attributes) {
+    return Dom.createEl(tagName, properties, attributes);
+  };
+
+  Component.prototype.localize = function localize(string) {
+    var code = this.player_.language && this.player_.language();
+    var languages = this.player_.languages && this.player_.languages();
+
+    if (!code || !languages) {
+      return string;
+    }
+
+    var language = languages[code];
+
+    if (language && language[string]) {
+      return language[string];
+    }
+
+    var primaryCode = code.split('-')[0];
+    var primaryLang = languages[primaryCode];
+
+    if (primaryLang && primaryLang[string]) {
+      return primaryLang[string];
+    }
+
+    return string;
+  };
+
+  /**
+   * Return the component's DOM element where children are inserted.
+   * Will either be the same as el() or a new element defined in createEl().
+   *
+   * @return {Element}
+   * @method contentEl
+   */
+
+
+  Component.prototype.contentEl = function contentEl() {
+    return this.contentEl_ || this.el_;
+  };
+
+  /**
+   * Get the component's ID
+   * ```js
+   *     var id = myComponent.id();
+   * ```
+   *
+   * @return {String}
+   * @method id
+   */
+
+
+  Component.prototype.id = function id() {
+    return this.id_;
+  };
+
+  /**
+   * Get the component's name. The name is often used to reference the component.
+   * ```js
+   *     var name = myComponent.name();
+   * ```
+   *
+   * @return {String}
+   * @method name
+   */
+
+
+  Component.prototype.name = function name() {
+    return this.name_;
+  };
+
+  /**
+   * Get an array of all child components
+   * ```js
+   *     var kids = myComponent.children();
+   * ```
+   *
+   * @return {Array} The children
+   * @method children
+   */
+
+
+  Component.prototype.children = function children() {
+    return this.children_;
+  };
+
+  /**
+   * Returns a child component with the provided ID
+   *
+   * @return {Component}
+   * @method getChildById
+   */
+
+
+  Component.prototype.getChildById = function getChildById(id) {
+    return this.childIndex_[id];
+  };
+
+  /**
+   * Returns a child component with the provided name
+   *
+   * @return {Component}
+   * @method getChild
+   */
+
+
+  Component.prototype.getChild = function getChild(name) {
+    return this.childNameIndex_[name];
+  };
+
+  /**
+   * Adds a child component inside this component
+   * ```js
+   *     myComponent.el();
+   *     // -> <div class='my-component'></div>
+   *     myComponent.children();
+   *     // [empty array]
+   *
+   *     var myButton = myComponent.addChild('MyButton');
+   *     // -> <div class='my-component'><div class="my-button">myButton<div></div>
+   *     // -> myButton === myComponent.children()[0];
+   * ```
+   * Pass in options for child constructors and options for children of the child
+   * ```js
+   *     var myButton = myComponent.addChild('MyButton', {
+   *       text: 'Press Me',
+   *       buttonChildExample: {
+   *         buttonChildOption: true
+   *       }
+   *     });
+   * ```
+   *
+   * @param {String|Component} child The class name or instance of a child to add
+   * @param {Object=} options Options, including options to be passed to children of the child.
+   * @param {Number} index into our children array to attempt to add the child
+   * @return {Component} The child component (created by this process if a string was used)
+   * @method addChild
+   */
+
+
+  Component.prototype.addChild = function addChild(child) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var index = arguments.length <= 2 || arguments[2] === undefined ? this.children_.length : arguments[2];
+
+    var component = void 0;
+    var componentName = void 0;
+
+    // If child is a string, create nt with options
+    if (typeof child === 'string') {
+      componentName = child;
+
+      // Options can also be specified as a boolean, so convert to an empty object if false.
+      if (!options) {
+        options = {};
+      }
+
+      // Same as above, but true is deprecated so show a warning.
+      if (options === true) {
+        _log2['default'].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`.');
+        options = {};
+      }
+
+      // If no componentClass in options, assume componentClass is the name lowercased
+      // (e.g. playButton)
+      var componentClassName = options.componentClass || (0, _toTitleCase2['default'])(componentName);
+
+      // Set name through options
+      options.name = componentName;
+
+      // Create a new object & element for this controls set
+      // If there's no .player_, this is a player
+      var ComponentClass = Component.getComponent(componentClassName);
+
+      if (!ComponentClass) {
+        throw new Error('Component ' + componentClassName + ' does not exist');
+      }
+
+      // data stored directly on the videojs object may be
+      // misidentified as a component to retain
+      // backwards-compatibility with 4.x. check to make sure the
+      // component class can be instantiated.
+      if (typeof ComponentClass !== 'function') {
+        return null;
+      }
+
+      component = new ComponentClass(this.player_ || this, options);
+
+      // child is a component instance
+    } else {
+      component = child;
+    }
+
+    this.children_.splice(index, 0, component);
+
+    if (typeof component.id === 'function') {
+      this.childIndex_[component.id()] = component;
+    }
+
+    // If a name wasn't used to create the component, check if we can use the
+    // name function of the component
+    componentName = componentName || component.name && component.name();
+
+    if (componentName) {
+      this.childNameIndex_[componentName] = component;
+    }
+
+    // Add the UI object's element to the container div (box)
+    // Having an element is not required
+    if (typeof component.el === 'function' && component.el()) {
+      var childNodes = this.contentEl().children;
+      var refNode = childNodes[index] || null;
+
+      this.contentEl().insertBefore(component.el(), refNode);
+    }
+
+    // Return so it can stored on parent object if desired.
+    return component;
+  };
+
+  /**
+   * Remove a child component from this component's list of children, and the
+   * child component's element from this component's element
+   *
+   * @param  {Component} component Component to remove
+   * @method removeChild
+   */
+
+
+  Component.prototype.removeChild = function removeChild(component) {
+    if (typeof component === 'string') {
+      component = this.getChild(component);
+    }
+
+    if (!component || !this.children_) {
+      return;
+    }
+
+    var childFound = false;
+
+    for (var i = this.children_.length - 1; i >= 0; i--) {
+      if (this.children_[i] === component) {
+        childFound = true;
+        this.children_.splice(i, 1);
+        break;
+      }
+    }
+
+    if (!childFound) {
+      return;
+    }
+
+    this.childIndex_[component.id()] = null;
+    this.childNameIndex_[component.name()] = null;
+
+    var compEl = component.el();
+
+    if (compEl && compEl.parentNode === this.contentEl()) {
+      this.contentEl().removeChild(component.el());
+    }
+  };
+
+  /**
+   * Add and initialize default child components from options
+   * ```js
+   *     // when an instance of MyComponent is created, all children in options
+   *     // will be added to the instance by their name strings and options
+   *     MyComponent.prototype.options_ = {
+   *       children: [
+   *         'myChildComponent'
+   *       ],
+   *       myChildComponent: {
+   *         myChildOption: true
+   *       }
+   *     };
+   *
+   *     // Or when creating the component
+   *     var myComp = new MyComponent(player, {
+   *       children: [
+   *         'myChildComponent'
+   *       ],
+   *       myChildComponent: {
+   *         myChildOption: true
+   *       }
+   *     });
+   * ```
+   * The children option can also be an array of
+   * child options objects (that also include a 'name' key).
+   * This can be used if you have two child components of the
+   * same type that need different options.
+   * ```js
+   *     var myComp = new MyComponent(player, {
+   *       children: [
+   *         'button',
+   *         {
+   *           name: 'button',
+   *           someOtherOption: true
+   *         },
+   *         {
+   *           name: 'button',
+   *           someOtherOption: false
+   *         }
+   *       ]
+   *     });
+   * ```
+   *
+   * @method initChildren
+   */
+
+
+  Component.prototype.initChildren = function initChildren() {
+    var _this = this;
+
+    var children = this.options_.children;
+
+    if (children) {
+      (function () {
+        // `this` is `parent`
+        var parentOptions = _this.options_;
+
+        var handleAdd = function handleAdd(child) {
+          var name = child.name;
+          var opts = child.opts;
+
+          // Allow options for children to be set at the parent options
+          // e.g. videojs(id, { controlBar: false });
+          // instead of videojs(id, { children: { controlBar: false });
+          if (parentOptions[name] !== undefined) {
+            opts = parentOptions[name];
+          }
+
+          // Allow for disabling default components
+          // e.g. options['children']['posterImage'] = false
+          if (opts === false) {
+            return;
+          }
+
+          // Allow options to be passed as a simple boolean if no configuration
+          // is necessary.
+          if (opts === true) {
+            opts = {};
+          }
+
+          // We also want to pass the original player options to each component as well so they don't need to
+          // reach back into the player for options later.
+          opts.playerOptions = _this.options_.playerOptions;
+
+          // Create and add the child component.
+          // Add a direct reference to the child by name on the parent instance.
+          // If two of the same component are used, different names should be supplied
+          // for each
+          var newChild = _this.addChild(name, opts);
+
+          if (newChild) {
+            _this[name] = newChild;
+          }
+        };
+
+        // Allow for an array of children details to passed in the options
+        var workingChildren = void 0;
+        var Tech = Component.getComponent('Tech');
+
+        if (Array.isArray(children)) {
+          workingChildren = children;
+        } else {
+          workingChildren = Object.keys(children);
+        }
+
+        workingChildren
+        // children that are in this.options_ but also in workingChildren  would
+        // give us extra children we do not want. So, we want to filter them out.
+        .concat(Object.keys(_this.options_).filter(function (child) {
+          return !workingChildren.some(function (wchild) {
+            if (typeof wchild === 'string') {
+              return child === wchild;
+            }
+            return child === wchild.name;
+          });
+        })).map(function (child) {
+          var name = void 0;
+          var opts = void 0;
+
+          if (typeof child === 'string') {
+            name = child;
+            opts = children[name] || _this.options_[name] || {};
+          } else {
+            name = child.name;
+            opts = child;
+          }
+
+          return { name: name, opts: opts };
+        }).filter(function (child) {
+          // we have to make sure that child.name isn't in the techOrder since
+          // techs are registerd as Components but can't aren't compatible
+          // See https://github.com/videojs/video.js/issues/2772
+          var c = Component.getComponent(child.opts.componentClass || (0, _toTitleCase2['default'])(child.name));
+
+          return c && !Tech.isTech(c);
+        }).forEach(handleAdd);
+      })();
+    }
+  };
+
+  /**
+   * Allows sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  Component.prototype.buildCSSClass = function buildCSSClass() {
+    // Child classes can include a function that does:
+    // return 'CLASS NAME' + this._super();
+    return '';
+  };
+
+  /**
+   * Add an event listener to this component's element
+   * ```js
+   *     var myFunc = function() {
+   *       var myComponent = this;
+   *       // Do something when the event is fired
+   *     };
+   *
+   *     myComponent.on('eventType', myFunc);
+   * ```
+   * The context of myFunc will be myComponent unless previously bound.
+   * Alternatively, you can add a listener to another element or component.
+   * ```js
+   *     myComponent.on(otherElement, 'eventName', myFunc);
+   *     myComponent.on(otherComponent, 'eventName', myFunc);
+   * ```
+   * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`
+   * and `otherComponent.on('eventName', myFunc)` is that this way the listeners
+   * will be automatically cleaned up when either component is disposed.
+   * It will also bind myComponent as the context of myFunc.
+   * **NOTE**: When using this on elements in the page other than window
+   * and document (both permanent), if you remove the element from the DOM
+   * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up
+   * references to it and allow the browser to garbage collect it.
+   *
+   * @param  {String|Component} first   The event type or other component
+   * @param  {Function|String}      second  The event handler or event type
+   * @param  {Function}             third   The event handler
+   * @return {Component}
+   * @method on
+   */
+
+
+  Component.prototype.on = function on(first, second, third) {
+    var _this2 = this;
+
+    if (typeof first === 'string' || Array.isArray(first)) {
+      Events.on(this.el_, first, Fn.bind(this, second));
+
+      // Targeting another component or element
+    } else {
+      (function () {
+        var target = first;
+        var type = second;
+        var fn = Fn.bind(_this2, third);
+
+        // When this component is disposed, remove the listener from the other component
+        var removeOnDispose = function removeOnDispose() {
+          return _this2.off(target, type, fn);
+        };
+
+        // Use the same function ID so we can remove it later it using the ID
+        // of the original listener
+        removeOnDispose.guid = fn.guid;
+        _this2.on('dispose', removeOnDispose);
+
+        // If the other component is disposed first we need to clean the reference
+        // to the other component in this component's removeOnDispose listener
+        // Otherwise we create a memory leak.
+        var cleanRemover = function cleanRemover() {
+          return _this2.off('dispose', removeOnDispose);
+        };
+
+        // Add the same function ID so we can easily remove it later
+        cleanRemover.guid = fn.guid;
+
+        // Check if this is a DOM node
+        if (first.nodeName) {
+          // Add the listener to the other element
+          Events.on(target, type, fn);
+          Events.on(target, 'dispose', cleanRemover);
+
+          // Should be a component
+          // Not using `instanceof Component` because it makes mock players difficult
+        } else if (typeof first.on === 'function') {
+          // Add the listener to the other component
+          target.on(type, fn);
+          target.on('dispose', cleanRemover);
+        }
+      })();
+    }
+
+    return this;
+  };
+
+  /**
+   * Remove an event listener from this component's element
+   * ```js
+   *     myComponent.off('eventType', myFunc);
+   * ```
+   * If myFunc is excluded, ALL listeners for the event type will be removed.
+   * If eventType is excluded, ALL listeners will be removed from the component.
+   * Alternatively you can use `off` to remove listeners that were added to other
+   * elements or components using `myComponent.on(otherComponent...`.
+   * In this case both the event type and listener function are REQUIRED.
+   * ```js
+   *     myComponent.off(otherElement, 'eventType', myFunc);
+   *     myComponent.off(otherComponent, 'eventType', myFunc);
+   * ```
+   *
+   * @param  {String=|Component}  first  The event type or other component
+   * @param  {Function=|String}       second The listener function or event type
+   * @param  {Function=}              third  The listener for other component
+   * @return {Component}
+   * @method off
+   */
+
+
+  Component.prototype.off = function off(first, second, third) {
+    if (!first || typeof first === 'string' || Array.isArray(first)) {
+      Events.off(this.el_, first, second);
+    } else {
+      var target = first;
+      var type = second;
+      // Ensure there's at least a guid, even if the function hasn't been used
+      var fn = Fn.bind(this, third);
+
+      // Remove the dispose listener on this component,
+      // which was given the same guid as the event listener
+      this.off('dispose', fn);
+
+      if (first.nodeName) {
+        // Remove the listener
+        Events.off(target, type, fn);
+        // Remove the listener for cleaning the dispose listener
+        Events.off(target, 'dispose', fn);
+      } else {
+        target.off(type, fn);
+        target.off('dispose', fn);
+      }
+    }
+
+    return this;
+  };
+
+  /**
+   * Add an event listener to be triggered only once and then removed
+   * ```js
+   *     myComponent.one('eventName', myFunc);
+   * ```
+   * Alternatively you can add a listener to another element or component
+   * that will be triggered only once.
+   * ```js
+   *     myComponent.one(otherElement, 'eventName', myFunc);
+   *     myComponent.one(otherComponent, 'eventName', myFunc);
+   * ```
+   *
+   * @param  {String|Component}  first   The event type or other component
+   * @param  {Function|String}       second  The listener function or event type
+   * @param  {Function=}             third   The listener function for other component
+   * @return {Component}
+   * @method one
+   */
+
+
+  Component.prototype.one = function one(first, second, third) {
+    var _this3 = this,
+        _arguments = arguments;
+
+    if (typeof first === 'string' || Array.isArray(first)) {
+      Events.one(this.el_, first, Fn.bind(this, second));
+    } else {
+      (function () {
+        var target = first;
+        var type = second;
+        var fn = Fn.bind(_this3, third);
+
+        var newFunc = function newFunc() {
+          _this3.off(target, type, newFunc);
+          fn.apply(null, _arguments);
+        };
+
+        // Keep the same function ID so we can remove it later
+        newFunc.guid = fn.guid;
+
+        _this3.on(target, type, newFunc);
+      })();
+    }
+
+    return this;
+  };
+
+  /**
+   * Trigger an event on an element
+   * ```js
+   *     myComponent.trigger('eventName');
+   *     myComponent.trigger({'type':'eventName'});
+   *     myComponent.trigger('eventName', {data: 'some data'});
+   *     myComponent.trigger({'type':'eventName'}, {data: 'some data'});
+   * ```
+   *
+   * @param  {Event|Object|String} event  A string (the type) or an event object with a type attribute
+   * @param  {Object} [hash] data hash to pass along with the event
+   * @return {Component}       self
+   * @method trigger
+   */
+
+
+  Component.prototype.trigger = function trigger(event, hash) {
+    Events.trigger(this.el_, event, hash);
+    return this;
+  };
+
+  /**
+   * Bind a listener to the component's ready state.
+   * Different from event listeners in that if the ready event has already happened
+   * it will trigger the function immediately.
+   *
+   * @param  {Function} fn Ready listener
+   * @param  {Boolean} sync Exec the listener synchronously if component is ready
+   * @return {Component}
+   * @method ready
+   */
+
+
+  Component.prototype.ready = function ready(fn) {
+    var sync = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
+
+    if (fn) {
+      if (this.isReady_) {
+        if (sync) {
+          fn.call(this);
+        } else {
+          // Call the function asynchronously by default for consistency
+          this.setTimeout(fn, 1);
+        }
+      } else {
+        this.readyQueue_ = this.readyQueue_ || [];
+        this.readyQueue_.push(fn);
+      }
+    }
+    return this;
+  };
+
+  /**
+   * Trigger the ready listeners
+   *
+   * @return {Component}
+   * @method triggerReady
+   */
+
+
+  Component.prototype.triggerReady = function triggerReady() {
+    this.isReady_ = true;
+
+    // Ensure ready is triggerd asynchronously
+    this.setTimeout(function () {
+      var readyQueue = this.readyQueue_;
+
+      // Reset Ready Queue
+      this.readyQueue_ = [];
+
+      if (readyQueue && readyQueue.length > 0) {
+        readyQueue.forEach(function (fn) {
+          fn.call(this);
+        }, this);
+      }
+
+      // Allow for using event listeners also
+      this.trigger('ready');
+    }, 1);
+  };
+
+  /**
+   * Finds a single DOM element matching `selector` within the component's
+   * `contentEl` or another custom context.
+   *
+   * @method $
+   * @param  {String} selector
+   *         A valid CSS selector, which will be passed to `querySelector`.
+   *
+   * @param  {Element|String} [context=document]
+   *         A DOM element within which to query. Can also be a selector
+   *         string in which case the first matching element will be used
+   *         as context. If missing (or no element matches selector), falls
+   *         back to `document`.
+   *
+   * @return {Element|null}
+   */
+
+
+  Component.prototype.$ = function $(selector, context) {
+    return Dom.$(selector, context || this.contentEl());
+  };
+
+  /**
+   * Finds a all DOM elements matching `selector` within the component's
+   * `contentEl` or another custom context.
+   *
+   * @method $$
+   * @param  {String} selector
+   *         A valid CSS selector, which will be passed to `querySelectorAll`.
+   *
+   * @param  {Element|String} [context=document]
+   *         A DOM element within which to query. Can also be a selector
+   *         string in which case the first matching element will be used
+   *         as context. If missing (or no element matches selector), falls
+   *         back to `document`.
+   *
+   * @return {NodeList}
+   */
+
+
+  Component.prototype.$$ = function $$(selector, context) {
+    return Dom.$$(selector, context || this.contentEl());
+  };
+
+  /**
+   * Check if a component's element has a CSS class name
+   *
+   * @param {String} classToCheck Classname to check
+   * @return {Component}
+   * @method hasClass
+   */
+
+
+  Component.prototype.hasClass = function hasClass(classToCheck) {
+    return Dom.hasElClass(this.el_, classToCheck);
+  };
+
+  /**
+   * Add a CSS class name to the component's element
+   *
+   * @param {String} classToAdd Classname to add
+   * @return {Component}
+   * @method addClass
+   */
+
+
+  Component.prototype.addClass = function addClass(classToAdd) {
+    Dom.addElClass(this.el_, classToAdd);
+    return this;
+  };
+
+  /**
+   * Remove a CSS class name from the component's element
+   *
+   * @param {String} classToRemove Classname to remove
+   * @return {Component}
+   * @method removeClass
+   */
+
+
+  Component.prototype.removeClass = function removeClass(classToRemove) {
+    Dom.removeElClass(this.el_, classToRemove);
+    return this;
+  };
+
+  /**
+   * Add or remove a CSS class name from the component's element
+   *
+   * @param  {String} classToToggle
+   * @param  {Boolean|Function} [predicate]
+   *         Can be a function that returns a Boolean. If `true`, the class
+   *         will be added; if `false`, the class will be removed. If not
+   *         given, the class will be added if not present and vice versa.
+   *
+   * @return {Component}
+   * @method toggleClass
+   */
+
+
+  Component.prototype.toggleClass = function toggleClass(classToToggle, predicate) {
+    Dom.toggleElClass(this.el_, classToToggle, predicate);
+    return this;
+  };
+
+  /**
+   * Show the component element if hidden
+   *
+   * @return {Component}
+   * @method show
+   */
+
+
+  Component.prototype.show = function show() {
+    this.removeClass('vjs-hidden');
+    return this;
+  };
+
+  /**
+   * Hide the component element if currently showing
+   *
+   * @return {Component}
+   * @method hide
+   */
+
+
+  Component.prototype.hide = function hide() {
+    this.addClass('vjs-hidden');
+    return this;
+  };
+
+  /**
+   * Lock an item in its visible state
+   * To be used with fadeIn/fadeOut.
+   *
+   * @return {Component}
+   * @private
+   * @method lockShowing
+   */
+
+
+  Component.prototype.lockShowing = function lockShowing() {
+    this.addClass('vjs-lock-showing');
+    return this;
+  };
+
+  /**
+   * Unlock an item to be hidden
+   * To be used with fadeIn/fadeOut.
+   *
+   * @return {Component}
+   * @private
+   * @method unlockShowing
+   */
+
+
+  Component.prototype.unlockShowing = function unlockShowing() {
+    this.removeClass('vjs-lock-showing');
+    return this;
+  };
+
+  /**
+   * Set or get the width of the component (CSS values)
+   * Setting the video tag dimension values only works with values in pixels.
+   * Percent values will not work.
+   * Some percents can be used, but width()/height() will return the number + %,
+   * not the actual computed width/height.
+   *
+   * @param  {Number|String=} num   Optional width number
+   * @param  {Boolean} skipListeners Skip the 'resize' event trigger
+   * @return {Component} This component, when setting the width
+   * @return {Number|String} The width, when getting
+   * @method width
+   */
+
+
+  Component.prototype.width = function width(num, skipListeners) {
+    return this.dimension('width', num, skipListeners);
+  };
+
+  /**
+   * Get or set the height of the component (CSS values)
+   * Setting the video tag dimension values only works with values in pixels.
+   * Percent values will not work.
+   * Some percents can be used, but width()/height() will return the number + %,
+   * not the actual computed width/height.
+   *
+   * @param  {Number|String=} num     New component height
+   * @param  {Boolean=} skipListeners Skip the resize event trigger
+   * @return {Component} This component, when setting the height
+   * @return {Number|String} The height, when getting
+   * @method height
+   */
+
+
+  Component.prototype.height = function height(num, skipListeners) {
+    return this.dimension('height', num, skipListeners);
+  };
+
+  /**
+   * Set both width and height at the same time
+   *
+   * @param  {Number|String} width Width of player
+   * @param  {Number|String} height Height of player
+   * @return {Component} The component
+   * @method dimensions
+   */
+
+
+  Component.prototype.dimensions = function dimensions(width, height) {
+    // Skip resize listeners on width for optimization
+    return this.width(width, true).height(height);
+  };
+
+  /**
+   * Get or set width or height
+   * This is the shared code for the width() and height() methods.
+   * All for an integer, integer + 'px' or integer + '%';
+   * Known issue: Hidden elements officially have a width of 0. We're defaulting
+   * to the style.width value and falling back to computedStyle which has the
+   * hidden element issue. Info, but probably not an efficient fix:
+   * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/
+   *
+   * @param  {String} widthOrHeight  'width' or 'height'
+   * @param  {Number|String=} num     New dimension
+   * @param  {Boolean=} skipListeners Skip resize event trigger
+   * @return {Component} The component if a dimension was set
+   * @return {Number|String} The dimension if nothing was set
+   * @private
+   * @method dimension
+   */
+
+
+  Component.prototype.dimension = function dimension(widthOrHeight, num, skipListeners) {
+    if (num !== undefined) {
+      // Set to zero if null or literally NaN (NaN !== NaN)
+      if (num === null || num !== num) {
+        num = 0;
+      }
+
+      // Check if using css width/height (% or px) and adjust
+      if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {
+        this.el_.style[widthOrHeight] = num;
+      } else if (num === 'auto') {
+        this.el_.style[widthOrHeight] = '';
+      } else {
+        this.el_.style[widthOrHeight] = num + 'px';
+      }
+
+      // skipListeners allows us to avoid triggering the resize event when setting both width and height
+      if (!skipListeners) {
+        this.trigger('resize');
+      }
+
+      // Return component
+      return this;
+    }
+
+    // Not setting a value, so getting it
+    // Make sure element exists
+    if (!this.el_) {
+      return 0;
+    }
+
+    // Get dimension value from style
+    var val = this.el_.style[widthOrHeight];
+    var pxIndex = val.indexOf('px');
+
+    if (pxIndex !== -1) {
+      // Return the pixel value with no 'px'
+      return parseInt(val.slice(0, pxIndex), 10);
+    }
+
+    // No px so using % or no style was set, so falling back to offsetWidth/height
+    // If component has display:none, offset will return 0
+    // TODO: handle display:none and no dimension style using px
+    return parseInt(this.el_['offset' + (0, _toTitleCase2['default'])(widthOrHeight)], 10);
+  };
+
+  /**
+   * Get width or height of computed style
+   * @param  {String} widthOrHeight  'width' or 'height'
+   * @return {Number|Boolean} The bolean false if nothing was set
+   * @method currentDimension
+   */
+
+
+  Component.prototype.currentDimension = function currentDimension(widthOrHeight) {
+    var computedWidthOrHeight = 0;
+
+    if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {
+      throw new Error('currentDimension only accepts width or height value');
+    }
+
+    if (typeof _window2['default'].getComputedStyle === 'function') {
+      var computedStyle = _window2['default'].getComputedStyle(this.el_);
+
+      computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight];
+    } else if (this.el_.currentStyle) {
+      // ie 8 doesn't support computed style, shim it
+      // return clientWidth or clientHeight instead for better accuracy
+      var rule = 'offset' + (0, _toTitleCase2['default'])(widthOrHeight);
+
+      computedWidthOrHeight = this.el_[rule];
+    }
+
+    // remove 'px' from variable and parse as integer
+    computedWidthOrHeight = parseFloat(computedWidthOrHeight);
+    return computedWidthOrHeight;
+  };
+
+  /**
+   * Get an object which contains width and height values of computed style
+   * @return {Object} The dimensions of element
+   * @method currentDimensions
+   */
+
+
+  Component.prototype.currentDimensions = function currentDimensions() {
+    return {
+      width: this.currentDimension('width'),
+      height: this.currentDimension('height')
+    };
+  };
+
+  /**
+   * Get width of computed style
+   * @return {Integer}
+   * @method currentWidth
+   */
+
+
+  Component.prototype.currentWidth = function currentWidth() {
+    return this.currentDimension('width');
+  };
+
+  /**
+   * Get height of computed style
+   * @return {Integer}
+   * @method currentHeight
+   */
+
+
+  Component.prototype.currentHeight = function currentHeight() {
+    return this.currentDimension('height');
+  };
+
+  /**
+   * Emit 'tap' events when touch events are supported
+   * This is used to support toggling the controls through a tap on the video.
+   * We're requiring them to be enabled because otherwise every component would
+   * have this extra overhead unnecessarily, on mobile devices where extra
+   * overhead is especially bad.
+   *
+   * @private
+   * @method emitTapEvents
+   */
+
+
+  Component.prototype.emitTapEvents = function emitTapEvents() {
+    // Track the start time so we can determine how long the touch lasted
+    var touchStart = 0;
+    var firstTouch = null;
+
+    // Maximum movement allowed during a touch event to still be considered a tap
+    // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.
+    var tapMovementThreshold = 10;
+
+    // The maximum length a touch can be while still being considered a tap
+    var touchTimeThreshold = 200;
+
+    var couldBeTap = void 0;
+
+    this.on('touchstart', function (event) {
+      // If more than one finger, don't consider treating this as a click
+      if (event.touches.length === 1) {
+        // Copy pageX/pageY from the object
+        firstTouch = {
+          pageX: event.touches[0].pageX,
+          pageY: event.touches[0].pageY
+        };
+        // Record start time so we can detect a tap vs. "touch and hold"
+        touchStart = new Date().getTime();
+        // Reset couldBeTap tracking
+        couldBeTap = true;
+      }
+    });
+
+    this.on('touchmove', function (event) {
+      // If more than one finger, don't consider treating this as a click
+      if (event.touches.length > 1) {
+        couldBeTap = false;
+      } else if (firstTouch) {
+        // Some devices will throw touchmoves for all but the slightest of taps.
+        // So, if we moved only a small distance, this could still be a tap
+        var xdiff = event.touches[0].pageX - firstTouch.pageX;
+        var ydiff = event.touches[0].pageY - firstTouch.pageY;
+        var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);
+
+        if (touchDistance > tapMovementThreshold) {
+          couldBeTap = false;
+        }
+      }
+    });
+
+    var noTap = function noTap() {
+      couldBeTap = false;
+    };
+
+    // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s
+    this.on('touchleave', noTap);
+    this.on('touchcancel', noTap);
+
+    // When the touch ends, measure how long it took and trigger the appropriate
+    // event
+    this.on('touchend', function (event) {
+      firstTouch = null;
+      // Proceed only if the touchmove/leave/cancel event didn't happen
+      if (couldBeTap === true) {
+        // Measure how long the touch lasted
+        var touchTime = new Date().getTime() - touchStart;
+
+        // Make sure the touch was less than the threshold to be considered a tap
+        if (touchTime < touchTimeThreshold) {
+          // Don't let browser turn this into a click
+          event.preventDefault();
+          this.trigger('tap');
+          // It may be good to copy the touchend event object and change the
+          // type to tap, if the other event properties aren't exact after
+          // Events.fixEvent runs (e.g. event.target)
+        }
+      }
+    });
+  };
+
+  /**
+   * Report user touch activity when touch events occur
+   * User activity is used to determine when controls should show/hide. It's
+   * relatively simple when it comes to mouse events, because any mouse event
+   * should show the controls. So we capture mouse events that bubble up to the
+   * player and report activity when that happens.
+   * With touch events it isn't as easy. We can't rely on touch events at the
+   * player level, because a tap (touchstart + touchend) on the video itself on
+   * mobile devices is meant to turn controls off (and on). User activity is
+   * checked asynchronously, so what could happen is a tap event on the video
+   * turns the controls off, then the touchend event bubbles up to the player,
+   * which if it reported user activity, would turn the controls right back on.
+   * (We also don't want to completely block touch events from bubbling up)
+   * Also a touchmove, touch+hold, and anything other than a tap is not supposed
+   * to turn the controls back on on a mobile device.
+   * Here we're setting the default component behavior to report user activity
+   * whenever touch events happen, and this can be turned off by components that
+   * want touch events to act differently.
+   *
+   * @method enableTouchActivity
+   */
+
+
+  Component.prototype.enableTouchActivity = function enableTouchActivity() {
+    // Don't continue if the root player doesn't support reporting user activity
+    if (!this.player() || !this.player().reportUserActivity) {
+      return;
+    }
+
+    // listener for reporting that the user is active
+    var report = Fn.bind(this.player(), this.player().reportUserActivity);
+
+    var touchHolding = void 0;
+
+    this.on('touchstart', function () {
+      report();
+      // For as long as the they are touching the device or have their mouse down,
+      // we consider them active even if they're not moving their finger or mouse.
+      // So we want to continue to update that they are active
+      this.clearInterval(touchHolding);
+      // report at the same interval as activityCheck
+      touchHolding = this.setInterval(report, 250);
+    });
+
+    var touchEnd = function touchEnd(event) {
+      report();
+      // stop the interval that maintains activity if the touch is holding
+      this.clearInterval(touchHolding);
+    };
+
+    this.on('touchmove', report);
+    this.on('touchend', touchEnd);
+    this.on('touchcancel', touchEnd);
+  };
+
+  /**
+   * Creates timeout and sets up disposal automatically.
+   *
+   * @param {Function} fn The function to run after the timeout.
+   * @param {Number} timeout Number of ms to delay before executing specified function.
+   * @return {Number} Returns the timeout ID
+   * @method setTimeout
+   */
+
+
+  Component.prototype.setTimeout = function setTimeout(fn, timeout) {
+    fn = Fn.bind(this, fn);
+
+    // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.
+    var timeoutId = _window2['default'].setTimeout(fn, timeout);
+
+    var disposeFn = function disposeFn() {
+      this.clearTimeout(timeoutId);
+    };
+
+    disposeFn.guid = 'vjs-timeout-' + timeoutId;
+
+    this.on('dispose', disposeFn);
+
+    return timeoutId;
+  };
+
+  /**
+   * Clears a timeout and removes the associated dispose listener
+   *
+   * @param {Number} timeoutId The id of the timeout to clear
+   * @return {Number} Returns the timeout ID
+   * @method clearTimeout
+   */
+
+
+  Component.prototype.clearTimeout = function clearTimeout(timeoutId) {
+    _window2['default'].clearTimeout(timeoutId);
+
+    var disposeFn = function disposeFn() {};
+
+    disposeFn.guid = 'vjs-timeout-' + timeoutId;
+
+    this.off('dispose', disposeFn);
+
+    return timeoutId;
+  };
+
+  /**
+   * Creates an interval and sets up disposal automatically.
+   *
+   * @param {Function} fn The function to run every N seconds.
+   * @param {Number} interval Number of ms to delay before executing specified function.
+   * @return {Number} Returns the interval ID
+   * @method setInterval
+   */
+
+
+  Component.prototype.setInterval = function setInterval(fn, interval) {
+    fn = Fn.bind(this, fn);
+
+    var intervalId = _window2['default'].setInterval(fn, interval);
+
+    var disposeFn = function disposeFn() {
+      this.clearInterval(intervalId);
+    };
+
+    disposeFn.guid = 'vjs-interval-' + intervalId;
+
+    this.on('dispose', disposeFn);
+
+    return intervalId;
+  };
+
+  /**
+   * Clears an interval and removes the associated dispose listener
+   *
+   * @param {Number} intervalId The id of the interval to clear
+   * @return {Number} Returns the interval ID
+   * @method clearInterval
+   */
+
+
+  Component.prototype.clearInterval = function clearInterval(intervalId) {
+    _window2['default'].clearInterval(intervalId);
+
+    var disposeFn = function disposeFn() {};
+
+    disposeFn.guid = 'vjs-interval-' + intervalId;
+
+    this.off('dispose', disposeFn);
+
+    return intervalId;
+  };
+
+  /**
+   * Registers a component
+   *
+   * @param {String} name Name of the component to register
+   * @param {Object} comp The component to register
+   * @static
+   * @method registerComponent
+   */
+
+
+  Component.registerComponent = function registerComponent(name, comp) {
+    if (!Component.components_) {
+      Component.components_ = {};
+    }
+
+    Component.components_[name] = comp;
+    return comp;
+  };
+
+  /**
+   * Gets a component by name
+   *
+   * @param {String} name Name of the component to get
+   * @return {Component}
+   * @static
+   * @method getComponent
+   */
+
+
+  Component.getComponent = function getComponent(name) {
+    if (Component.components_ && Component.components_[name]) {
+      return Component.components_[name];
+    }
+
+    if (_window2['default'] && _window2['default'].videojs && _window2['default'].videojs[name]) {
+      _log2['default'].warn('The ' + name + ' component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)');
+      return _window2['default'].videojs[name];
+    }
+  };
+
+  /**
+   * Sets up the constructor using the supplied init method
+   * or uses the init of the parent object
+   *
+   * @param {Object} props An object of properties
+   * @static
+   * @deprecated
+   * @method extend
+   */
+
+
+  Component.extend = function extend(props) {
+    props = props || {};
+
+    _log2['default'].warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');
+
+    // Set up the constructor using the supplied init method
+    // or using the init of the parent object
+    // Make sure to check the unobfuscated version for external libs
+    var init = props.init || props.init || this.prototype.init || this.prototype.init || function () {};
+    // In Resig's simple class inheritance (previously used) the constructor
+    //  is a function that calls `this.init.apply(arguments)`
+    // However that would prevent us from using `ParentObject.call(this);`
+    //  in a Child constructor because the `this` in `this.init`
+    //  would still refer to the Child and cause an infinite loop.
+    // We would instead have to do
+    //    `ParentObject.prototype.init.apply(this, arguments);`
+    //  Bleh. We're not creating a _super() function, so it's good to keep
+    //  the parent constructor reference simple.
+    var subObj = function subObj() {
+      init.apply(this, arguments);
+    };
+
+    // Inherit from this object's prototype
+    subObj.prototype = Object.create(this.prototype);
+    // Reset the constructor property for subObj otherwise
+    // instances of subObj would have the constructor of the parent Object
+    subObj.prototype.constructor = subObj;
+
+    // Make the class extendable
+    subObj.extend = Component.extend;
+
+    // Extend subObj's prototype with functions and other properties from props
+    for (var name in props) {
+      if (props.hasOwnProperty(name)) {
+        subObj.prototype[name] = props[name];
+      }
+    }
+
+    return subObj;
+  };
+
+  return Component;
+}();
+
+Component.registerComponent('Component', Component);
+exports['default'] = Component;
+
+},{"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/to-title-case.js":89,"global/window":93}],6:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackButton = _dereq_('../track-button.js');
+
+var _trackButton2 = _interopRequireDefault(_trackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _audioTrackMenuItem = _dereq_('./audio-track-menu-item.js');
+
+var _audioTrackMenuItem2 = _interopRequireDefault(_audioTrackMenuItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file audio-track-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base class for buttons that toggle specific text track types (e.g. subtitles)
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends TrackButton
+ * @class AudioTrackButton
+ */
+var AudioTrackButton = function (_TrackButton) {
+  _inherits(AudioTrackButton, _TrackButton);
+
+  function AudioTrackButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, AudioTrackButton);
+
+    options.tracks = player.audioTracks && player.audioTracks();
+
+    var _this = _possibleConstructorReturn(this, _TrackButton.call(this, player, options));
+
+    _this.el_.setAttribute('aria-label', 'Audio Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  AudioTrackButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-audio-button ' + _TrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create a menu item for each audio track
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  AudioTrackButton.prototype.createItems = function createItems() {
+    var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    var tracks = this.player_.audioTracks && this.player_.audioTracks();
+
+    if (!tracks) {
+      return items;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      items.push(new _audioTrackMenuItem2['default'](this.player_, {
+        track: track,
+        // MenuItem is selectable
+        selectable: true
+      }));
+    }
+
+    return items;
+  };
+
+  return AudioTrackButton;
+}(_trackButton2['default']);
+
+AudioTrackButton.prototype.controlText_ = 'Audio Track';
+_component2['default'].registerComponent('AudioTrackButton', AudioTrackButton);
+exports['default'] = AudioTrackButton;
+
+},{"../../component.js":5,"../track-button.js":36,"./audio-track-menu-item.js":7}],7:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file audio-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The audio track menu item
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class AudioTrackMenuItem
+ */
+var AudioTrackMenuItem = function (_MenuItem) {
+  _inherits(AudioTrackMenuItem, _MenuItem);
+
+  function AudioTrackMenuItem(player, options) {
+    _classCallCheck(this, AudioTrackMenuItem);
+
+    var track = options.track;
+    var tracks = player.audioTracks();
+
+    // Modify options for parent MenuItem class's init.
+    options.label = track.label || track.language || 'Unknown';
+    options.selected = track.enabled;
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.track = track;
+
+    if (tracks) {
+      (function () {
+        var changeHandler = Fn.bind(_this, _this.handleTracksChange);
+
+        tracks.addEventListener('change', changeHandler);
+        _this.on('dispose', function () {
+          tracks.removeEventListener('change', changeHandler);
+        });
+      })();
+    }
+    return _this;
+  }
+
+  /**
+   * Handle click on audio track
+   *
+   * @method handleClick
+   */
+
+
+  AudioTrackMenuItem.prototype.handleClick = function handleClick(event) {
+    var tracks = this.player_.audioTracks();
+
+    _MenuItem.prototype.handleClick.call(this, event);
+
+    if (!tracks) {
+      return;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      track.enabled = track === this.track;
+    }
+  };
+
+  /**
+   * Handle audio track change
+   *
+   * @method handleTracksChange
+   */
+
+
+  AudioTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {
+    this.selected(this.track.enabled);
+  };
+
+  return AudioTrackMenuItem;
+}(_menuItem2['default']);
+
+_component2['default'].registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);
+exports['default'] = AudioTrackMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],8:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+_dereq_('./play-toggle.js');
+
+_dereq_('./time-controls/current-time-display.js');
+
+_dereq_('./time-controls/duration-display.js');
+
+_dereq_('./time-controls/time-divider.js');
+
+_dereq_('./time-controls/remaining-time-display.js');
+
+_dereq_('./live-display.js');
+
+_dereq_('./progress-control/progress-control.js');
+
+_dereq_('./fullscreen-toggle.js');
+
+_dereq_('./volume-control/volume-control.js');
+
+_dereq_('./volume-menu-button.js');
+
+_dereq_('./mute-toggle.js');
+
+_dereq_('./text-track-controls/chapters-button.js');
+
+_dereq_('./text-track-controls/descriptions-button.js');
+
+_dereq_('./text-track-controls/subtitles-button.js');
+
+_dereq_('./text-track-controls/captions-button.js');
+
+_dereq_('./audio-track-controls/audio-track-button.js');
+
+_dereq_('./playback-rate-menu/playback-rate-menu-button.js');
+
+_dereq_('./spacer-controls/custom-control-spacer.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file control-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+// Required children
+
+
+/**
+ * Container of main controls
+ *
+ * @extends Component
+ * @class ControlBar
+ */
+var ControlBar = function (_Component) {
+  _inherits(ControlBar, _Component);
+
+  function ControlBar() {
+    _classCallCheck(this, ControlBar);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  ControlBar.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-control-bar',
+      dir: 'ltr'
+    }, {
+      // The control bar is a group, so it can contain menuitems
+      role: 'group'
+    });
+  };
+
+  return ControlBar;
+}(_component2['default']);
+
+ControlBar.prototype.options_ = {
+  children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subtitlesButton', 'captionsButton', 'audioTrackButton', 'fullscreenToggle']
+};
+
+_component2['default'].registerComponent('ControlBar', ControlBar);
+exports['default'] = ControlBar;
+
+},{"../component.js":5,"./audio-track-controls/audio-track-button.js":6,"./fullscreen-toggle.js":9,"./live-display.js":10,"./mute-toggle.js":11,"./play-toggle.js":12,"./playback-rate-menu/playback-rate-menu-button.js":13,"./progress-control/progress-control.js":18,"./spacer-controls/custom-control-spacer.js":21,"./text-track-controls/captions-button.js":24,"./text-track-controls/chapters-button.js":25,"./text-track-controls/descriptions-button.js":27,"./text-track-controls/subtitles-button.js":29,"./time-controls/current-time-display.js":32,"./time-controls/duration-display.js":33,"./time-controls/remaining-time-display.js":34,"./time-controls/time-divider.js":35,"./volume-control/volume-control.js":38,"./volume-menu-button.js":40}],9:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('../button.js');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file fullscreen-toggle.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Toggle fullscreen video
+ *
+ * @extends Button
+ * @class FullscreenToggle
+ */
+var FullscreenToggle = function (_Button) {
+  _inherits(FullscreenToggle, _Button);
+
+  function FullscreenToggle(player, options) {
+    _classCallCheck(this, FullscreenToggle);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.on(player, 'fullscreenchange', _this.handleFullscreenChange);
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  FullscreenToggle.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-fullscreen-control ' + _Button.prototype.buildCSSClass.call(this);
+  };
+  /**
+   * Handles Fullscreenchange on the component and change control text accordingly
+   *
+   * @method handleFullscreenChange
+   */
+
+
+  FullscreenToggle.prototype.handleFullscreenChange = function handleFullscreenChange() {
+    if (this.player_.isFullscreen()) {
+      this.controlText('Non-Fullscreen');
+    } else {
+      this.controlText('Fullscreen');
+    }
+  };
+  /**
+   * Handles click for full screen
+   *
+   * @method handleClick
+   */
+
+
+  FullscreenToggle.prototype.handleClick = function handleClick() {
+    if (!this.player_.isFullscreen()) {
+      this.player_.requestFullscreen();
+    } else {
+      this.player_.exitFullscreen();
+    }
+  };
+
+  return FullscreenToggle;
+}(_button2['default']);
+
+FullscreenToggle.prototype.controlText_ = 'Fullscreen';
+
+_component2['default'].registerComponent('FullscreenToggle', FullscreenToggle);
+exports['default'] = FullscreenToggle;
+
+},{"../button.js":2,"../component.js":5}],10:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file live-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the live indicator
+ * TODO - Future make it click to snap to live
+ *
+ * @extends Component
+ * @class LiveDisplay
+ */
+var LiveDisplay = function (_Component) {
+  _inherits(LiveDisplay, _Component);
+
+  function LiveDisplay(player, options) {
+    _classCallCheck(this, LiveDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.updateShowing();
+    _this.on(_this.player(), 'durationchange', _this.updateShowing);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  LiveDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-live-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-live-display',
+      innerHTML: '<span class="vjs-control-text">' + this.localize('Stream Type') + '</span>' + this.localize('LIVE')
+    }, {
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  LiveDisplay.prototype.updateShowing = function updateShowing() {
+    if (this.player().duration() === Infinity) {
+      this.show();
+    } else {
+      this.hide();
+    }
+  };
+
+  return LiveDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('LiveDisplay', LiveDisplay);
+exports['default'] = LiveDisplay;
+
+},{"../component":5,"../utils/dom.js":80}],11:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file mute-toggle.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A button component for muting the audio
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class MuteToggle
+ */
+var MuteToggle = function (_Button) {
+  _inherits(MuteToggle, _Button);
+
+  function MuteToggle(player, options) {
+    _classCallCheck(this, MuteToggle);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.on(player, 'volumechange', _this.update);
+
+    // hide mute toggle if the current tech doesn't support volume control
+    if (player.tech_ && player.tech_.featuresVolumeControl === false) {
+      _this.addClass('vjs-hidden');
+    }
+
+    _this.on(player, 'loadstart', function () {
+      // We need to update the button to account for a default muted state.
+      this.update();
+
+      if (player.tech_.featuresVolumeControl === false) {
+        this.addClass('vjs-hidden');
+      } else {
+        this.removeClass('vjs-hidden');
+      }
+    });
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  MuteToggle.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-mute-control ' + _Button.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Handle click on mute
+   *
+   * @method handleClick
+   */
+
+
+  MuteToggle.prototype.handleClick = function handleClick() {
+    this.player_.muted(this.player_.muted() ? false : true);
+  };
+
+  /**
+   * Update volume
+   *
+   * @method update
+   */
+
+
+  MuteToggle.prototype.update = function update() {
+    var vol = this.player_.volume();
+    var level = 3;
+
+    if (vol === 0 || this.player_.muted()) {
+      level = 0;
+    } else if (vol < 0.33) {
+      level = 1;
+    } else if (vol < 0.67) {
+      level = 2;
+    }
+
+    // Don't rewrite the button text if the actual text doesn't change.
+    // This causes unnecessary and confusing information for screen reader users.
+    // This check is needed because this function gets called every time the volume level is changed.
+    var toMute = this.player_.muted() ? 'Unmute' : 'Mute';
+
+    if (this.controlText() !== toMute) {
+      this.controlText(toMute);
+    }
+
+    // TODO improve muted icon classes
+    for (var i = 0; i < 4; i++) {
+      Dom.removeElClass(this.el_, 'vjs-vol-' + i);
+    }
+    Dom.addElClass(this.el_, 'vjs-vol-' + level);
+  };
+
+  return MuteToggle;
+}(_button2['default']);
+
+MuteToggle.prototype.controlText_ = 'Mute';
+
+_component2['default'].registerComponent('MuteToggle', MuteToggle);
+exports['default'] = MuteToggle;
+
+},{"../button":2,"../component":5,"../utils/dom.js":80}],12:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('../button.js');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file play-toggle.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Button to toggle between play and pause
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class PlayToggle
+ */
+var PlayToggle = function (_Button) {
+  _inherits(PlayToggle, _Button);
+
+  function PlayToggle(player, options) {
+    _classCallCheck(this, PlayToggle);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.on(player, 'play', _this.handlePlay);
+    _this.on(player, 'pause', _this.handlePause);
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  PlayToggle.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-play-control ' + _Button.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Handle click to toggle between play and pause
+   *
+   * @method handleClick
+   */
+
+
+  PlayToggle.prototype.handleClick = function handleClick() {
+    if (this.player_.paused()) {
+      this.player_.play();
+    } else {
+      this.player_.pause();
+    }
+  };
+
+  /**
+   * Add the vjs-playing class to the element so it can change appearance
+   *
+   * @method handlePlay
+   */
+
+
+  PlayToggle.prototype.handlePlay = function handlePlay() {
+    this.removeClass('vjs-paused');
+    this.addClass('vjs-playing');
+    // change the button text to "Pause"
+    this.controlText('Pause');
+  };
+
+  /**
+   * Add the vjs-paused class to the element so it can change appearance
+   *
+   * @method handlePause
+   */
+
+
+  PlayToggle.prototype.handlePause = function handlePause() {
+    this.removeClass('vjs-playing');
+    this.addClass('vjs-paused');
+    // change the button text to "Play"
+    this.controlText('Play');
+  };
+
+  return PlayToggle;
+}(_button2['default']);
+
+PlayToggle.prototype.controlText_ = 'Play';
+
+_component2['default'].registerComponent('PlayToggle', PlayToggle);
+exports['default'] = PlayToggle;
+
+},{"../button.js":2,"../component.js":5}],13:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuButton = _dereq_('../../menu/menu-button.js');
+
+var _menuButton2 = _interopRequireDefault(_menuButton);
+
+var _menu = _dereq_('../../menu/menu.js');
+
+var _menu2 = _interopRequireDefault(_menu);
+
+var _playbackRateMenuItem = _dereq_('./playback-rate-menu-item.js');
+
+var _playbackRateMenuItem2 = _interopRequireDefault(_playbackRateMenuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file playback-rate-menu-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The component for controlling the playback rate
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuButton
+ * @class PlaybackRateMenuButton
+ */
+var PlaybackRateMenuButton = function (_MenuButton) {
+  _inherits(PlaybackRateMenuButton, _MenuButton);
+
+  function PlaybackRateMenuButton(player, options) {
+    _classCallCheck(this, PlaybackRateMenuButton);
+
+    var _this = _possibleConstructorReturn(this, _MenuButton.call(this, player, options));
+
+    _this.updateVisibility();
+    _this.updateLabel();
+
+    _this.on(player, 'loadstart', _this.updateVisibility);
+    _this.on(player, 'ratechange', _this.updateLabel);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PlaybackRateMenuButton.prototype.createEl = function createEl() {
+    var el = _MenuButton.prototype.createEl.call(this);
+
+    this.labelEl_ = Dom.createEl('div', {
+      className: 'vjs-playback-rate-value',
+      innerHTML: 1.0
+    });
+
+    el.appendChild(this.labelEl_);
+
+    return el;
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  PlaybackRateMenuButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-playback-rate ' + _MenuButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create the playback rate menu
+   *
+   * @return {Menu} Menu object populated with items
+   * @method createMenu
+   */
+
+
+  PlaybackRateMenuButton.prototype.createMenu = function createMenu() {
+    var menu = new _menu2['default'](this.player());
+    var rates = this.playbackRates();
+
+    if (rates) {
+      for (var i = rates.length - 1; i >= 0; i--) {
+        menu.addChild(new _playbackRateMenuItem2['default'](this.player(), { rate: rates[i] + 'x' }));
+      }
+    }
+
+    return menu;
+  };
+
+  /**
+   * Updates ARIA accessibility attributes
+   *
+   * @method updateARIAAttributes
+   */
+
+
+  PlaybackRateMenuButton.prototype.updateARIAAttributes = function updateARIAAttributes() {
+    // Current playback rate
+    this.el().setAttribute('aria-valuenow', this.player().playbackRate());
+  };
+
+  /**
+   * Handle menu item click
+   *
+   * @method handleClick
+   */
+
+
+  PlaybackRateMenuButton.prototype.handleClick = function handleClick() {
+    // select next rate option
+    var currentRate = this.player().playbackRate();
+    var rates = this.playbackRates();
+
+    // this will select first one if the last one currently selected
+    var newRate = rates[0];
+
+    for (var i = 0; i < rates.length; i++) {
+      if (rates[i] > currentRate) {
+        newRate = rates[i];
+        break;
+      }
+    }
+    this.player().playbackRate(newRate);
+  };
+
+  /**
+   * Get possible playback rates
+   *
+   * @return {Array} Possible playback rates
+   * @method playbackRates
+   */
+
+
+  PlaybackRateMenuButton.prototype.playbackRates = function playbackRates() {
+    return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.playbackRates;
+  };
+
+  /**
+   * Get whether playback rates is supported by the tech
+   * and an array of playback rates exists
+   *
+   * @return {Boolean} Whether changing playback rate is supported
+   * @method playbackRateSupported
+   */
+
+
+  PlaybackRateMenuButton.prototype.playbackRateSupported = function playbackRateSupported() {
+    return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && this.playbackRates().length > 0;
+  };
+
+  /**
+   * Hide playback rate controls when they're no playback rate options to select
+   *
+   * @method updateVisibility
+   */
+
+
+  PlaybackRateMenuButton.prototype.updateVisibility = function updateVisibility() {
+    if (this.playbackRateSupported()) {
+      this.removeClass('vjs-hidden');
+    } else {
+      this.addClass('vjs-hidden');
+    }
+  };
+
+  /**
+   * Update button label when rate changed
+   *
+   * @method updateLabel
+   */
+
+
+  PlaybackRateMenuButton.prototype.updateLabel = function updateLabel() {
+    if (this.playbackRateSupported()) {
+      this.labelEl_.innerHTML = this.player().playbackRate() + 'x';
+    }
+  };
+
+  return PlaybackRateMenuButton;
+}(_menuButton2['default']);
+
+PlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';
+
+_component2['default'].registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);
+exports['default'] = PlaybackRateMenuButton;
+
+},{"../../component.js":5,"../../menu/menu-button.js":47,"../../menu/menu.js":49,"../../utils/dom.js":80,"./playback-rate-menu-item.js":14}],14:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file playback-rate-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The specific menu item type for selecting a playback rate
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class PlaybackRateMenuItem
+ */
+var PlaybackRateMenuItem = function (_MenuItem) {
+  _inherits(PlaybackRateMenuItem, _MenuItem);
+
+  function PlaybackRateMenuItem(player, options) {
+    _classCallCheck(this, PlaybackRateMenuItem);
+
+    var label = options.rate;
+    var rate = parseFloat(label, 10);
+
+    // Modify options for parent MenuItem class's init.
+    options.label = label;
+    options.selected = rate === 1;
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.label = label;
+    _this.rate = rate;
+
+    _this.on(player, 'ratechange', _this.update);
+    return _this;
+  }
+
+  /**
+   * Handle click on menu item
+   *
+   * @method handleClick
+   */
+
+
+  PlaybackRateMenuItem.prototype.handleClick = function handleClick() {
+    _MenuItem.prototype.handleClick.call(this);
+    this.player().playbackRate(this.rate);
+  };
+
+  /**
+   * Update playback rate with selected rate
+   *
+   * @method update
+   */
+
+
+  PlaybackRateMenuItem.prototype.update = function update() {
+    this.selected(this.player().playbackRate() === this.rate);
+  };
+
+  return PlaybackRateMenuItem;
+}(_menuItem2['default']);
+
+PlaybackRateMenuItem.prototype.contentElType = 'button';
+
+_component2['default'].registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);
+exports['default'] = PlaybackRateMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48}],15:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file load-progress-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows load progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class LoadProgressBar
+ */
+var LoadProgressBar = function (_Component) {
+  _inherits(LoadProgressBar, _Component);
+
+  function LoadProgressBar(player, options) {
+    _classCallCheck(this, LoadProgressBar);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'progress', _this.update);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  LoadProgressBar.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-load-progress',
+      innerHTML: '<span class="vjs-control-text"><span>' + this.localize('Loaded') + '</span>: 0%</span>'
+    });
+  };
+
+  /**
+   * Update progress bar
+   *
+   * @method update
+   */
+
+
+  LoadProgressBar.prototype.update = function update() {
+    var buffered = this.player_.buffered();
+    var duration = this.player_.duration();
+    var bufferedEnd = this.player_.bufferedEnd();
+    var children = this.el_.children;
+
+    // get the percent width of a time compared to the total end
+    var percentify = function percentify(time, end) {
+      // no NaN
+      var percent = time / end || 0;
+
+      return (percent >= 1 ? 1 : percent) * 100 + '%';
+    };
+
+    // update the width of the progress bar
+    this.el_.style.width = percentify(bufferedEnd, duration);
+
+    // add child elements to represent the individual buffered time ranges
+    for (var i = 0; i < buffered.length; i++) {
+      var start = buffered.start(i);
+      var end = buffered.end(i);
+      var part = children[i];
+
+      if (!part) {
+        part = this.el_.appendChild(Dom.createEl());
+      }
+
+      // set the percent based on the width of the progress bar (bufferedEnd)
+      part.style.left = percentify(start, bufferedEnd);
+      part.style.width = percentify(end - start, bufferedEnd);
+    }
+
+    // remove unused buffered range elements
+    for (var _i = children.length; _i > buffered.length; _i--) {
+      this.el_.removeChild(children[_i - 1]);
+    }
+  };
+
+  return LoadProgressBar;
+}(_component2['default']);
+
+_component2['default'].registerComponent('LoadProgressBar', LoadProgressBar);
+exports['default'] = LoadProgressBar;
+
+},{"../../component.js":5,"../../utils/dom.js":80}],16:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+var _throttle = _dereq_('lodash-compat/function/throttle');
+
+var _throttle2 = _interopRequireDefault(_throttle);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file mouse-time-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Mouse Time Display component shows the time you will seek to
+ * when hovering over the progress bar
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class MouseTimeDisplay
+ */
+var MouseTimeDisplay = function (_Component) {
+  _inherits(MouseTimeDisplay, _Component);
+
+  function MouseTimeDisplay(player, options) {
+    _classCallCheck(this, MouseTimeDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {
+      _this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;
+    }
+
+    if (_this.keepTooltipsInside) {
+      _this.tooltip = Dom.createEl('div', { className: 'vjs-time-tooltip' });
+      _this.el().appendChild(_this.tooltip);
+      _this.addClass('vjs-keep-tooltips-inside');
+    }
+
+    _this.update(0, 0);
+
+    player.on('ready', function () {
+      _this.on(player.controlBar.progressControl.el(), 'mousemove', (0, _throttle2['default'])(Fn.bind(_this, _this.handleMouseMove), 25));
+    });
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  MouseTimeDisplay.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-mouse-display'
+    });
+  };
+
+  MouseTimeDisplay.prototype.handleMouseMove = function handleMouseMove(event) {
+    var duration = this.player_.duration();
+    var newTime = this.calculateDistance(event) * duration;
+    var position = event.pageX - Dom.findElPosition(this.el().parentNode).left;
+
+    this.update(newTime, position);
+  };
+
+  MouseTimeDisplay.prototype.update = function update(newTime, position) {
+    var time = (0, _formatTime2['default'])(newTime, this.player_.duration());
+
+    this.el().style.left = position + 'px';
+    this.el().setAttribute('data-current-time', time);
+
+    if (this.keepTooltipsInside) {
+      var clampedPosition = this.clampPosition_(position);
+      var difference = position - clampedPosition + 1;
+      var tooltipWidth = parseFloat(_window2['default'].getComputedStyle(this.tooltip).width);
+      var tooltipWidthHalf = tooltipWidth / 2;
+
+      this.tooltip.innerHTML = time;
+      this.tooltip.style.right = '-' + (tooltipWidthHalf - difference) + 'px';
+    }
+  };
+
+  MouseTimeDisplay.prototype.calculateDistance = function calculateDistance(event) {
+    return Dom.getPointerPosition(this.el().parentNode, event).x;
+  };
+
+  /**
+   * This takes in a horizontal position for the bar and returns a clamped position.
+   * Clamped position means that it will keep the position greater than half the width
+   * of the tooltip and smaller than the player width minus half the width o the tooltip.
+   * It will only clamp the position if `keepTooltipsInside` option is set.
+   *
+   * @param {Number} position the position the bar wants to be
+   * @return {Number} newPosition the (potentially) clamped position
+   * @method clampPosition_
+   */
+
+
+  MouseTimeDisplay.prototype.clampPosition_ = function clampPosition_(position) {
+    if (!this.keepTooltipsInside) {
+      return position;
+    }
+
+    var playerWidth = parseFloat(_window2['default'].getComputedStyle(this.player().el()).width);
+    var tooltipWidth = parseFloat(_window2['default'].getComputedStyle(this.tooltip).width);
+    var tooltipWidthHalf = tooltipWidth / 2;
+    var actualPosition = position;
+
+    if (position < tooltipWidthHalf) {
+      actualPosition = Math.ceil(tooltipWidthHalf);
+    } else if (position > playerWidth - tooltipWidthHalf) {
+      actualPosition = Math.floor(playerWidth - tooltipWidthHalf);
+    }
+
+    return actualPosition;
+  };
+
+  return MouseTimeDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('MouseTimeDisplay', MouseTimeDisplay);
+exports['default'] = MouseTimeDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/fn.js":82,"../../utils/format-time.js":83,"global/window":93,"lodash-compat/function/throttle":98}],17:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file play-progress-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows play progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class PlayProgressBar
+ */
+var PlayProgressBar = function (_Component) {
+  _inherits(PlayProgressBar, _Component);
+
+  function PlayProgressBar(player, options) {
+    _classCallCheck(this, PlayProgressBar);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.updateDataAttr();
+    _this.on(player, 'timeupdate', _this.updateDataAttr);
+    player.ready(Fn.bind(_this, _this.updateDataAttr));
+
+    if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {
+      _this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;
+    }
+
+    if (_this.keepTooltipsInside) {
+      _this.addClass('vjs-keep-tooltips-inside');
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PlayProgressBar.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-play-progress vjs-slider-bar',
+      innerHTML: '<span class="vjs-control-text"><span>' + this.localize('Progress') + '</span>: 0%</span>'
+    });
+  };
+
+  PlayProgressBar.prototype.updateDataAttr = function updateDataAttr() {
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+
+    this.el_.setAttribute('data-current-time', (0, _formatTime2['default'])(time, this.player_.duration()));
+  };
+
+  return PlayProgressBar;
+}(_component2['default']);
+
+_component2['default'].registerComponent('PlayProgressBar', PlayProgressBar);
+exports['default'] = PlayProgressBar;
+
+},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],18:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+_dereq_('./seek-bar.js');
+
+_dereq_('./mouse-time-display.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file progress-control.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Progress Control component contains the seek bar, load progress,
+ * and play progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class ProgressControl
+ */
+var ProgressControl = function (_Component) {
+  _inherits(ProgressControl, _Component);
+
+  function ProgressControl() {
+    _classCallCheck(this, ProgressControl);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  ProgressControl.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-progress-control vjs-control'
+    });
+  };
+
+  return ProgressControl;
+}(_component2['default']);
+
+ProgressControl.prototype.options_ = {
+  children: ['seekBar']
+};
+
+_component2['default'].registerComponent('ProgressControl', ProgressControl);
+exports['default'] = ProgressControl;
+
+},{"../../component.js":5,"./mouse-time-display.js":16,"./seek-bar.js":19}],19:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _slider = _dereq_('../../slider/slider.js');
+
+var _slider2 = _interopRequireDefault(_slider);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+_dereq_('./load-progress-bar.js');
+
+_dereq_('./play-progress-bar.js');
+
+_dereq_('./tooltip-progress-bar.js');
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file seek-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Seek Bar and holder for the progress bars
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Slider
+ * @class SeekBar
+ */
+var SeekBar = function (_Slider) {
+  _inherits(SeekBar, _Slider);
+
+  function SeekBar(player, options) {
+    _classCallCheck(this, SeekBar);
+
+    var _this = _possibleConstructorReturn(this, _Slider.call(this, player, options));
+
+    _this.on(player, 'timeupdate', _this.updateProgress);
+    _this.on(player, 'ended', _this.updateProgress);
+    player.ready(Fn.bind(_this, _this.updateProgress));
+
+    if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {
+      _this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;
+    }
+
+    if (_this.keepTooltipsInside) {
+      _this.tooltipProgressBar = _this.addChild('TooltipProgressBar');
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  SeekBar.prototype.createEl = function createEl() {
+    return _Slider.prototype.createEl.call(this, 'div', {
+      className: 'vjs-progress-holder'
+    }, {
+      'aria-label': 'progress bar'
+    });
+  };
+
+  /**
+   * Update ARIA accessibility attributes
+   *
+   * @method updateARIAAttributes
+   */
+
+
+  SeekBar.prototype.updateProgress = function updateProgress() {
+    this.updateAriaAttributes(this.el_);
+
+    if (this.keepTooltipsInside) {
+      this.updateAriaAttributes(this.tooltipProgressBar.el_);
+      this.tooltipProgressBar.el_.style.width = this.bar.el_.style.width;
+
+      var playerWidth = parseFloat(_window2['default'].getComputedStyle(this.player().el()).width);
+      var tooltipWidth = parseFloat(_window2['default'].getComputedStyle(this.tooltipProgressBar.tooltip).width);
+      var tooltipStyle = this.tooltipProgressBar.el().style;
+
+      tooltipStyle.maxWidth = Math.floor(playerWidth - tooltipWidth / 2) + 'px';
+      tooltipStyle.minWidth = Math.ceil(tooltipWidth / 2) + 'px';
+      tooltipStyle.right = '-' + tooltipWidth / 2 + 'px';
+    }
+  };
+
+  SeekBar.prototype.updateAriaAttributes = function updateAriaAttributes(el) {
+    // Allows for smooth scrubbing, when player can't keep up.
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+
+    // machine readable value of progress bar (percentage complete)
+    el.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2));
+    // human readable value of progress bar (time complete)
+    el.setAttribute('aria-valuetext', (0, _formatTime2['default'])(time, this.player_.duration()));
+  };
+
+  /**
+   * Get percentage of video played
+   *
+   * @return {Number} Percentage played
+   * @method getPercent
+   */
+
+
+  SeekBar.prototype.getPercent = function getPercent() {
+    var percent = this.player_.currentTime() / this.player_.duration();
+
+    return percent >= 1 ? 1 : percent;
+  };
+
+  /**
+   * Handle mouse down on seek bar
+   *
+   * @method handleMouseDown
+   */
+
+
+  SeekBar.prototype.handleMouseDown = function handleMouseDown(event) {
+    _Slider.prototype.handleMouseDown.call(this, event);
+
+    this.player_.scrubbing(true);
+
+    this.videoWasPlaying = !this.player_.paused();
+    this.player_.pause();
+  };
+
+  /**
+   * Handle mouse move on seek bar
+   *
+   * @method handleMouseMove
+   */
+
+
+  SeekBar.prototype.handleMouseMove = function handleMouseMove(event) {
+    var newTime = this.calculateDistance(event) * this.player_.duration();
+
+    // Don't let video end while scrubbing.
+    if (newTime === this.player_.duration()) {
+      newTime = newTime - 0.1;
+    }
+
+    // Set new time (tell player to seek to new time)
+    this.player_.currentTime(newTime);
+  };
+
+  /**
+   * Handle mouse up on seek bar
+   *
+   * @method handleMouseUp
+   */
+
+
+  SeekBar.prototype.handleMouseUp = function handleMouseUp(event) {
+    _Slider.prototype.handleMouseUp.call(this, event);
+
+    this.player_.scrubbing(false);
+    if (this.videoWasPlaying) {
+      this.player_.play();
+    }
+  };
+
+  /**
+   * Move more quickly fast forward for keyboard-only users
+   *
+   * @method stepForward
+   */
+
+
+  SeekBar.prototype.stepForward = function stepForward() {
+    // more quickly fast forward for keyboard-only users
+    this.player_.currentTime(this.player_.currentTime() + 5);
+  };
+
+  /**
+   * Move more quickly rewind for keyboard-only users
+   *
+   * @method stepBack
+   */
+
+
+  SeekBar.prototype.stepBack = function stepBack() {
+    // more quickly rewind for keyboard-only users
+    this.player_.currentTime(this.player_.currentTime() - 5);
+  };
+
+  return SeekBar;
+}(_slider2['default']);
+
+SeekBar.prototype.options_ = {
+  children: ['loadProgressBar', 'mouseTimeDisplay', 'playProgressBar'],
+  barName: 'playProgressBar'
+};
+
+SeekBar.prototype.playerEvent = 'timeupdate';
+
+_component2['default'].registerComponent('SeekBar', SeekBar);
+exports['default'] = SeekBar;
+
+},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"../../utils/format-time.js":83,"./load-progress-bar.js":15,"./play-progress-bar.js":17,"./tooltip-progress-bar.js":20,"global/window":93}],20:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file play-progress-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows play progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class PlayProgressBar
+ */
+var TooltipProgressBar = function (_Component) {
+  _inherits(TooltipProgressBar, _Component);
+
+  function TooltipProgressBar(player, options) {
+    _classCallCheck(this, TooltipProgressBar);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.updateDataAttr();
+    _this.on(player, 'timeupdate', _this.updateDataAttr);
+    player.ready(Fn.bind(_this, _this.updateDataAttr));
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  TooltipProgressBar.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-tooltip-progress-bar vjs-slider-bar',
+      innerHTML: '<div class="vjs-time-tooltip"></div>\n        <span class="vjs-control-text"><span>' + this.localize('Progress') + '</span>: 0%</span>'
+    });
+
+    this.tooltip = el.querySelector('.vjs-time-tooltip');
+
+    return el;
+  };
+
+  TooltipProgressBar.prototype.updateDataAttr = function updateDataAttr() {
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+    var formattedTime = (0, _formatTime2['default'])(time, this.player_.duration());
+
+    this.el_.setAttribute('data-current-time', formattedTime);
+    this.tooltip.innerHTML = formattedTime;
+  };
+
+  return TooltipProgressBar;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TooltipProgressBar', TooltipProgressBar);
+exports['default'] = TooltipProgressBar;
+
+},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],21:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _spacer = _dereq_('./spacer.js');
+
+var _spacer2 = _interopRequireDefault(_spacer);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file custom-control-spacer.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Spacer specifically meant to be used as an insertion point for new plugins, etc.
+ *
+ * @extends Spacer
+ * @class CustomControlSpacer
+ */
+var CustomControlSpacer = function (_Spacer) {
+  _inherits(CustomControlSpacer, _Spacer);
+
+  function CustomControlSpacer() {
+    _classCallCheck(this, CustomControlSpacer);
+
+    return _possibleConstructorReturn(this, _Spacer.apply(this, arguments));
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+  CustomControlSpacer.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-custom-control-spacer ' + _Spacer.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  CustomControlSpacer.prototype.createEl = function createEl() {
+    var el = _Spacer.prototype.createEl.call(this, {
+      className: this.buildCSSClass()
+    });
+
+    // No-flex/table-cell mode requires there be some content
+    // in the cell to fill the remaining space of the table.
+    el.innerHTML = '&nbsp;';
+    return el;
+  };
+
+  return CustomControlSpacer;
+}(_spacer2['default']);
+
+_component2['default'].registerComponent('CustomControlSpacer', CustomControlSpacer);
+exports['default'] = CustomControlSpacer;
+
+},{"../../component.js":5,"./spacer.js":22}],22:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file spacer.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Just an empty spacer element that can be used as an append point for plugins, etc.
+ * Also can be used to create space between elements when necessary.
+ *
+ * @extends Component
+ * @class Spacer
+ */
+var Spacer = function (_Component) {
+  _inherits(Spacer, _Component);
+
+  function Spacer() {
+    _classCallCheck(this, Spacer);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+  Spacer.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-spacer ' + _Component.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Spacer.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass()
+    });
+  };
+
+  return Spacer;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Spacer', Spacer);
+
+exports['default'] = Spacer;
+
+},{"../../component.js":5}],23:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file caption-settings-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The menu item for caption track settings menu
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends TextTrackMenuItem
+ * @class CaptionSettingsMenuItem
+ */
+var CaptionSettingsMenuItem = function (_TextTrackMenuItem) {
+  _inherits(CaptionSettingsMenuItem, _TextTrackMenuItem);
+
+  function CaptionSettingsMenuItem(player, options) {
+    _classCallCheck(this, CaptionSettingsMenuItem);
+
+    options.track = {
+      player: player,
+      kind: options.kind,
+      label: options.kind + ' settings',
+      selectable: false,
+      'default': false,
+      mode: 'disabled'
+    };
+
+    // CaptionSettingsMenuItem has no concept of 'selected'
+    options.selectable = false;
+
+    var _this = _possibleConstructorReturn(this, _TextTrackMenuItem.call(this, player, options));
+
+    _this.addClass('vjs-texttrack-settings');
+    _this.controlText(', opens ' + options.kind + ' settings dialog');
+    return _this;
+  }
+
+  /**
+   * Handle click on menu item
+   *
+   * @method handleClick
+   */
+
+
+  CaptionSettingsMenuItem.prototype.handleClick = function handleClick() {
+    this.player().getChild('textTrackSettings').show();
+    this.player().getChild('textTrackSettings').el_.focus();
+  };
+
+  return CaptionSettingsMenuItem;
+}(_textTrackMenuItem2['default']);
+
+_component2['default'].registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);
+exports['default'] = CaptionSettingsMenuItem;
+
+},{"../../component.js":5,"./text-track-menu-item.js":31}],24:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _captionSettingsMenuItem = _dereq_('./caption-settings-menu-item.js');
+
+var _captionSettingsMenuItem2 = _interopRequireDefault(_captionSettingsMenuItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file captions-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting captions
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class CaptionsButton
+ */
+var CaptionsButton = function (_TextTrackButton) {
+  _inherits(CaptionsButton, _TextTrackButton);
+
+  function CaptionsButton(player, options, ready) {
+    _classCallCheck(this, CaptionsButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Captions Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  CaptionsButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-captions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Update caption menu items
+   *
+   * @method update
+   */
+
+
+  CaptionsButton.prototype.update = function update() {
+    var threshold = 2;
+
+    _TextTrackButton.prototype.update.call(this);
+
+    // if native, then threshold is 1 because no settings button
+    if (this.player().tech_ && this.player().tech_.featuresNativeTextTracks) {
+      threshold = 1;
+    }
+
+    if (this.items && this.items.length > threshold) {
+      this.show();
+    } else {
+      this.hide();
+    }
+  };
+
+  /**
+   * Create caption menu items
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  CaptionsButton.prototype.createItems = function createItems() {
+    var items = [];
+
+    if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks)) {
+      items.push(new _captionSettingsMenuItem2['default'](this.player_, { kind: this.kind_ }));
+    }
+
+    return _TextTrackButton.prototype.createItems.call(this, items);
+  };
+
+  return CaptionsButton;
+}(_textTrackButton2['default']);
+
+CaptionsButton.prototype.kind_ = 'captions';
+CaptionsButton.prototype.controlText_ = 'Captions';
+
+_component2['default'].registerComponent('CaptionsButton', CaptionsButton);
+exports['default'] = CaptionsButton;
+
+},{"../../component.js":5,"./caption-settings-menu-item.js":23,"./text-track-button.js":30}],25:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _chaptersTrackMenuItem = _dereq_('./chapters-track-menu-item.js');
+
+var _chaptersTrackMenuItem2 = _interopRequireDefault(_chaptersTrackMenuItem);
+
+var _menu = _dereq_('../../menu/menu.js');
+
+var _menu2 = _interopRequireDefault(_menu);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _toTitleCase = _dereq_('../../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file chapters-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting chapters
+ * Chapters act much differently than other text tracks
+ * Cues are navigation vs. other tracks of alternative languages
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class ChaptersButton
+ */
+var ChaptersButton = function (_TextTrackButton) {
+  _inherits(ChaptersButton, _TextTrackButton);
+
+  function ChaptersButton(player, options, ready) {
+    _classCallCheck(this, ChaptersButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Chapters Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  ChaptersButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-chapters-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create a menu item for each text track
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  ChaptersButton.prototype.createItems = function createItems() {
+    var items = [];
+    var tracks = this.player_.textTracks();
+
+    if (!tracks) {
+      return items;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      if (track.kind === this.kind_) {
+        items.push(new _textTrackMenuItem2['default'](this.player_, { track: track }));
+      }
+    }
+
+    return items;
+  };
+
+  /**
+   * Create menu from chapter buttons
+   *
+   * @return {Menu} Menu of chapter buttons
+   * @method createMenu
+   */
+
+
+  ChaptersButton.prototype.createMenu = function createMenu() {
+    var _this2 = this;
+
+    var tracks = this.player_.textTracks() || [];
+    var chaptersTrack = void 0;
+    var items = this.items || [];
+
+    for (var i = tracks.length - 1; i >= 0; i--) {
+
+      // We will always choose the last track as our chaptersTrack
+      var track = tracks[i];
+
+      if (track.kind === this.kind_) {
+        chaptersTrack = track;
+
+        break;
+      }
+    }
+
+    var menu = this.menu;
+
+    if (menu === undefined) {
+      menu = new _menu2['default'](this.player_);
+
+      var title = Dom.createEl('li', {
+        className: 'vjs-menu-title',
+        innerHTML: (0, _toTitleCase2['default'])(this.kind_),
+        tabIndex: -1
+      });
+
+      menu.children_.unshift(title);
+      Dom.insertElFirst(title, menu.contentEl());
+    } else {
+      // We will empty out the menu children each time because we want a
+      // fresh new menu child list each time
+      items.forEach(function (item) {
+        return menu.removeChild(item);
+      });
+      // Empty out the ChaptersButton menu items because we no longer need them
+      items = [];
+    }
+
+    if (chaptersTrack && (chaptersTrack.cues === null || chaptersTrack.cues === undefined)) {
+      chaptersTrack.mode = 'hidden';
+
+      var remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(chaptersTrack);
+
+      if (remoteTextTrackEl) {
+        remoteTextTrackEl.addEventListener('load', function (event) {
+          return _this2.update();
+        });
+      }
+    }
+
+    if (chaptersTrack && chaptersTrack.cues && chaptersTrack.cues.length > 0) {
+      var cues = chaptersTrack.cues;
+
+      for (var _i = 0, l = cues.length; _i < l; _i++) {
+        var cue = cues[_i];
+
+        var mi = new _chaptersTrackMenuItem2['default'](this.player_, {
+          cue: cue,
+          track: chaptersTrack
+        });
+
+        items.push(mi);
+
+        menu.addChild(mi);
+      }
+    }
+
+    if (items.length > 0) {
+      this.show();
+    }
+    // Assigning the value of items back to this.items for next iteration
+    this.items = items;
+    return menu;
+  };
+
+  return ChaptersButton;
+}(_textTrackButton2['default']);
+
+ChaptersButton.prototype.kind_ = 'chapters';
+ChaptersButton.prototype.controlText_ = 'Chapters';
+
+_component2['default'].registerComponent('ChaptersButton', ChaptersButton);
+exports['default'] = ChaptersButton;
+
+},{"../../component.js":5,"../../menu/menu.js":49,"../../utils/dom.js":80,"../../utils/to-title-case.js":89,"./chapters-track-menu-item.js":26,"./text-track-button.js":30,"./text-track-menu-item.js":31}],26:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file chapters-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The chapter track menu item
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class ChaptersTrackMenuItem
+ */
+var ChaptersTrackMenuItem = function (_MenuItem) {
+  _inherits(ChaptersTrackMenuItem, _MenuItem);
+
+  function ChaptersTrackMenuItem(player, options) {
+    _classCallCheck(this, ChaptersTrackMenuItem);
+
+    var track = options.track;
+    var cue = options.cue;
+    var currentTime = player.currentTime();
+
+    // Modify options for parent MenuItem class's init.
+    options.label = cue.text;
+    options.selected = cue.startTime <= currentTime && currentTime < cue.endTime;
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.track = track;
+    _this.cue = cue;
+    track.addEventListener('cuechange', Fn.bind(_this, _this.update));
+    return _this;
+  }
+
+  /**
+   * Handle click on menu item
+   *
+   * @method handleClick
+   */
+
+
+  ChaptersTrackMenuItem.prototype.handleClick = function handleClick() {
+    _MenuItem.prototype.handleClick.call(this);
+    this.player_.currentTime(this.cue.startTime);
+    this.update(this.cue.startTime);
+  };
+
+  /**
+   * Update chapter menu item
+   *
+   * @method update
+   */
+
+
+  ChaptersTrackMenuItem.prototype.update = function update() {
+    var cue = this.cue;
+    var currentTime = this.player_.currentTime();
+
+    // vjs.log(currentTime, cue.startTime);
+    this.selected(cue.startTime <= currentTime && currentTime < cue.endTime);
+  };
+
+  return ChaptersTrackMenuItem;
+}(_menuItem2['default']);
+
+_component2['default'].registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);
+exports['default'] = ChaptersTrackMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],27:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file descriptions-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting descriptions
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class DescriptionsButton
+ */
+var DescriptionsButton = function (_TextTrackButton) {
+  _inherits(DescriptionsButton, _TextTrackButton);
+
+  function DescriptionsButton(player, options, ready) {
+    _classCallCheck(this, DescriptionsButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Descriptions Menu');
+
+    var tracks = player.textTracks();
+
+    if (tracks) {
+      (function () {
+        var changeHandler = Fn.bind(_this, _this.handleTracksChange);
+
+        tracks.addEventListener('change', changeHandler);
+        _this.on('dispose', function () {
+          tracks.removeEventListener('change', changeHandler);
+        });
+      })();
+    }
+    return _this;
+  }
+
+  /**
+   * Handle text track change
+   *
+   * @method handleTracksChange
+   */
+
+
+  DescriptionsButton.prototype.handleTracksChange = function handleTracksChange(event) {
+    var tracks = this.player().textTracks();
+    var disabled = false;
+
+    // Check whether a track of a different kind is showing
+    for (var i = 0, l = tracks.length; i < l; i++) {
+      var track = tracks[i];
+
+      if (track.kind !== this.kind_ && track.mode === 'showing') {
+        disabled = true;
+        break;
+      }
+    }
+
+    // If another track is showing, disable this menu button
+    if (disabled) {
+      this.disable();
+    } else {
+      this.enable();
+    }
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  DescriptionsButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-descriptions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  return DescriptionsButton;
+}(_textTrackButton2['default']);
+
+DescriptionsButton.prototype.kind_ = 'descriptions';
+DescriptionsButton.prototype.controlText_ = 'Descriptions';
+
+_component2['default'].registerComponent('DescriptionsButton', DescriptionsButton);
+exports['default'] = DescriptionsButton;
+
+},{"../../component.js":5,"../../utils/fn.js":82,"./text-track-button.js":30}],28:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file off-text-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A special menu item for turning of a specific type of text track
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends TextTrackMenuItem
+ * @class OffTextTrackMenuItem
+ */
+var OffTextTrackMenuItem = function (_TextTrackMenuItem) {
+  _inherits(OffTextTrackMenuItem, _TextTrackMenuItem);
+
+  function OffTextTrackMenuItem(player, options) {
+    _classCallCheck(this, OffTextTrackMenuItem);
+
+    // Create pseudo track info
+    // Requires options['kind']
+    options.track = {
+      player: player,
+      kind: options.kind,
+      label: options.kind + ' off',
+      'default': false,
+      mode: 'disabled'
+    };
+
+    // MenuItem is selectable
+    options.selectable = true;
+
+    var _this = _possibleConstructorReturn(this, _TextTrackMenuItem.call(this, player, options));
+
+    _this.selected(true);
+    return _this;
+  }
+
+  /**
+   * Handle text track change
+   *
+   * @param {Object} event Event object
+   * @method handleTracksChange
+   */
+
+
+  OffTextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {
+    var tracks = this.player().textTracks();
+    var selected = true;
+
+    for (var i = 0, l = tracks.length; i < l; i++) {
+      var track = tracks[i];
+
+      if (track.kind === this.track.kind && track.mode === 'showing') {
+        selected = false;
+        break;
+      }
+    }
+
+    this.selected(selected);
+  };
+
+  return OffTextTrackMenuItem;
+}(_textTrackMenuItem2['default']);
+
+_component2['default'].registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);
+exports['default'] = OffTextTrackMenuItem;
+
+},{"../../component.js":5,"./text-track-menu-item.js":31}],29:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file subtitles-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting subtitles
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class SubtitlesButton
+ */
+var SubtitlesButton = function (_TextTrackButton) {
+  _inherits(SubtitlesButton, _TextTrackButton);
+
+  function SubtitlesButton(player, options, ready) {
+    _classCallCheck(this, SubtitlesButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Subtitles Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  SubtitlesButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-subtitles-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  return SubtitlesButton;
+}(_textTrackButton2['default']);
+
+SubtitlesButton.prototype.kind_ = 'subtitles';
+SubtitlesButton.prototype.controlText_ = 'Subtitles';
+
+_component2['default'].registerComponent('SubtitlesButton', SubtitlesButton);
+exports['default'] = SubtitlesButton;
+
+},{"../../component.js":5,"./text-track-button.js":30}],30:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackButton = _dereq_('../track-button.js');
+
+var _trackButton2 = _interopRequireDefault(_trackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _offTextTrackMenuItem = _dereq_('./off-text-track-menu-item.js');
+
+var _offTextTrackMenuItem2 = _interopRequireDefault(_offTextTrackMenuItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base class for buttons that toggle specific text track types (e.g. subtitles)
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuButton
+ * @class TextTrackButton
+ */
+var TextTrackButton = function (_TrackButton) {
+  _inherits(TextTrackButton, _TrackButton);
+
+  function TextTrackButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, TextTrackButton);
+
+    options.tracks = player.textTracks();
+
+    return _possibleConstructorReturn(this, _TrackButton.call(this, player, options));
+  }
+
+  /**
+   * Create a menu item for each text track
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  TextTrackButton.prototype.createItems = function createItems() {
+    var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    // Add an OFF menu item to turn all tracks off
+    items.push(new _offTextTrackMenuItem2['default'](this.player_, { kind: this.kind_ }));
+
+    var tracks = this.player_.textTracks();
+
+    if (!tracks) {
+      return items;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      // only add tracks that are of the appropriate kind and have a label
+      if (track.kind === this.kind_) {
+        items.push(new _textTrackMenuItem2['default'](this.player_, {
+          track: track,
+          // MenuItem is selectable
+          selectable: true
+        }));
+      }
+    }
+
+    return items;
+  };
+
+  return TextTrackButton;
+}(_trackButton2['default']);
+
+_component2['default'].registerComponent('TextTrackButton', TextTrackButton);
+exports['default'] = TextTrackButton;
+
+},{"../../component.js":5,"../track-button.js":36,"./off-text-track-menu-item.js":28,"./text-track-menu-item.js":31}],31:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The specific menu item type for selecting a language within a text track kind
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class TextTrackMenuItem
+ */
+var TextTrackMenuItem = function (_MenuItem) {
+  _inherits(TextTrackMenuItem, _MenuItem);
+
+  function TextTrackMenuItem(player, options) {
+    _classCallCheck(this, TextTrackMenuItem);
+
+    var track = options.track;
+    var tracks = player.textTracks();
+
+    // Modify options for parent MenuItem class's init.
+    options.label = track.label || track.language || 'Unknown';
+    options.selected = track['default'] || track.mode === 'showing';
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.track = track;
+
+    if (tracks) {
+      (function () {
+        var changeHandler = Fn.bind(_this, _this.handleTracksChange);
+
+        tracks.addEventListener('change', changeHandler);
+        _this.on('dispose', function () {
+          tracks.removeEventListener('change', changeHandler);
+        });
+      })();
+    }
+
+    // iOS7 doesn't dispatch change events to TextTrackLists when an
+    // associated track's mode changes. Without something like
+    // Object.observe() (also not present on iOS7), it's not
+    // possible to detect changes to the mode attribute and polyfill
+    // the change event. As a poor substitute, we manually dispatch
+    // change events whenever the controls modify the mode.
+    if (tracks && tracks.onchange === undefined) {
+      (function () {
+        var event = void 0;
+
+        _this.on(['tap', 'click'], function () {
+          if (_typeof(_window2['default'].Event) !== 'object') {
+            // Android 2.3 throws an Illegal Constructor error for window.Event
+            try {
+              event = new _window2['default'].Event('change');
+            } catch (err) {
+              // continue regardless of error
+            }
+          }
+
+          if (!event) {
+            event = _document2['default'].createEvent('Event');
+            event.initEvent('change', true, true);
+          }
+
+          tracks.dispatchEvent(event);
+        });
+      })();
+    }
+    return _this;
+  }
+
+  /**
+   * Handle click on text track
+   *
+   * @method handleClick
+   */
+
+
+  TextTrackMenuItem.prototype.handleClick = function handleClick(event) {
+    var kind = this.track.kind;
+    var tracks = this.player_.textTracks();
+
+    _MenuItem.prototype.handleClick.call(this, event);
+
+    if (!tracks) {
+      return;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      if (track.kind !== kind) {
+        continue;
+      }
+
+      if (track === this.track) {
+        track.mode = 'showing';
+      } else {
+        track.mode = 'disabled';
+      }
+    }
+  };
+
+  /**
+   * Handle text track change
+   *
+   * @method handleTracksChange
+   */
+
+
+  TextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {
+    this.selected(this.track.mode === 'showing');
+  };
+
+  return TextTrackMenuItem;
+}(_menuItem2['default']);
+
+_component2['default'].registerComponent('TextTrackMenuItem', TextTrackMenuItem);
+exports['default'] = TextTrackMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82,"global/document":92,"global/window":93}],32:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file current-time-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the current time
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class CurrentTimeDisplay
+ */
+var CurrentTimeDisplay = function (_Component) {
+  _inherits(CurrentTimeDisplay, _Component);
+
+  function CurrentTimeDisplay(player, options) {
+    _classCallCheck(this, CurrentTimeDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'timeupdate', _this.updateContent);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  CurrentTimeDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-current-time vjs-time-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-current-time-display',
+      // label the current time for screen reader users
+      innerHTML: '<span class="vjs-control-text">Current Time </span>' + '0:00'
+    }, {
+      // tell screen readers not to automatically read the time as it changes
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  /**
+   * Update current time display
+   *
+   * @method updateContent
+   */
+
+
+  CurrentTimeDisplay.prototype.updateContent = function updateContent() {
+    // Allows for smooth scrubbing, when player can't keep up.
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+    var localizedText = this.localize('Current Time');
+    var formattedTime = (0, _formatTime2['default'])(time, this.player_.duration());
+
+    if (formattedTime !== this.formattedTime_) {
+      this.formattedTime_ = formattedTime;
+      this.contentEl_.innerHTML = '<span class="vjs-control-text">' + localizedText + '</span> ' + formattedTime;
+    }
+  };
+
+  return CurrentTimeDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);
+exports['default'] = CurrentTimeDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],33:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file duration-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the duration
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class DurationDisplay
+ */
+var DurationDisplay = function (_Component) {
+  _inherits(DurationDisplay, _Component);
+
+  function DurationDisplay(player, options) {
+    _classCallCheck(this, DurationDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'durationchange', _this.updateContent);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  DurationDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-duration vjs-time-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-duration-display',
+      // label the duration time for screen reader users
+      innerHTML: '<span class="vjs-control-text">' + this.localize('Duration Time') + '</span> 0:00'
+    }, {
+      // tell screen readers not to automatically read the time as it changes
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  /**
+   * Update duration time display
+   *
+   * @method updateContent
+   */
+
+
+  DurationDisplay.prototype.updateContent = function updateContent() {
+    var duration = this.player_.duration();
+
+    if (duration && this.duration_ !== duration) {
+      this.duration_ = duration;
+      var localizedText = this.localize('Duration Time');
+      var formattedTime = (0, _formatTime2['default'])(duration);
+
+      // label the duration time for screen reader users
+      this.contentEl_.innerHTML = '<span class="vjs-control-text">' + localizedText + '</span> ' + formattedTime;
+    }
+  };
+
+  return DurationDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('DurationDisplay', DurationDisplay);
+exports['default'] = DurationDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],34:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file remaining-time-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the time left in the video
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class RemainingTimeDisplay
+ */
+var RemainingTimeDisplay = function (_Component) {
+  _inherits(RemainingTimeDisplay, _Component);
+
+  function RemainingTimeDisplay(player, options) {
+    _classCallCheck(this, RemainingTimeDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'timeupdate', _this.updateContent);
+    _this.on(player, 'durationchange', _this.updateContent);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  RemainingTimeDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-remaining-time vjs-time-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-remaining-time-display',
+      // label the remaining time for screen reader users
+      innerHTML: '<span class="vjs-control-text">' + this.localize('Remaining Time') + '</span> -0:00'
+    }, {
+      // tell screen readers not to automatically read the time as it changes
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  /**
+   * Update remaining time display
+   *
+   * @method updateContent
+   */
+
+
+  RemainingTimeDisplay.prototype.updateContent = function updateContent() {
+    if (this.player_.duration()) {
+      var localizedText = this.localize('Remaining Time');
+      var formattedTime = (0, _formatTime2['default'])(this.player_.remainingTime());
+
+      if (formattedTime !== this.formattedTime_) {
+        this.formattedTime_ = formattedTime;
+        this.contentEl_.innerHTML = '<span class="vjs-control-text">' + localizedText + '</span> -' + formattedTime;
+      }
+    }
+
+    // Allows for smooth scrubbing, when player can't keep up.
+    // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();
+    // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());
+  };
+
+  return RemainingTimeDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);
+exports['default'] = RemainingTimeDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],35:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file time-divider.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The separator between the current time and duration.
+ * Can be hidden if it's not needed in the design.
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class TimeDivider
+ */
+var TimeDivider = function (_Component) {
+  _inherits(TimeDivider, _Component);
+
+  function TimeDivider() {
+    _classCallCheck(this, TimeDivider);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  TimeDivider.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-time-control vjs-time-divider',
+      innerHTML: '<div><span>/</span></div>'
+    });
+  };
+
+  return TimeDivider;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TimeDivider', TimeDivider);
+exports['default'] = TimeDivider;
+
+},{"../../component.js":5}],36:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuButton = _dereq_('../menu/menu-button.js');
+
+var _menuButton2 = _interopRequireDefault(_menuButton);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file track-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base class for buttons that toggle specific text track types (e.g. subtitles)
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuButton
+ * @class TrackButton
+ */
+var TrackButton = function (_MenuButton) {
+  _inherits(TrackButton, _MenuButton);
+
+  function TrackButton(player, options) {
+    _classCallCheck(this, TrackButton);
+
+    var tracks = options.tracks;
+
+    var _this = _possibleConstructorReturn(this, _MenuButton.call(this, player, options));
+
+    if (_this.items.length <= 1) {
+      _this.hide();
+    }
+
+    if (!tracks) {
+      return _possibleConstructorReturn(_this);
+    }
+
+    var updateHandler = Fn.bind(_this, _this.update);
+
+    tracks.addEventListener('removetrack', updateHandler);
+    tracks.addEventListener('addtrack', updateHandler);
+
+    _this.player_.on('dispose', function () {
+      tracks.removeEventListener('removetrack', updateHandler);
+      tracks.removeEventListener('addtrack', updateHandler);
+    });
+    return _this;
+  }
+
+  return TrackButton;
+}(_menuButton2['default']);
+
+_component2['default'].registerComponent('TrackButton', TrackButton);
+exports['default'] = TrackButton;
+
+},{"../component.js":5,"../menu/menu-button.js":47,"../utils/fn.js":82}],37:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _slider = _dereq_('../../slider/slider.js');
+
+var _slider2 = _interopRequireDefault(_slider);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+_dereq_('./volume-level.js');
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+// Required children
+
+
+/**
+ * The bar that contains the volume level and can be clicked on to adjust the level
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Slider
+ * @class VolumeBar
+ */
+var VolumeBar = function (_Slider) {
+  _inherits(VolumeBar, _Slider);
+
+  function VolumeBar(player, options) {
+    _classCallCheck(this, VolumeBar);
+
+    var _this = _possibleConstructorReturn(this, _Slider.call(this, player, options));
+
+    _this.on(player, 'volumechange', _this.updateARIAAttributes);
+    player.ready(Fn.bind(_this, _this.updateARIAAttributes));
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  VolumeBar.prototype.createEl = function createEl() {
+    return _Slider.prototype.createEl.call(this, 'div', {
+      className: 'vjs-volume-bar vjs-slider-bar'
+    }, {
+      'aria-label': 'volume level'
+    });
+  };
+
+  /**
+   * Handle mouse move on volume bar
+   *
+   * @method handleMouseMove
+   */
+
+
+  VolumeBar.prototype.handleMouseMove = function handleMouseMove(event) {
+    this.checkMuted();
+    this.player_.volume(this.calculateDistance(event));
+  };
+
+  VolumeBar.prototype.checkMuted = function checkMuted() {
+    if (this.player_.muted()) {
+      this.player_.muted(false);
+    }
+  };
+
+  /**
+   * Get percent of volume level
+   *
+   * @retun {Number} Volume level percent
+   * @method getPercent
+   */
+
+
+  VolumeBar.prototype.getPercent = function getPercent() {
+    if (this.player_.muted()) {
+      return 0;
+    }
+    return this.player_.volume();
+  };
+
+  /**
+   * Increase volume level for keyboard users
+   *
+   * @method stepForward
+   */
+
+
+  VolumeBar.prototype.stepForward = function stepForward() {
+    this.checkMuted();
+    this.player_.volume(this.player_.volume() + 0.1);
+  };
+
+  /**
+   * Decrease volume level for keyboard users
+   *
+   * @method stepBack
+   */
+
+
+  VolumeBar.prototype.stepBack = function stepBack() {
+    this.checkMuted();
+    this.player_.volume(this.player_.volume() - 0.1);
+  };
+
+  /**
+   * Update ARIA accessibility attributes
+   *
+   * @method updateARIAAttributes
+   */
+
+
+  VolumeBar.prototype.updateARIAAttributes = function updateARIAAttributes() {
+    // Current value of volume bar as a percentage
+    var volume = (this.player_.volume() * 100).toFixed(2);
+
+    this.el_.setAttribute('aria-valuenow', volume);
+    this.el_.setAttribute('aria-valuetext', volume + '%');
+  };
+
+  return VolumeBar;
+}(_slider2['default']);
+
+VolumeBar.prototype.options_ = {
+  children: ['volumeLevel'],
+  barName: 'volumeLevel'
+};
+
+VolumeBar.prototype.playerEvent = 'volumechange';
+
+_component2['default'].registerComponent('VolumeBar', VolumeBar);
+exports['default'] = VolumeBar;
+
+},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"./volume-level.js":39}],38:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+_dereq_('./volume-bar.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-control.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+// Required children
+
+
+/**
+ * The component for controlling the volume level
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class VolumeControl
+ */
+var VolumeControl = function (_Component) {
+  _inherits(VolumeControl, _Component);
+
+  function VolumeControl(player, options) {
+    _classCallCheck(this, VolumeControl);
+
+    // hide volume controls when they're not supported by the current tech
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    if (player.tech_ && player.tech_.featuresVolumeControl === false) {
+      _this.addClass('vjs-hidden');
+    }
+    _this.on(player, 'loadstart', function () {
+      if (player.tech_.featuresVolumeControl === false) {
+        this.addClass('vjs-hidden');
+      } else {
+        this.removeClass('vjs-hidden');
+      }
+    });
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  VolumeControl.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-volume-control vjs-control'
+    });
+  };
+
+  return VolumeControl;
+}(_component2['default']);
+
+VolumeControl.prototype.options_ = {
+  children: ['volumeBar']
+};
+
+_component2['default'].registerComponent('VolumeControl', VolumeControl);
+exports['default'] = VolumeControl;
+
+},{"../../component.js":5,"./volume-bar.js":37}],39:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-level.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows volume level
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class VolumeLevel
+ */
+var VolumeLevel = function (_Component) {
+  _inherits(VolumeLevel, _Component);
+
+  function VolumeLevel() {
+    _classCallCheck(this, VolumeLevel);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  VolumeLevel.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-volume-level',
+      innerHTML: '<span class="vjs-control-text"></span>'
+    });
+  };
+
+  return VolumeLevel;
+}(_component2['default']);
+
+_component2['default'].registerComponent('VolumeLevel', VolumeLevel);
+exports['default'] = VolumeLevel;
+
+},{"../../component.js":5}],40:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _popup = _dereq_('../popup/popup.js');
+
+var _popup2 = _interopRequireDefault(_popup);
+
+var _popupButton = _dereq_('../popup/popup-button.js');
+
+var _popupButton2 = _interopRequireDefault(_popupButton);
+
+var _muteToggle = _dereq_('./mute-toggle.js');
+
+var _muteToggle2 = _interopRequireDefault(_muteToggle);
+
+var _volumeBar = _dereq_('./volume-control/volume-bar.js');
+
+var _volumeBar2 = _interopRequireDefault(_volumeBar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-menu-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Button for volume popup
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends PopupButton
+ * @class VolumeMenuButton
+ */
+var VolumeMenuButton = function (_PopupButton) {
+  _inherits(VolumeMenuButton, _PopupButton);
+
+  function VolumeMenuButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, VolumeMenuButton);
+
+    // Default to inline
+    if (options.inline === undefined) {
+      options.inline = true;
+    }
+
+    // If the vertical option isn't passed at all, default to true.
+    if (options.vertical === undefined) {
+      // If an inline volumeMenuButton is used, we should default to using
+      // a horizontal slider for obvious reasons.
+      if (options.inline) {
+        options.vertical = false;
+      } else {
+        options.vertical = true;
+      }
+    }
+
+    // The vertical option needs to be set on the volumeBar as well,
+    // since that will need to be passed along to the VolumeBar constructor
+    options.volumeBar = options.volumeBar || {};
+    options.volumeBar.vertical = !!options.vertical;
+
+    // Same listeners as MuteToggle
+    var _this = _possibleConstructorReturn(this, _PopupButton.call(this, player, options));
+
+    _this.on(player, 'volumechange', _this.volumeUpdate);
+    _this.on(player, 'loadstart', _this.volumeUpdate);
+
+    // hide mute toggle if the current tech doesn't support volume control
+    function updateVisibility() {
+      if (player.tech_ && player.tech_.featuresVolumeControl === false) {
+        this.addClass('vjs-hidden');
+      } else {
+        this.removeClass('vjs-hidden');
+      }
+    }
+
+    updateVisibility.call(_this);
+    _this.on(player, 'loadstart', updateVisibility);
+
+    _this.on(_this.volumeBar, ['slideractive', 'focus'], function () {
+      this.addClass('vjs-slider-active');
+    });
+
+    _this.on(_this.volumeBar, ['sliderinactive', 'blur'], function () {
+      this.removeClass('vjs-slider-active');
+    });
+
+    _this.on(_this.volumeBar, ['focus'], function () {
+      this.addClass('vjs-lock-showing');
+    });
+
+    _this.on(_this.volumeBar, ['blur'], function () {
+      this.removeClass('vjs-lock-showing');
+    });
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  VolumeMenuButton.prototype.buildCSSClass = function buildCSSClass() {
+    var orientationClass = '';
+
+    if (this.options_.vertical) {
+      orientationClass = 'vjs-volume-menu-button-vertical';
+    } else {
+      orientationClass = 'vjs-volume-menu-button-horizontal';
+    }
+
+    return 'vjs-volume-menu-button ' + _PopupButton.prototype.buildCSSClass.call(this) + ' ' + orientationClass;
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {Popup} The volume popup button
+   * @method createPopup
+   */
+
+
+  VolumeMenuButton.prototype.createPopup = function createPopup() {
+    var popup = new _popup2['default'](this.player_, {
+      contentElType: 'div'
+    });
+
+    var vb = new _volumeBar2['default'](this.player_, this.options_.volumeBar);
+
+    popup.addChild(vb);
+
+    this.menuContent = popup;
+    this.volumeBar = vb;
+
+    this.attachVolumeBarEvents();
+
+    return popup;
+  };
+
+  /**
+   * Handle click on volume popup and calls super
+   *
+   * @method handleClick
+   */
+
+
+  VolumeMenuButton.prototype.handleClick = function handleClick() {
+    _muteToggle2['default'].prototype.handleClick.call(this);
+    _PopupButton.prototype.handleClick.call(this);
+  };
+
+  VolumeMenuButton.prototype.attachVolumeBarEvents = function attachVolumeBarEvents() {
+    this.menuContent.on(['mousedown', 'touchdown'], Fn.bind(this, this.handleMouseDown));
+  };
+
+  VolumeMenuButton.prototype.handleMouseDown = function handleMouseDown(event) {
+    this.on(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));
+    this.on(this.el_.ownerDocument, ['mouseup', 'touchend'], this.handleMouseUp);
+  };
+
+  VolumeMenuButton.prototype.handleMouseUp = function handleMouseUp(event) {
+    this.off(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));
+  };
+
+  return VolumeMenuButton;
+}(_popupButton2['default']);
+
+VolumeMenuButton.prototype.volumeUpdate = _muteToggle2['default'].prototype.update;
+VolumeMenuButton.prototype.controlText_ = 'Mute';
+
+_component2['default'].registerComponent('VolumeMenuButton', VolumeMenuButton);
+exports['default'] = VolumeMenuButton;
+
+},{"../component.js":5,"../popup/popup-button.js":53,"../popup/popup.js":54,"../utils/fn.js":82,"./mute-toggle.js":11,"./volume-control/volume-bar.js":37}],41:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _modalDialog = _dereq_('./modal-dialog');
+
+var _modalDialog2 = _interopRequireDefault(_modalDialog);
+
+var _mergeOptions = _dereq_('./utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file error-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Display that an error has occurred making the video unplayable.
+ *
+ * @extends ModalDialog
+ * @class ErrorDisplay
+ */
+var ErrorDisplay = function (_ModalDialog) {
+  _inherits(ErrorDisplay, _ModalDialog);
+
+  /**
+   * Constructor for error display modal.
+   *
+   * @param  {Player} player
+   * @param  {Object} [options]
+   */
+  function ErrorDisplay(player, options) {
+    _classCallCheck(this, ErrorDisplay);
+
+    var _this = _possibleConstructorReturn(this, _ModalDialog.call(this, player, options));
+
+    _this.on(player, 'error', _this.open);
+    return _this;
+  }
+
+  /**
+   * Include the old class for backward-compatibility.
+   *
+   * This can be removed in 6.0.
+   *
+   * @method buildCSSClass
+   * @deprecated
+   * @return {String}
+   */
+
+
+  ErrorDisplay.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-error-display ' + _ModalDialog.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Generates the modal content based on the player error.
+   *
+   * @return {String|Null}
+   */
+
+
+  ErrorDisplay.prototype.content = function content() {
+    var error = this.player().error();
+
+    return error ? this.localize(error.message) : '';
+  };
+
+  return ErrorDisplay;
+}(_modalDialog2['default']);
+
+ErrorDisplay.prototype.options_ = (0, _mergeOptions2['default'])(_modalDialog2['default'].prototype.options_, {
+  fillAlways: true,
+  temporary: false,
+  uncloseable: true
+});
+
+_component2['default'].registerComponent('ErrorDisplay', ErrorDisplay);
+exports['default'] = ErrorDisplay;
+
+},{"./component":5,"./modal-dialog":50,"./utils/merge-options":86}],42:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+var EventTarget = function EventTarget() {}; /**
+                                              * @file event-target.js
+                                              */
+
+
+EventTarget.prototype.allowedEvents_ = {};
+
+EventTarget.prototype.on = function (type, fn) {
+  // Remove the addEventListener alias before calling Events.on
+  // so we don't get into an infinite type loop
+  var ael = this.addEventListener;
+
+  this.addEventListener = function () {};
+  Events.on(this, type, fn);
+  this.addEventListener = ael;
+};
+
+EventTarget.prototype.addEventListener = EventTarget.prototype.on;
+
+EventTarget.prototype.off = function (type, fn) {
+  Events.off(this, type, fn);
+};
+
+EventTarget.prototype.removeEventListener = EventTarget.prototype.off;
+
+EventTarget.prototype.one = function (type, fn) {
+  // Remove the addEventListener alias before calling Events.on
+  // so we don't get into an infinite type loop
+  var ael = this.addEventListener;
+
+  this.addEventListener = function () {};
+  Events.one(this, type, fn);
+  this.addEventListener = ael;
+};
+
+EventTarget.prototype.trigger = function (event) {
+  var type = event.type || event;
+
+  if (typeof event === 'string') {
+    event = { type: type };
+  }
+  event = Events.fixEvent(event);
+
+  if (this.allowedEvents_[type] && this['on' + type]) {
+    this['on' + type](event);
+  }
+
+  Events.trigger(this, event);
+};
+
+// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()
+EventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;
+
+exports['default'] = EventTarget;
+
+},{"./utils/events.js":81}],43:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _log = _dereq_('./utils/log');
+
+var _log2 = _interopRequireDefault(_log);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*
+ * @file extend.js
+ *
+ * A combination of node inherits and babel's inherits (after transpile).
+ * Both work the same but node adds `super_` to the subClass
+ * and Bable adds the superClass as __proto__. Both seem useful.
+ */
+var _inherits = function _inherits(subClass, superClass) {
+  if (typeof superClass !== 'function' && superClass !== null) {
+    throw new TypeError('Super expression must either be null or a function, not ' + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass)));
+  }
+
+  subClass.prototype = Object.create(superClass && superClass.prototype, {
+    constructor: {
+      value: subClass,
+      enumerable: false,
+      writable: true,
+      configurable: true
+    }
+  });
+
+  if (superClass) {
+    // node
+    subClass.super_ = superClass;
+  }
+};
+
+/*
+ * Function for subclassing using the same inheritance that
+ * videojs uses internally
+ * ```js
+ * var Button = videojs.getComponent('Button');
+ * ```
+ * ```js
+ * var MyButton = videojs.extend(Button, {
+ *   constructor: function(player, options) {
+ *     Button.call(this, player, options);
+ *   },
+ *   onClick: function() {
+ *     // doSomething
+ *   }
+ * });
+ * ```
+ */
+var extendFn = function extendFn(superClass) {
+  var subClassMethods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+  var subClass = function subClass() {
+    superClass.apply(this, arguments);
+  };
+
+  var methods = {};
+
+  if ((typeof subClassMethods === 'undefined' ? 'undefined' : _typeof(subClassMethods)) === 'object') {
+    if (typeof subClassMethods.init === 'function') {
+      _log2['default'].warn('Constructor logic via init() is deprecated; please use constructor() instead.');
+      subClassMethods.constructor = subClassMethods.init;
+    }
+    if (subClassMethods.constructor !== Object.prototype.constructor) {
+      subClass = subClassMethods.constructor;
+    }
+    methods = subClassMethods;
+  } else if (typeof subClassMethods === 'function') {
+    subClass = subClassMethods;
+  }
+
+  _inherits(subClass, superClass);
+
+  // Extend subObj's prototype with functions and other properties from props
+  for (var name in methods) {
+    if (methods.hasOwnProperty(name)) {
+      subClass.prototype[name] = methods[name];
+    }
+  }
+
+  return subClass;
+};
+
+exports['default'] = extendFn;
+
+},{"./utils/log":85}],44:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*
+ * Store the browser-specific methods for the fullscreen API
+ * @type {Object|undefined}
+ * @private
+ */
+var FullscreenApi = {};
+
+// browser API methods
+// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js
+/**
+ * @file fullscreen-api.js
+ */
+var apiMap = [
+// Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
+['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],
+// WebKit
+['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'],
+// Old WebKit (Safari 5.1)
+['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'],
+// Mozilla
+['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],
+// Microsoft
+['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];
+
+var specApi = apiMap[0];
+var browserApi = void 0;
+
+// determine the supported set of functions
+for (var i = 0; i < apiMap.length; i++) {
+  // check for exitFullscreen function
+  if (apiMap[i][1] in _document2['default']) {
+    browserApi = apiMap[i];
+    break;
+  }
+}
+
+// map the browser API names to the spec API names
+if (browserApi) {
+  for (var _i = 0; _i < browserApi.length; _i++) {
+    FullscreenApi[specApi[_i]] = browserApi[_i];
+  }
+}
+
+exports['default'] = FullscreenApi;
+
+},{"global/document":92}],45:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file loading-spinner.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/* Loading Spinner
+================================================================================ */
+/**
+ * Loading spinner for waiting events
+ *
+ * @extends Component
+ * @class LoadingSpinner
+ */
+var LoadingSpinner = function (_Component) {
+  _inherits(LoadingSpinner, _Component);
+
+  function LoadingSpinner() {
+    _classCallCheck(this, LoadingSpinner);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @method createEl
+   */
+  LoadingSpinner.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-loading-spinner',
+      dir: 'ltr'
+    });
+  };
+
+  return LoadingSpinner;
+}(_component2['default']);
+
+_component2['default'].registerComponent('LoadingSpinner', LoadingSpinner);
+exports['default'] = LoadingSpinner;
+
+},{"./component":5}],46:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file media-error.js
+                                                                                                                                                                                                                                                   */
+
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*
+ * Custom MediaError class which mimics the standard HTML5 MediaError class.
+ *
+ * @param {Number|String|Object|MediaError} value
+ *        This can be of multiple types:
+ *        - Number: should be a standard error code
+ *        - String: an error message (the code will be 0)
+ *        - Object: arbitrary properties
+ *        - MediaError (native): used to populate a video.js MediaError object
+ *        - MediaError (video.js): will return itself if it's already a
+ *          video.js MediaError object.
+ */
+function MediaError(value) {
+
+  // Allow redundant calls to this constructor to avoid having `instanceof`
+  // checks peppered around the code.
+  if (value instanceof MediaError) {
+    return value;
+  }
+
+  if (typeof value === 'number') {
+    this.code = value;
+  } else if (typeof value === 'string') {
+    // default code is zero, so this is a custom error
+    this.message = value;
+  } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
+
+    // We assign the `code` property manually because native MediaError objects
+    // do not expose it as an own/enumerable property of the object.
+    if (typeof value.code === 'number') {
+      this.code = value.code;
+    }
+
+    (0, _object2['default'])(this, value);
+  }
+
+  if (!this.message) {
+    this.message = MediaError.defaultMessages[this.code] || '';
+  }
+}
+
+/*
+ * The error code that refers two one of the defined
+ * MediaError types
+ *
+ * @type {Number}
+ */
+MediaError.prototype.code = 0;
+
+/*
+ * An optional message to be shown with the error.
+ * Message is not part of the HTML5 video spec
+ * but allows for more informative custom errors.
+ *
+ * @type {String}
+ */
+MediaError.prototype.message = '';
+
+/*
+ * An optional status code that can be set by plugins
+ * to allow even more detail about the error.
+ * For example the HLS plugin might provide the specific
+ * HTTP status code that was returned when the error
+ * occurred, then allowing a custom error overlay
+ * to display more information.
+ *
+ * @type {Array}
+ */
+MediaError.prototype.status = null;
+
+// These errors are indexed by the W3C standard numeric value. The order
+// should not be changed!
+MediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED'];
+
+MediaError.defaultMessages = {
+  1: 'You aborted the media playback',
+  2: 'A network error caused the media download to fail part-way.',
+  3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',
+  4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',
+  5: 'The media is encrypted and we do not have the keys to decrypt it.'
+};
+
+// Add types as properties on MediaError
+// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
+for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {
+  MediaError[MediaError.errorTypes[errNum]] = errNum;
+  // values should be accessible on both the class and instance
+  MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;
+}
+
+exports['default'] = MediaError;
+
+},{"object.assign":136}],47:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('../clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _menu = _dereq_('./menu.js');
+
+var _menu2 = _interopRequireDefault(_menu);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _toTitleCase = _dereq_('../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file menu-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A button class with a popup menu
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class MenuButton
+ */
+var MenuButton = function (_ClickableComponent) {
+  _inherits(MenuButton, _ClickableComponent);
+
+  function MenuButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, MenuButton);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.update();
+
+    _this.enabled_ = true;
+
+    _this.el_.setAttribute('aria-haspopup', 'true');
+    _this.el_.setAttribute('role', 'menuitem');
+    _this.on('keydown', _this.handleSubmenuKeyPress);
+    return _this;
+  }
+
+  /**
+   * Update menu
+   *
+   * @method update
+   */
+
+
+  MenuButton.prototype.update = function update() {
+    var menu = this.createMenu();
+
+    if (this.menu) {
+      this.removeChild(this.menu);
+    }
+
+    this.menu = menu;
+    this.addChild(menu);
+
+    /**
+     * Track the state of the menu button
+     *
+     * @type {Boolean}
+     * @private
+     */
+    this.buttonPressed_ = false;
+    this.el_.setAttribute('aria-expanded', 'false');
+
+    if (this.items && this.items.length === 0) {
+      this.hide();
+    } else if (this.items && this.items.length > 1) {
+      this.show();
+    }
+  };
+
+  /**
+   * Create menu
+   *
+   * @return {Menu} The constructed menu
+   * @method createMenu
+   */
+
+
+  MenuButton.prototype.createMenu = function createMenu() {
+    var menu = new _menu2['default'](this.player_);
+
+    // Add a title list item to the top
+    if (this.options_.title) {
+      var title = Dom.createEl('li', {
+        className: 'vjs-menu-title',
+        innerHTML: (0, _toTitleCase2['default'])(this.options_.title),
+        tabIndex: -1
+      });
+
+      menu.children_.unshift(title);
+      Dom.insertElFirst(title, menu.contentEl());
+    }
+
+    this.items = this.createItems();
+
+    if (this.items) {
+      // Add menu items to the menu
+      for (var i = 0; i < this.items.length; i++) {
+        menu.addItem(this.items[i]);
+      }
+    }
+
+    return menu;
+  };
+
+  /**
+   * Create the list of menu items. Specific to each subclass.
+   *
+   * @method createItems
+   */
+
+
+  MenuButton.prototype.createItems = function createItems() {};
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  MenuButton.prototype.createEl = function createEl() {
+    return _ClickableComponent.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass()
+    });
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  MenuButton.prototype.buildCSSClass = function buildCSSClass() {
+    var menuButtonClass = 'vjs-menu-button';
+
+    // If the inline option is passed, we want to use different styles altogether.
+    if (this.options_.inline === true) {
+      menuButtonClass += '-inline';
+    } else {
+      menuButtonClass += '-popup';
+    }
+
+    return 'vjs-menu-button ' + menuButtonClass + ' ' + _ClickableComponent.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * When you click the button it adds focus, which
+   * will show the menu indefinitely.
+   * So we'll remove focus when the mouse leaves the button.
+   * Focus is needed for tab navigation.
+   * Allow sub components to stack CSS class names
+   *
+   * @method handleClick
+   */
+
+
+  MenuButton.prototype.handleClick = function handleClick() {
+    this.one(this.menu.contentEl(), 'mouseleave', Fn.bind(this, function (e) {
+      this.unpressButton();
+      this.el_.blur();
+    }));
+    if (this.buttonPressed_) {
+      this.unpressButton();
+    } else {
+      this.pressButton();
+    }
+  };
+
+  /**
+   * Handle key press on menu
+   *
+   * @param {Object} event Key press event
+   * @method handleKeyPress
+   */
+
+
+  MenuButton.prototype.handleKeyPress = function handleKeyPress(event) {
+
+    // Escape (27) key or Tab (9) key unpress the 'button'
+    if (event.which === 27 || event.which === 9) {
+      if (this.buttonPressed_) {
+        this.unpressButton();
+      }
+      // Don't preventDefault for Tab key - we still want to lose focus
+      if (event.which !== 9) {
+        event.preventDefault();
+      }
+      // Up (38) key or Down (40) key press the 'button'
+    } else if (event.which === 38 || event.which === 40) {
+      if (!this.buttonPressed_) {
+        this.pressButton();
+        event.preventDefault();
+      }
+    } else {
+      _ClickableComponent.prototype.handleKeyPress.call(this, event);
+    }
+  };
+
+  /**
+   * Handle key press on submenu
+   *
+   * @param {Object} event Key press event
+   * @method handleSubmenuKeyPress
+   */
+
+
+  MenuButton.prototype.handleSubmenuKeyPress = function handleSubmenuKeyPress(event) {
+
+    // Escape (27) key or Tab (9) key unpress the 'button'
+    if (event.which === 27 || event.which === 9) {
+      if (this.buttonPressed_) {
+        this.unpressButton();
+      }
+      // Don't preventDefault for Tab key - we still want to lose focus
+      if (event.which !== 9) {
+        event.preventDefault();
+      }
+    }
+  };
+
+  /**
+   * Makes changes based on button pressed
+   *
+   * @method pressButton
+   */
+
+
+  MenuButton.prototype.pressButton = function pressButton() {
+    if (this.enabled_) {
+      this.buttonPressed_ = true;
+      this.menu.lockShowing();
+      this.el_.setAttribute('aria-expanded', 'true');
+      // set the focus into the submenu
+      this.menu.focus();
+    }
+  };
+
+  /**
+   * Makes changes based on button unpressed
+   *
+   * @method unpressButton
+   */
+
+
+  MenuButton.prototype.unpressButton = function unpressButton() {
+    if (this.enabled_) {
+      this.buttonPressed_ = false;
+      this.menu.unlockShowing();
+      this.el_.setAttribute('aria-expanded', 'false');
+      // Set focus back to this menu button
+      this.el_.focus();
+    }
+  };
+
+  /**
+   * Disable the menu button
+   *
+   * @return {Component}
+   * @method disable
+   */
+
+
+  MenuButton.prototype.disable = function disable() {
+    // Unpress, but don't force focus on this button
+    this.buttonPressed_ = false;
+    this.menu.unlockShowing();
+    this.el_.setAttribute('aria-expanded', 'false');
+
+    this.enabled_ = false;
+
+    return _ClickableComponent.prototype.disable.call(this);
+  };
+
+  /**
+   * Enable the menu button
+   *
+   * @return {Component}
+   * @method disable
+   */
+
+
+  MenuButton.prototype.enable = function enable() {
+    this.enabled_ = true;
+
+    return _ClickableComponent.prototype.enable.call(this);
+  };
+
+  return MenuButton;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('MenuButton', MenuButton);
+exports['default'] = MenuButton;
+
+},{"../clickable-component.js":3,"../component.js":5,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/to-title-case.js":89,"./menu.js":49}],48:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('../clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The component for a menu item. `<li>`
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class MenuItem
+ */
+var MenuItem = function (_ClickableComponent) {
+  _inherits(MenuItem, _ClickableComponent);
+
+  function MenuItem(player, options) {
+    _classCallCheck(this, MenuItem);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.selectable = options.selectable;
+
+    _this.selected(options.selected);
+
+    if (_this.selectable) {
+      // TODO: May need to be either menuitemcheckbox or menuitemradio,
+      //       and may need logical grouping of menu items.
+      _this.el_.setAttribute('role', 'menuitemcheckbox');
+    } else {
+      _this.el_.setAttribute('role', 'menuitem');
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String=} type Desc
+   * @param {Object=} props Desc
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  MenuItem.prototype.createEl = function createEl(type, props, attrs) {
+    return _ClickableComponent.prototype.createEl.call(this, 'li', (0, _object2['default'])({
+      className: 'vjs-menu-item',
+      innerHTML: this.localize(this.options_.label),
+      tabIndex: -1
+    }, props), attrs);
+  };
+
+  /**
+   * Handle a click on the menu item, and set it to selected
+   *
+   * @method handleClick
+   */
+
+
+  MenuItem.prototype.handleClick = function handleClick() {
+    this.selected(true);
+  };
+
+  /**
+   * Set this menu item as selected or not
+   *
+   * @param  {Boolean} selected
+   * @method selected
+   */
+
+
+  MenuItem.prototype.selected = function selected(_selected) {
+    if (this.selectable) {
+      if (_selected) {
+        this.addClass('vjs-selected');
+        this.el_.setAttribute('aria-checked', 'true');
+        // aria-checked isn't fully supported by browsers/screen readers,
+        // so indicate selected state to screen reader in the control text.
+        this.controlText(', selected');
+      } else {
+        this.removeClass('vjs-selected');
+        this.el_.setAttribute('aria-checked', 'false');
+        // Indicate un-selected state to screen reader
+        // Note that a space clears out the selected state text
+        this.controlText(' ');
+      }
+    }
+  };
+
+  return MenuItem;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('MenuItem', MenuItem);
+exports['default'] = MenuItem;
+
+},{"../clickable-component.js":3,"../component.js":5,"object.assign":136}],49:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _events = _dereq_('../utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file menu.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Menu component is used to build pop up menus, including subtitle and
+ * captions selection menus.
+ *
+ * @extends Component
+ * @class Menu
+ */
+var Menu = function (_Component) {
+  _inherits(Menu, _Component);
+
+  function Menu(player, options) {
+    _classCallCheck(this, Menu);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.focusedChild_ = -1;
+
+    _this.on('keydown', _this.handleKeyPress);
+    return _this;
+  }
+
+  /**
+   * Add a menu item to the menu
+   *
+   * @param {Object|String} component Component or component type to add
+   * @method addItem
+   */
+
+
+  Menu.prototype.addItem = function addItem(component) {
+    this.addChild(component);
+    component.on('click', Fn.bind(this, function () {
+      this.unlockShowing();
+      // TODO: Need to set keyboard focus back to the menuButton
+    }));
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Menu.prototype.createEl = function createEl() {
+    var contentElType = this.options_.contentElType || 'ul';
+
+    this.contentEl_ = Dom.createEl(contentElType, {
+      className: 'vjs-menu-content'
+    });
+
+    this.contentEl_.setAttribute('role', 'menu');
+
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      append: this.contentEl_,
+      className: 'vjs-menu'
+    });
+
+    el.setAttribute('role', 'presentation');
+    el.appendChild(this.contentEl_);
+
+    // Prevent clicks from bubbling up. Needed for Menu Buttons,
+    // where a click on the parent is significant
+    Events.on(el, 'click', function (event) {
+      event.preventDefault();
+      event.stopImmediatePropagation();
+    });
+
+    return el;
+  };
+
+  /**
+   * Handle key press for menu
+   *
+   * @param {Object} event Event object
+   * @method handleKeyPress
+   */
+
+
+  Menu.prototype.handleKeyPress = function handleKeyPress(event) {
+    // Left and Down Arrows
+    if (event.which === 37 || event.which === 40) {
+      event.preventDefault();
+      this.stepForward();
+
+      // Up and Right Arrows
+    } else if (event.which === 38 || event.which === 39) {
+      event.preventDefault();
+      this.stepBack();
+    }
+  };
+
+  /**
+   * Move to next (lower) menu item for keyboard users
+   *
+   * @method stepForward
+   */
+
+
+  Menu.prototype.stepForward = function stepForward() {
+    var stepChild = 0;
+
+    if (this.focusedChild_ !== undefined) {
+      stepChild = this.focusedChild_ + 1;
+    }
+    this.focus(stepChild);
+  };
+
+  /**
+   * Move to previous (higher) menu item for keyboard users
+   *
+   * @method stepBack
+   */
+
+
+  Menu.prototype.stepBack = function stepBack() {
+    var stepChild = 0;
+
+    if (this.focusedChild_ !== undefined) {
+      stepChild = this.focusedChild_ - 1;
+    }
+    this.focus(stepChild);
+  };
+
+  /**
+   * Set focus on a menu item in the menu
+   *
+   * @param {Object|String} item Index of child item set focus on
+   * @method focus
+   */
+
+
+  Menu.prototype.focus = function focus() {
+    var item = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];
+
+    var children = this.children().slice();
+    var haveTitle = children.length && children[0].className && /vjs-menu-title/.test(children[0].className);
+
+    if (haveTitle) {
+      children.shift();
+    }
+
+    if (children.length > 0) {
+      if (item < 0) {
+        item = 0;
+      } else if (item >= children.length) {
+        item = children.length - 1;
+      }
+
+      this.focusedChild_ = item;
+
+      children[item].el_.focus();
+    }
+  };
+
+  return Menu;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Menu', Menu);
+exports['default'] = Menu;
+
+},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],50:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _dom = _dereq_('./utils/dom');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('./utils/fn');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file modal-dialog.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+var MODAL_CLASS_NAME = 'vjs-modal-dialog';
+var ESC = 27;
+
+/**
+ * The `ModalDialog` displays over the video and its controls, which blocks
+ * interaction with the player until it is closed.
+ *
+ * Modal dialogs include a "Close" button and will close when that button
+ * is activated - or when ESC is pressed anywhere.
+ *
+ * @extends Component
+ * @class ModalDialog
+ */
+
+var ModalDialog = function (_Component) {
+  _inherits(ModalDialog, _Component);
+
+  /**
+   * Constructor for modals.
+   *
+   * @param  {Player} player
+   * @param  {Object} [options]
+   * @param  {Mixed} [options.content=undefined]
+   *         Provide customized content for this modal.
+   *
+   * @param  {String} [options.description]
+   *         A text description for the modal, primarily for accessibility.
+   *
+   * @param  {Boolean} [options.fillAlways=false]
+   *         Normally, modals are automatically filled only the first time
+   *         they open. This tells the modal to refresh its content
+   *         every time it opens.
+   *
+   * @param  {String} [options.label]
+   *         A text label for the modal, primarily for accessibility.
+   *
+   * @param  {Boolean} [options.temporary=true]
+   *         If `true`, the modal can only be opened once; it will be
+   *         disposed as soon as it's closed.
+   *
+   * @param  {Boolean} [options.uncloseable=false]
+   *         If `true`, the user will not be able to close the modal
+   *         through the UI in the normal ways. Programmatic closing is
+   *         still possible.
+   *
+   */
+  function ModalDialog(player, options) {
+    _classCallCheck(this, ModalDialog);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false;
+
+    _this.closeable(!_this.options_.uncloseable);
+    _this.content(_this.options_.content);
+
+    // Make sure the contentEl is defined AFTER any children are initialized
+    // because we only want the contents of the modal in the contentEl
+    // (not the UI elements like the close button).
+    _this.contentEl_ = Dom.createEl('div', {
+      className: MODAL_CLASS_NAME + '-content'
+    }, {
+      role: 'document'
+    });
+
+    _this.descEl_ = Dom.createEl('p', {
+      className: MODAL_CLASS_NAME + '-description vjs-offscreen',
+      id: _this.el().getAttribute('aria-describedby')
+    });
+
+    Dom.textContent(_this.descEl_, _this.description());
+    _this.el_.appendChild(_this.descEl_);
+    _this.el_.appendChild(_this.contentEl_);
+    return _this;
+  }
+
+  /**
+   * Create the modal's DOM element
+   *
+   * @method createEl
+   * @return {Element}
+   */
+
+
+  ModalDialog.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass(),
+      tabIndex: -1
+    }, {
+      'aria-describedby': this.id() + '_description',
+      'aria-hidden': 'true',
+      'aria-label': this.label(),
+      'role': 'dialog'
+    });
+  };
+
+  /**
+   * Build the modal's CSS class.
+   *
+   * @method buildCSSClass
+   * @return {String}
+   */
+
+
+  ModalDialog.prototype.buildCSSClass = function buildCSSClass() {
+    return MODAL_CLASS_NAME + ' vjs-hidden ' + _Component.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Handles key presses on the document, looking for ESC, which closes
+   * the modal.
+   *
+   * @method handleKeyPress
+   * @param  {Event} e
+   */
+
+
+  ModalDialog.prototype.handleKeyPress = function handleKeyPress(e) {
+    if (e.which === ESC && this.closeable()) {
+      this.close();
+    }
+  };
+
+  /**
+   * Returns the label string for this modal. Primarily used for accessibility.
+   *
+   * @return {String}
+   */
+
+
+  ModalDialog.prototype.label = function label() {
+    return this.options_.label || this.localize('Modal Window');
+  };
+
+  /**
+   * Returns the description string for this modal. Primarily used for
+   * accessibility.
+   *
+   * @return {String}
+   */
+
+
+  ModalDialog.prototype.description = function description() {
+    var desc = this.options_.description || this.localize('This is a modal window.');
+
+    // Append a universal closeability message if the modal is closeable.
+    if (this.closeable()) {
+      desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');
+    }
+
+    return desc;
+  };
+
+  /**
+   * Opens the modal.
+   *
+   * @method open
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.open = function open() {
+    if (!this.opened_) {
+      var player = this.player();
+
+      this.trigger('beforemodalopen');
+      this.opened_ = true;
+
+      // Fill content if the modal has never opened before and
+      // never been filled.
+      if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {
+        this.fill();
+      }
+
+      // If the player was playing, pause it and take note of its previously
+      // playing state.
+      this.wasPlaying_ = !player.paused();
+
+      if (this.wasPlaying_) {
+        player.pause();
+      }
+
+      if (this.closeable()) {
+        this.on(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));
+      }
+
+      player.controls(false);
+      this.show();
+      this.el().setAttribute('aria-hidden', 'false');
+      this.trigger('modalopen');
+      this.hasBeenOpened_ = true;
+    }
+    return this;
+  };
+
+  /**
+   * Whether or not the modal is opened currently.
+   *
+   * @method opened
+   * @param  {Boolean} [value]
+   *         If given, it will open (`true`) or close (`false`) the modal.
+   *
+   * @return {Boolean}
+   */
+
+
+  ModalDialog.prototype.opened = function opened(value) {
+    if (typeof value === 'boolean') {
+      this[value ? 'open' : 'close']();
+    }
+    return this.opened_;
+  };
+
+  /**
+   * Closes the modal.
+   *
+   * @method close
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.close = function close() {
+    if (this.opened_) {
+      var player = this.player();
+
+      this.trigger('beforemodalclose');
+      this.opened_ = false;
+
+      if (this.wasPlaying_) {
+        player.play();
+      }
+
+      if (this.closeable()) {
+        this.off(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));
+      }
+
+      player.controls(true);
+      this.hide();
+      this.el().setAttribute('aria-hidden', 'true');
+      this.trigger('modalclose');
+
+      if (this.options_.temporary) {
+        this.dispose();
+      }
+    }
+    return this;
+  };
+
+  /**
+   * Whether or not the modal is closeable via the UI.
+   *
+   * @method closeable
+   * @param  {Boolean} [value]
+   *         If given as a Boolean, it will set the `closeable` option.
+   *
+   * @return {Boolean}
+   */
+
+
+  ModalDialog.prototype.closeable = function closeable(value) {
+    if (typeof value === 'boolean') {
+      var closeable = this.closeable_ = !!value;
+      var close = this.getChild('closeButton');
+
+      // If this is being made closeable and has no close button, add one.
+      if (closeable && !close) {
+
+        // The close button should be a child of the modal - not its
+        // content element, so temporarily change the content element.
+        var temp = this.contentEl_;
+
+        this.contentEl_ = this.el_;
+        close = this.addChild('closeButton', { controlText: 'Close Modal Dialog' });
+        this.contentEl_ = temp;
+        this.on(close, 'close', this.close);
+      }
+
+      // If this is being made uncloseable and has a close button, remove it.
+      if (!closeable && close) {
+        this.off(close, 'close', this.close);
+        this.removeChild(close);
+        close.dispose();
+      }
+    }
+    return this.closeable_;
+  };
+
+  /**
+   * Fill the modal's content element with the modal's "content" option.
+   *
+   * The content element will be emptied before this change takes place.
+   *
+   * @method fill
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.fill = function fill() {
+    return this.fillWith(this.content());
+  };
+
+  /**
+   * Fill the modal's content element with arbitrary content.
+   *
+   * The content element will be emptied before this change takes place.
+   *
+   * @method fillWith
+   * @param  {Mixed} [content]
+   *         The same rules apply to this as apply to the `content` option.
+   *
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.fillWith = function fillWith(content) {
+    var contentEl = this.contentEl();
+    var parentEl = contentEl.parentNode;
+    var nextSiblingEl = contentEl.nextSibling;
+
+    this.trigger('beforemodalfill');
+    this.hasBeenFilled_ = true;
+
+    // Detach the content element from the DOM before performing
+    // manipulation to avoid modifying the live DOM multiple times.
+    parentEl.removeChild(contentEl);
+    this.empty();
+    Dom.insertContent(contentEl, content);
+    this.trigger('modalfill');
+
+    // Re-inject the re-filled content element.
+    if (nextSiblingEl) {
+      parentEl.insertBefore(contentEl, nextSiblingEl);
+    } else {
+      parentEl.appendChild(contentEl);
+    }
+
+    return this;
+  };
+
+  /**
+   * Empties the content element.
+   *
+   * This happens automatically anytime the modal is filled.
+   *
+   * @method empty
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.empty = function empty() {
+    this.trigger('beforemodalempty');
+    Dom.emptyEl(this.contentEl());
+    this.trigger('modalempty');
+    return this;
+  };
+
+  /**
+   * Gets or sets the modal content, which gets normalized before being
+   * rendered into the DOM.
+   *
+   * This does not update the DOM or fill the modal, but it is called during
+   * that process.
+   *
+   * @method content
+   * @param  {Mixed} [value]
+   *         If defined, sets the internal content value to be used on the
+   *         next call(s) to `fill`. This value is normalized before being
+   *         inserted. To "clear" the internal content value, pass `null`.
+   *
+   * @return {Mixed}
+   */
+
+
+  ModalDialog.prototype.content = function content(value) {
+    if (typeof value !== 'undefined') {
+      this.content_ = value;
+    }
+    return this.content_;
+  };
+
+  return ModalDialog;
+}(_component2['default']);
+
+/*
+ * Modal dialog default options.
+ *
+ * @type {Object}
+ * @private
+ */
+
+
+ModalDialog.prototype.options_ = {
+  temporary: true
+};
+
+_component2['default'].registerComponent('ModalDialog', ModalDialog);
+exports['default'] = ModalDialog;
+
+},{"./component":5,"./utils/dom":80,"./utils/fn":82}],51:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _guid = _dereq_('./utils/guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _browser = _dereq_('./utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _toTitleCase = _dereq_('./utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+var _timeRanges = _dereq_('./utils/time-ranges.js');
+
+var _buffer = _dereq_('./utils/buffer.js');
+
+var _stylesheet = _dereq_('./utils/stylesheet.js');
+
+var stylesheet = _interopRequireWildcard(_stylesheet);
+
+var _fullscreenApi = _dereq_('./fullscreen-api.js');
+
+var _fullscreenApi2 = _interopRequireDefault(_fullscreenApi);
+
+var _mediaError = _dereq_('./media-error.js');
+
+var _mediaError2 = _interopRequireDefault(_mediaError);
+
+var _tuple = _dereq_('safe-json-parse/tuple');
+
+var _tuple2 = _interopRequireDefault(_tuple);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+var _mergeOptions = _dereq_('./utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _textTrackListConverter = _dereq_('./tracks/text-track-list-converter.js');
+
+var _textTrackListConverter2 = _interopRequireDefault(_textTrackListConverter);
+
+var _modalDialog = _dereq_('./modal-dialog');
+
+var _modalDialog2 = _interopRequireDefault(_modalDialog);
+
+var _tech = _dereq_('./tech/tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _audioTrackList = _dereq_('./tracks/audio-track-list.js');
+
+var _audioTrackList2 = _interopRequireDefault(_audioTrackList);
+
+var _videoTrackList = _dereq_('./tracks/video-track-list.js');
+
+var _videoTrackList2 = _interopRequireDefault(_videoTrackList);
+
+_dereq_('./tech/loader.js');
+
+_dereq_('./tech/flash.js');
+
+_dereq_('./poster-image.js');
+
+_dereq_('./tracks/text-track-display.js');
+
+_dereq_('./loading-spinner.js');
+
+_dereq_('./big-play-button.js');
+
+_dereq_('./close-button.js');
+
+_dereq_('./control-bar/control-bar.js');
+
+_dereq_('./error-display.js');
+
+_dereq_('./tracks/text-track-settings.js');
+
+_dereq_('./tech/html5.js');
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file player.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+// Subclasses Component
+
+
+// The following imports are used only to ensure that the corresponding modules
+// are always included in the video.js package. Importing the modules will
+// execute them and they will register themselves with video.js.
+
+
+// Import Html5 tech, at least for disposing the original video tag.
+
+
+/**
+ * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.
+ * ```js
+ * var myPlayer = videojs('example_video_1');
+ * ```
+ * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.
+ * ```html
+ * <video id="example_video_1" data-setup='{}' controls>
+ *   <source src="my-source.mp4" type="video/mp4">
+ * </video>
+ * ```
+ * After an instance has been created it can be accessed globally using `Video('example_video_1')`.
+ *
+ * @param {Element} tag        The original video tag used for configuring options
+ * @param {Object=} options    Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends Component
+ * @class Player
+ */
+var Player = function (_Component) {
+  _inherits(Player, _Component);
+
+  /**
+   * player's constructor function
+   *
+   * @constructs
+   * @method init
+   * @param {Element} tag        The original video tag used for configuring options
+   * @param {Object=} options    Player options
+   * @param {Function=} ready    Ready callback function
+   */
+  function Player(tag, options, ready) {
+    _classCallCheck(this, Player);
+
+    // Make sure tag ID exists
+    tag.id = tag.id || 'vjs_video_' + Guid.newGUID();
+
+    // Set Options
+    // The options argument overrides options set in the video tag
+    // which overrides globally set options.
+    // This latter part coincides with the load order
+    // (tag must exist before Player)
+    options = (0, _object2['default'])(Player.getTagSettings(tag), options);
+
+    // Delay the initialization of children because we need to set up
+    // player properties first, and can't use `this` before `super()`
+    options.initChildren = false;
+
+    // Same with creating the element
+    options.createEl = false;
+
+    // we don't want the player to report touch activity on itself
+    // see enableTouchActivity in Component
+    options.reportTouchActivity = false;
+
+    // If language is not set, get the closest lang attribute
+    if (!options.language) {
+      if (typeof tag.closest === 'function') {
+        var closest = tag.closest('[lang]');
+
+        if (closest) {
+          options.language = closest.getAttribute('lang');
+        }
+      } else {
+        var element = tag;
+
+        while (element && element.nodeType === 1) {
+          if (Dom.getElAttributes(element).hasOwnProperty('lang')) {
+            options.language = element.getAttribute('lang');
+            break;
+          }
+          element = element.parentNode;
+        }
+      }
+    }
+
+    // Run base component initializing with new options
+
+    // if the global option object was accidentally blown away by
+    // someone, bail early with an informative error
+    var _this = _possibleConstructorReturn(this, _Component.call(this, null, options, ready));
+
+    if (!_this.options_ || !_this.options_.techOrder || !_this.options_.techOrder.length) {
+      throw new Error('No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?');
+    }
+
+    // Store the original tag used to set options
+    _this.tag = tag;
+
+    // Store the tag attributes used to restore html5 element
+    _this.tagAttributes = tag && Dom.getElAttributes(tag);
+
+    // Update current language
+    _this.language(_this.options_.language);
+
+    // Update Supported Languages
+    if (options.languages) {
+      (function () {
+        // Normalise player option languages to lowercase
+        var languagesToLower = {};
+
+        Object.getOwnPropertyNames(options.languages).forEach(function (name) {
+          languagesToLower[name.toLowerCase()] = options.languages[name];
+        });
+        _this.languages_ = languagesToLower;
+      })();
+    } else {
+      _this.languages_ = Player.prototype.options_.languages;
+    }
+
+    // Cache for video property values.
+    _this.cache_ = {};
+
+    // Set poster
+    _this.poster_ = options.poster || '';
+
+    // Set controls
+    _this.controls_ = !!options.controls;
+
+    // Original tag settings stored in options
+    // now remove immediately so native controls don't flash.
+    // May be turned back on by HTML5 tech if nativeControlsForTouch is true
+    tag.controls = false;
+
+    /*
+     * Store the internal state of scrubbing
+     *
+     * @private
+     * @return {Boolean} True if the user is scrubbing
+     */
+    _this.scrubbing_ = false;
+
+    _this.el_ = _this.createEl();
+
+    // We also want to pass the original player options to each component and plugin
+    // as well so they don't need to reach back into the player for options later.
+    // We also need to do another copy of this.options_ so we don't end up with
+    // an infinite loop.
+    var playerOptionsCopy = (0, _mergeOptions2['default'])(_this.options_);
+
+    // Load plugins
+    if (options.plugins) {
+      (function () {
+        var plugins = options.plugins;
+
+        Object.getOwnPropertyNames(plugins).forEach(function (name) {
+          if (typeof this[name] === 'function') {
+            this[name](plugins[name]);
+          } else {
+            _log2['default'].error('Unable to find plugin:', name);
+          }
+        }, _this);
+      })();
+    }
+
+    _this.options_.playerOptions = playerOptionsCopy;
+
+    _this.initChildren();
+
+    // Set isAudio based on whether or not an audio tag was used
+    _this.isAudio(tag.nodeName.toLowerCase() === 'audio');
+
+    // Update controls className. Can't do this when the controls are initially
+    // set because the element doesn't exist yet.
+    if (_this.controls()) {
+      _this.addClass('vjs-controls-enabled');
+    } else {
+      _this.addClass('vjs-controls-disabled');
+    }
+
+    // Set ARIA label and region role depending on player type
+    _this.el_.setAttribute('role', 'region');
+    if (_this.isAudio()) {
+      _this.el_.setAttribute('aria-label', 'audio player');
+    } else {
+      _this.el_.setAttribute('aria-label', 'video player');
+    }
+
+    if (_this.isAudio()) {
+      _this.addClass('vjs-audio');
+    }
+
+    if (_this.flexNotSupported_()) {
+      _this.addClass('vjs-no-flex');
+    }
+
+    // TODO: Make this smarter. Toggle user state between touching/mousing
+    // using events, since devices can have both touch and mouse events.
+    // if (browser.TOUCH_ENABLED) {
+    //   this.addClass('vjs-touch-enabled');
+    // }
+
+    // iOS Safari has broken hover handling
+    if (!browser.IS_IOS) {
+      _this.addClass('vjs-workinghover');
+    }
+
+    // Make player easily findable by ID
+    Player.players[_this.id_] = _this;
+
+    // When the player is first initialized, trigger activity so components
+    // like the control bar show themselves if needed
+    _this.userActive(true);
+    _this.reportUserActivity();
+    _this.listenForUserActivity_();
+
+    _this.on('fullscreenchange', _this.handleFullscreenChange_);
+    _this.on('stageclick', _this.handleStageClick_);
+    return _this;
+  }
+
+  /**
+   * Destroys the video player and does any necessary cleanup
+   * ```js
+   *     myPlayer.dispose();
+   * ```
+   * This is especially helpful if you are dynamically adding and removing videos
+   * to/from the DOM.
+   *
+   * @method dispose
+   */
+
+
+  Player.prototype.dispose = function dispose() {
+    this.trigger('dispose');
+    // prevent dispose from being called twice
+    this.off('dispose');
+
+    if (this.styleEl_ && this.styleEl_.parentNode) {
+      this.styleEl_.parentNode.removeChild(this.styleEl_);
+    }
+
+    // Kill reference to this player
+    Player.players[this.id_] = null;
+
+    if (this.tag && this.tag.player) {
+      this.tag.player = null;
+    }
+
+    if (this.el_ && this.el_.player) {
+      this.el_.player = null;
+    }
+
+    if (this.tech_) {
+      this.tech_.dispose();
+    }
+
+    _Component.prototype.dispose.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Player.prototype.createEl = function createEl() {
+    var el = this.el_ = _Component.prototype.createEl.call(this, 'div');
+    var tag = this.tag;
+
+    // Remove width/height attrs from tag so CSS can make it 100% width/height
+    tag.removeAttribute('width');
+    tag.removeAttribute('height');
+
+    // Copy over all the attributes from the tag, including ID and class
+    // ID will now reference player box, not the video tag
+    var attrs = Dom.getElAttributes(tag);
+
+    Object.getOwnPropertyNames(attrs).forEach(function (attr) {
+      // workaround so we don't totally break IE7
+      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7
+      if (attr === 'class') {
+        el.className = attrs[attr];
+      } else {
+        el.setAttribute(attr, attrs[attr]);
+      }
+    });
+
+    // Update tag id/class for use as HTML5 playback tech
+    // Might think we should do this after embedding in container so .vjs-tech class
+    // doesn't flash 100% width/height, but class only applies with .video-js parent
+    tag.playerId = tag.id;
+    tag.id += '_html5_api';
+    tag.className = 'vjs-tech';
+
+    // Make player findable on elements
+    tag.player = el.player = this;
+    // Default state of video is paused
+    this.addClass('vjs-paused');
+
+    // Add a style element in the player that we'll use to set the width/height
+    // of the player in a way that's still overrideable by CSS, just like the
+    // video element
+    if (_window2['default'].VIDEOJS_NO_DYNAMIC_STYLE !== true) {
+      this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');
+      var defaultsStyleEl = Dom.$('.vjs-styles-defaults');
+      var head = Dom.$('head');
+
+      head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);
+    }
+
+    // Pass in the width/height/aspectRatio options which will update the style el
+    this.width(this.options_.width);
+    this.height(this.options_.height);
+    this.fluid(this.options_.fluid);
+    this.aspectRatio(this.options_.aspectRatio);
+
+    // Hide any links within the video/audio tag, because IE doesn't hide them completely.
+    var links = tag.getElementsByTagName('a');
+
+    for (var i = 0; i < links.length; i++) {
+      var linkEl = links.item(i);
+
+      Dom.addElClass(linkEl, 'vjs-hidden');
+      linkEl.setAttribute('hidden', 'hidden');
+    }
+
+    // insertElFirst seems to cause the networkState to flicker from 3 to 2, so
+    // keep track of the original for later so we can know if the source originally failed
+    tag.initNetworkState_ = tag.networkState;
+
+    // Wrap video tag in div (el/box) container
+    if (tag.parentNode) {
+      tag.parentNode.insertBefore(el, tag);
+    }
+
+    // insert the tag as the first child of the player element
+    // then manually add it to the children array so that this.addChild
+    // will work properly for other components
+    //
+    // Breaks iPhone, fixed in HTML5 setup.
+    Dom.insertElFirst(tag, el);
+    this.children_.unshift(tag);
+
+    this.el_ = el;
+
+    return el;
+  };
+
+  /**
+   * Get/set player width
+   *
+   * @param {Number=} value Value for width
+   * @return {Number} Width when getting
+   * @method width
+   */
+
+
+  Player.prototype.width = function width(value) {
+    return this.dimension('width', value);
+  };
+
+  /**
+   * Get/set player height
+   *
+   * @param {Number=} value Value for height
+   * @return {Number} Height when getting
+   * @method height
+   */
+
+
+  Player.prototype.height = function height(value) {
+    return this.dimension('height', value);
+  };
+
+  /**
+   * Get/set dimension for player
+   *
+   * @param {String} dimension Either width or height
+   * @param {Number=} value Value for dimension
+   * @return {Component}
+   * @method dimension
+   */
+
+
+  Player.prototype.dimension = function dimension(_dimension, value) {
+    var privDimension = _dimension + '_';
+
+    if (value === undefined) {
+      return this[privDimension] || 0;
+    }
+
+    if (value === '') {
+      // If an empty string is given, reset the dimension to be automatic
+      this[privDimension] = undefined;
+    } else {
+      var parsedVal = parseFloat(value);
+
+      if (isNaN(parsedVal)) {
+        _log2['default'].error('Improper value "' + value + '" supplied for for ' + _dimension);
+        return this;
+      }
+
+      this[privDimension] = parsedVal;
+    }
+
+    this.updateStyleEl_();
+    return this;
+  };
+
+  /**
+   * Add/remove the vjs-fluid class
+   *
+   * @param {Boolean} bool Value of true adds the class, value of false removes the class
+   * @method fluid
+   */
+
+
+  Player.prototype.fluid = function fluid(bool) {
+    if (bool === undefined) {
+      return !!this.fluid_;
+    }
+
+    this.fluid_ = !!bool;
+
+    if (bool) {
+      this.addClass('vjs-fluid');
+    } else {
+      this.removeClass('vjs-fluid');
+    }
+  };
+
+  /**
+   * Get/Set the aspect ratio
+   *
+   * @param {String=} ratio Aspect ratio for player
+   * @return aspectRatio
+   * @method aspectRatio
+   */
+
+
+  Player.prototype.aspectRatio = function aspectRatio(ratio) {
+    if (ratio === undefined) {
+      return this.aspectRatio_;
+    }
+
+    // Check for width:height format
+    if (!/^\d+\:\d+$/.test(ratio)) {
+      throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');
+    }
+    this.aspectRatio_ = ratio;
+
+    // We're assuming if you set an aspect ratio you want fluid mode,
+    // because in fixed mode you could calculate width and height yourself.
+    this.fluid(true);
+
+    this.updateStyleEl_();
+  };
+
+  /**
+   * Update styles of the player element (height, width and aspect ratio)
+   *
+   * @method updateStyleEl_
+   */
+
+
+  Player.prototype.updateStyleEl_ = function updateStyleEl_() {
+    if (_window2['default'].VIDEOJS_NO_DYNAMIC_STYLE === true) {
+      var _width = typeof this.width_ === 'number' ? this.width_ : this.options_.width;
+      var _height = typeof this.height_ === 'number' ? this.height_ : this.options_.height;
+      var techEl = this.tech_ && this.tech_.el();
+
+      if (techEl) {
+        if (_width >= 0) {
+          techEl.width = _width;
+        }
+        if (_height >= 0) {
+          techEl.height = _height;
+        }
+      }
+
+      return;
+    }
+
+    var width = void 0;
+    var height = void 0;
+    var aspectRatio = void 0;
+    var idClass = void 0;
+
+    // The aspect ratio is either used directly or to calculate width and height.
+    if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {
+      // Use any aspectRatio that's been specifically set
+      aspectRatio = this.aspectRatio_;
+    } else if (this.videoWidth()) {
+      // Otherwise try to get the aspect ratio from the video metadata
+      aspectRatio = this.videoWidth() + ':' + this.videoHeight();
+    } else {
+      // Or use a default. The video element's is 2:1, but 16:9 is more common.
+      aspectRatio = '16:9';
+    }
+
+    // Get the ratio as a decimal we can use to calculate dimensions
+    var ratioParts = aspectRatio.split(':');
+    var ratioMultiplier = ratioParts[1] / ratioParts[0];
+
+    if (this.width_ !== undefined) {
+      // Use any width that's been specifically set
+      width = this.width_;
+    } else if (this.height_ !== undefined) {
+      // Or calulate the width from the aspect ratio if a height has been set
+      width = this.height_ / ratioMultiplier;
+    } else {
+      // Or use the video's metadata, or use the video el's default of 300
+      width = this.videoWidth() || 300;
+    }
+
+    if (this.height_ !== undefined) {
+      // Use any height that's been specifically set
+      height = this.height_;
+    } else {
+      // Otherwise calculate the height from the ratio and the width
+      height = width * ratioMultiplier;
+    }
+
+    // Ensure the CSS class is valid by starting with an alpha character
+    if (/^[^a-zA-Z]/.test(this.id())) {
+      idClass = 'dimensions-' + this.id();
+    } else {
+      idClass = this.id() + '-dimensions';
+    }
+
+    // Ensure the right class is still on the player for the style element
+    this.addClass(idClass);
+
+    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    ');
+  };
+
+  /**
+   * Load the Media Playback Technology (tech)
+   * Load/Create an instance of playback technology including element and API methods
+   * And append playback element in player div.
+   *
+   * @param {String} techName Name of the playback technology
+   * @param {String} source Video source
+   * @method loadTech_
+   * @private
+   */
+
+
+  Player.prototype.loadTech_ = function loadTech_(techName, source) {
+
+    // Pause and remove current playback technology
+    if (this.tech_) {
+      this.unloadTech_();
+    }
+
+    // get rid of the HTML5 video tag as soon as we are using another tech
+    if (techName !== 'Html5' && this.tag) {
+      _tech2['default'].getTech('Html5').disposeMediaElement(this.tag);
+      this.tag.player = null;
+      this.tag = null;
+    }
+
+    this.techName_ = techName;
+
+    // Turn off API access because we're loading a new tech that might load asynchronously
+    this.isReady_ = false;
+
+    // Grab tech-specific options from player options and add source and parent element to use.
+    var techOptions = (0, _object2['default'])({
+      source: source,
+      'nativeControlsForTouch': this.options_.nativeControlsForTouch,
+      'playerId': this.id(),
+      'techId': this.id() + '_' + techName + '_api',
+      'videoTracks': this.videoTracks_,
+      'textTracks': this.textTracks_,
+      'audioTracks': this.audioTracks_,
+      'autoplay': this.options_.autoplay,
+      'preload': this.options_.preload,
+      'loop': this.options_.loop,
+      'muted': this.options_.muted,
+      'poster': this.poster(),
+      'language': this.language(),
+      'vtt.js': this.options_['vtt.js']
+    }, this.options_[techName.toLowerCase()]);
+
+    if (this.tag) {
+      techOptions.tag = this.tag;
+    }
+
+    if (source) {
+      this.currentType_ = source.type;
+      if (source.src === this.cache_.src && this.cache_.currentTime > 0) {
+        techOptions.startTime = this.cache_.currentTime;
+      }
+
+      this.cache_.src = source.src;
+    }
+
+    // Initialize tech instance
+    var TechComponent = _tech2['default'].getTech(techName);
+
+    // Support old behavior of techs being registered as components.
+    // Remove once that deprecated behavior is removed.
+    if (!TechComponent) {
+      TechComponent = _component2['default'].getComponent(techName);
+    }
+    this.tech_ = new TechComponent(techOptions);
+
+    // player.triggerReady is always async, so don't need this to be async
+    this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);
+
+    _textTrackListConverter2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech_);
+
+    // Listen to all HTML5-defined events and trigger them on the player
+    this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);
+    this.on(this.tech_, 'waiting', this.handleTechWaiting_);
+    this.on(this.tech_, 'canplay', this.handleTechCanPlay_);
+    this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);
+    this.on(this.tech_, 'playing', this.handleTechPlaying_);
+    this.on(this.tech_, 'ended', this.handleTechEnded_);
+    this.on(this.tech_, 'seeking', this.handleTechSeeking_);
+    this.on(this.tech_, 'seeked', this.handleTechSeeked_);
+    this.on(this.tech_, 'play', this.handleTechPlay_);
+    this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);
+    this.on(this.tech_, 'pause', this.handleTechPause_);
+    this.on(this.tech_, 'progress', this.handleTechProgress_);
+    this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);
+    this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);
+    this.on(this.tech_, 'error', this.handleTechError_);
+    this.on(this.tech_, 'suspend', this.handleTechSuspend_);
+    this.on(this.tech_, 'abort', this.handleTechAbort_);
+    this.on(this.tech_, 'emptied', this.handleTechEmptied_);
+    this.on(this.tech_, 'stalled', this.handleTechStalled_);
+    this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);
+    this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);
+    this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);
+    this.on(this.tech_, 'ratechange', this.handleTechRateChange_);
+    this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);
+    this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);
+    this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);
+    this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);
+    this.on(this.tech_, 'textdata', this.handleTechTextData_);
+
+    this.usingNativeControls(this.techGet_('controls'));
+
+    if (this.controls() && !this.usingNativeControls()) {
+      this.addTechControlsListeners_();
+    }
+
+    // Add the tech element in the DOM if it was not already there
+    // Make sure to not insert the original video element if using Html5
+    if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {
+      Dom.insertElFirst(this.tech_.el(), this.el());
+    }
+
+    // Get rid of the original video tag reference after the first tech is loaded
+    if (this.tag) {
+      this.tag.player = null;
+      this.tag = null;
+    }
+  };
+
+  /**
+   * Unload playback technology
+   *
+   * @method unloadTech_
+   * @private
+   */
+
+
+  Player.prototype.unloadTech_ = function unloadTech_() {
+    // Save the current text tracks so that we can reuse the same text tracks with the next tech
+    this.videoTracks_ = this.videoTracks();
+    this.textTracks_ = this.textTracks();
+    this.audioTracks_ = this.audioTracks();
+    this.textTracksJson_ = _textTrackListConverter2['default'].textTracksToJson(this.tech_);
+
+    this.isReady_ = false;
+
+    this.tech_.dispose();
+
+    this.tech_ = false;
+  };
+
+  /**
+   * Return a reference to the current tech.
+   * It will only return a reference to the tech if given an object with the
+   * `IWillNotUseThisInPlugins` property on it. This is try and prevent misuse
+   * of techs by plugins.
+   *
+   * @param {Object}
+   * @return {Object} The Tech
+   * @method tech
+   */
+
+
+  Player.prototype.tech = function tech(safety) {
+    if (safety && safety.IWillNotUseThisInPlugins) {
+      return this.tech_;
+    }
+    var 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    ';
+
+    _window2['default'].alert(errorText);
+    throw new Error(errorText);
+  };
+
+  /**
+   * Set up click and touch listeners for the playback element
+   *
+   * On desktops, a click on the video itself will toggle playback,
+   * on a mobile device a click on the video toggles controls.
+   * (toggling controls is done by toggling the user state between active and
+   * inactive)
+   * A tap can signal that a user has become active, or has become inactive
+   * e.g. a quick tap on an iPhone movie should reveal the controls. Another
+   * quick tap should hide them again (signaling the user is in an inactive
+   * viewing state)
+   * In addition to this, we still want the user to be considered inactive after
+   * a few seconds of inactivity.
+   * Note: the only part of iOS interaction we can't mimic with this setup
+   * is a touch and hold on the video element counting as activity in order to
+   * keep the controls showing, but that shouldn't be an issue. A touch and hold
+   * on any controls will still keep the user active
+   *
+   * @private
+   * @method addTechControlsListeners_
+   */
+
+
+  Player.prototype.addTechControlsListeners_ = function addTechControlsListeners_() {
+    // Make sure to remove all the previous listeners in case we are called multiple times.
+    this.removeTechControlsListeners_();
+
+    // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do
+    // trigger mousedown/up.
+    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
+    // Any touch events are set to block the mousedown event from happening
+    this.on(this.tech_, 'mousedown', this.handleTechClick_);
+
+    // If the controls were hidden we don't want that to change without a tap event
+    // so we'll check if the controls were already showing before reporting user
+    // activity
+    this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);
+    this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);
+    this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);
+
+    // The tap listener needs to come after the touchend listener because the tap
+    // listener cancels out any reportedUserActivity when setting userActive(false)
+    this.on(this.tech_, 'tap', this.handleTechTap_);
+  };
+
+  /**
+   * Remove the listeners used for click and tap controls. This is needed for
+   * toggling to controls disabled, where a tap/touch should do nothing.
+   *
+   * @method removeTechControlsListeners_
+   * @private
+   */
+
+
+  Player.prototype.removeTechControlsListeners_ = function removeTechControlsListeners_() {
+    // We don't want to just use `this.off()` because there might be other needed
+    // listeners added by techs that extend this.
+    this.off(this.tech_, 'tap', this.handleTechTap_);
+    this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);
+    this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);
+    this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);
+    this.off(this.tech_, 'mousedown', this.handleTechClick_);
+  };
+
+  /**
+   * Player waits for the tech to be ready
+   *
+   * @method handleTechReady_
+   * @private
+   */
+
+
+  Player.prototype.handleTechReady_ = function handleTechReady_() {
+    this.triggerReady();
+
+    // Keep the same volume as before
+    if (this.cache_.volume) {
+      this.techCall_('setVolume', this.cache_.volume);
+    }
+
+    // Look if the tech found a higher resolution poster while loading
+    this.handleTechPosterChange_();
+
+    // Update the duration if available
+    this.handleTechDurationChange_();
+
+    // Chrome and Safari both have issues with autoplay.
+    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.
+    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)
+    // This fixes both issues. Need to wait for API, so it updates displays correctly
+    if ((this.src() || this.currentSrc()) && this.tag && this.options_.autoplay && this.paused()) {
+      try {
+        // Chrome Fix. Fixed in Chrome v16.
+        delete this.tag.poster;
+      } catch (e) {
+        (0, _log2['default'])('deleting tag.poster throws in some browsers', e);
+      }
+      this.play();
+    }
+  };
+
+  /**
+   * Fired when the user agent begins looking for media data
+   *
+   * @private
+   * @method handleTechLoadStart_
+   */
+
+
+  Player.prototype.handleTechLoadStart_ = function handleTechLoadStart_() {
+    // TODO: Update to use `emptied` event instead. See #1277.
+
+    this.removeClass('vjs-ended');
+
+    // reset the error state
+    this.error(null);
+
+    // If it's already playing we want to trigger a firstplay event now.
+    // The firstplay event relies on both the play and loadstart events
+    // which can happen in any order for a new source
+    if (!this.paused()) {
+      this.trigger('loadstart');
+      this.trigger('firstplay');
+    } else {
+      // reset the hasStarted state
+      this.hasStarted(false);
+      this.trigger('loadstart');
+    }
+  };
+
+  /**
+   * Add/remove the vjs-has-started class
+   *
+   * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class
+   * @return {Boolean} Boolean value if has started
+   * @private
+   * @method hasStarted
+   */
+
+
+  Player.prototype.hasStarted = function hasStarted(_hasStarted) {
+    if (_hasStarted !== undefined) {
+      // only update if this is a new value
+      if (this.hasStarted_ !== _hasStarted) {
+        this.hasStarted_ = _hasStarted;
+        if (_hasStarted) {
+          this.addClass('vjs-has-started');
+          // trigger the firstplay event if this newly has played
+          this.trigger('firstplay');
+        } else {
+          this.removeClass('vjs-has-started');
+        }
+      }
+      return this;
+    }
+    return !!this.hasStarted_;
+  };
+
+  /**
+   * Fired whenever the media begins or resumes playback
+   *
+   * @private
+   * @method handleTechPlay_
+   */
+
+
+  Player.prototype.handleTechPlay_ = function handleTechPlay_() {
+    this.removeClass('vjs-ended');
+    this.removeClass('vjs-paused');
+    this.addClass('vjs-playing');
+
+    // hide the poster when the user hits play
+    // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play
+    this.hasStarted(true);
+
+    this.trigger('play');
+  };
+
+  /**
+   * Fired whenever the media begins waiting
+   *
+   * @private
+   * @method handleTechWaiting_
+   */
+
+
+  Player.prototype.handleTechWaiting_ = function handleTechWaiting_() {
+    var _this2 = this;
+
+    this.addClass('vjs-waiting');
+    this.trigger('waiting');
+    this.one('timeupdate', function () {
+      return _this2.removeClass('vjs-waiting');
+    });
+  };
+
+  /**
+   * A handler for events that signal that waiting has ended
+   * which is not consistent between browsers. See #1351
+   *
+   * @private
+   * @method handleTechCanPlay_
+   */
+
+
+  Player.prototype.handleTechCanPlay_ = function handleTechCanPlay_() {
+    this.removeClass('vjs-waiting');
+    this.trigger('canplay');
+  };
+
+  /**
+   * A handler for events that signal that waiting has ended
+   * which is not consistent between browsers. See #1351
+   *
+   * @private
+   * @method handleTechCanPlayThrough_
+   */
+
+
+  Player.prototype.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() {
+    this.removeClass('vjs-waiting');
+    this.trigger('canplaythrough');
+  };
+
+  /**
+   * A handler for events that signal that waiting has ended
+   * which is not consistent between browsers. See #1351
+   *
+   * @private
+   * @method handleTechPlaying_
+   */
+
+
+  Player.prototype.handleTechPlaying_ = function handleTechPlaying_() {
+    this.removeClass('vjs-waiting');
+    this.trigger('playing');
+  };
+
+  /**
+   * Fired whenever the player is jumping to a new time
+   *
+   * @private
+   * @method handleTechSeeking_
+   */
+
+
+  Player.prototype.handleTechSeeking_ = function handleTechSeeking_() {
+    this.addClass('vjs-seeking');
+    this.trigger('seeking');
+  };
+
+  /**
+   * Fired when the player has finished jumping to a new time
+   *
+   * @private
+   * @method handleTechSeeked_
+   */
+
+
+  Player.prototype.handleTechSeeked_ = function handleTechSeeked_() {
+    this.removeClass('vjs-seeking');
+    this.trigger('seeked');
+  };
+
+  /**
+   * Fired the first time a video is played
+   * Not part of the HLS spec, and we're not sure if this is the best
+   * implementation yet, so use sparingly. If you don't have a reason to
+   * prevent playback, use `myPlayer.one('play');` instead.
+   *
+   * @private
+   * @method handleTechFirstPlay_
+   */
+
+
+  Player.prototype.handleTechFirstPlay_ = function handleTechFirstPlay_() {
+    // If the first starttime attribute is specified
+    // then we will start at the given offset in seconds
+    if (this.options_.starttime) {
+      this.currentTime(this.options_.starttime);
+    }
+
+    this.addClass('vjs-has-started');
+    this.trigger('firstplay');
+  };
+
+  /**
+   * Fired whenever the media has been paused
+   *
+   * @private
+   * @method handleTechPause_
+   */
+
+
+  Player.prototype.handleTechPause_ = function handleTechPause_() {
+    this.removeClass('vjs-playing');
+    this.addClass('vjs-paused');
+    this.trigger('pause');
+  };
+
+  /**
+   * Fired while the user agent is downloading media data
+   *
+   * @private
+   * @method handleTechProgress_
+   */
+
+
+  Player.prototype.handleTechProgress_ = function handleTechProgress_() {
+    this.trigger('progress');
+  };
+
+  /**
+   * Fired when the end of the media resource is reached (currentTime == duration)
+   *
+   * @private
+   * @method handleTechEnded_
+   */
+
+
+  Player.prototype.handleTechEnded_ = function handleTechEnded_() {
+    this.addClass('vjs-ended');
+    if (this.options_.loop) {
+      this.currentTime(0);
+      this.play();
+    } else if (!this.paused()) {
+      this.pause();
+    }
+
+    this.trigger('ended');
+  };
+
+  /**
+   * Fired when the duration of the media resource is first known or changed
+   *
+   * @private
+   * @method handleTechDurationChange_
+   */
+
+
+  Player.prototype.handleTechDurationChange_ = function handleTechDurationChange_() {
+    this.duration(this.techGet_('duration'));
+  };
+
+  /**
+   * Handle a click on the media element to play/pause
+   *
+   * @param {Object=} event Event object
+   * @private
+   * @method handleTechClick_
+   */
+
+
+  Player.prototype.handleTechClick_ = function handleTechClick_(event) {
+    // We're using mousedown to detect clicks thanks to Flash, but mousedown
+    // will also be triggered with right-clicks, so we need to prevent that
+    if (event.button !== 0) {
+      return;
+    }
+
+    // When controls are disabled a click should not toggle playback because
+    // the click is considered a control
+    if (this.controls()) {
+      if (this.paused()) {
+        this.play();
+      } else {
+        this.pause();
+      }
+    }
+  };
+
+  /**
+   * Handle a tap on the media element. It will toggle the user
+   * activity state, which hides and shows the controls.
+   *
+   * @private
+   * @method handleTechTap_
+   */
+
+
+  Player.prototype.handleTechTap_ = function handleTechTap_() {
+    this.userActive(!this.userActive());
+  };
+
+  /**
+   * Handle touch to start
+   *
+   * @private
+   * @method handleTechTouchStart_
+   */
+
+
+  Player.prototype.handleTechTouchStart_ = function handleTechTouchStart_() {
+    this.userWasActive = this.userActive();
+  };
+
+  /**
+   * Handle touch to move
+   *
+   * @private
+   * @method handleTechTouchMove_
+   */
+
+
+  Player.prototype.handleTechTouchMove_ = function handleTechTouchMove_() {
+    if (this.userWasActive) {
+      this.reportUserActivity();
+    }
+  };
+
+  /**
+   * Handle touch to end
+   *
+   * @private
+   * @method handleTechTouchEnd_
+   */
+
+
+  Player.prototype.handleTechTouchEnd_ = function handleTechTouchEnd_(event) {
+    // Stop the mouse events from also happening
+    event.preventDefault();
+  };
+
+  /**
+   * Fired when the player switches in or out of fullscreen mode
+   *
+   * @private
+   * @method handleFullscreenChange_
+   */
+
+
+  Player.prototype.handleFullscreenChange_ = function handleFullscreenChange_() {
+    if (this.isFullscreen()) {
+      this.addClass('vjs-fullscreen');
+    } else {
+      this.removeClass('vjs-fullscreen');
+    }
+  };
+
+  /**
+   * native click events on the SWF aren't triggered on IE11, Win8.1RT
+   * use stageclick events triggered from inside the SWF instead
+   *
+   * @private
+   * @method handleStageClick_
+   */
+
+
+  Player.prototype.handleStageClick_ = function handleStageClick_() {
+    this.reportUserActivity();
+  };
+
+  /**
+   * Handle Tech Fullscreen Change
+   *
+   * @private
+   * @method handleTechFullscreenChange_
+   */
+
+
+  Player.prototype.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event, data) {
+    if (data) {
+      this.isFullscreen(data.isFullscreen);
+    }
+    this.trigger('fullscreenchange');
+  };
+
+  /**
+   * Fires when an error occurred during the loading of an audio/video
+   *
+   * @private
+   * @method handleTechError_
+   */
+
+
+  Player.prototype.handleTechError_ = function handleTechError_() {
+    var error = this.tech_.error();
+
+    this.error(error);
+  };
+
+  /**
+   * Fires when the browser is intentionally not getting media data
+   *
+   * @private
+   * @method handleTechSuspend_
+   */
+
+
+  Player.prototype.handleTechSuspend_ = function handleTechSuspend_() {
+    this.trigger('suspend');
+  };
+
+  /**
+   * Fires when the loading of an audio/video is aborted
+   *
+   * @private
+   * @method handleTechAbort_
+   */
+
+
+  Player.prototype.handleTechAbort_ = function handleTechAbort_() {
+    this.trigger('abort');
+  };
+
+  /**
+   * Fires when the current playlist is empty
+   *
+   * @private
+   * @method handleTechEmptied_
+   */
+
+
+  Player.prototype.handleTechEmptied_ = function handleTechEmptied_() {
+    this.trigger('emptied');
+  };
+
+  /**
+   * Fires when the browser is trying to get media data, but data is not available
+   *
+   * @private
+   * @method handleTechStalled_
+   */
+
+
+  Player.prototype.handleTechStalled_ = function handleTechStalled_() {
+    this.trigger('stalled');
+  };
+
+  /**
+   * Fires when the browser has loaded meta data for the audio/video
+   *
+   * @private
+   * @method handleTechLoadedMetaData_
+   */
+
+
+  Player.prototype.handleTechLoadedMetaData_ = function handleTechLoadedMetaData_() {
+    this.trigger('loadedmetadata');
+  };
+
+  Player.prototype.handleTechTextData_ = function handleTechTextData_() {
+    var data = null;
+
+    if (arguments.length > 1) {
+      data = arguments[1];
+    }
+    this.trigger('textdata', data);
+  };
+
+  /**
+   * Fires when the browser has loaded the current frame of the audio/video
+   *
+   * @private
+   * @method handleTechLoadedData_
+   */
+
+
+  Player.prototype.handleTechLoadedData_ = function handleTechLoadedData_() {
+    this.trigger('loadeddata');
+  };
+
+  /**
+   * Fires when the current playback position has changed
+   *
+   * @private
+   * @method handleTechTimeUpdate_
+   */
+
+
+  Player.prototype.handleTechTimeUpdate_ = function handleTechTimeUpdate_() {
+    this.trigger('timeupdate');
+  };
+
+  /**
+   * Fires when the playing speed of the audio/video is changed
+   *
+   * @private
+   * @method handleTechRateChange_
+   */
+
+
+  Player.prototype.handleTechRateChange_ = function handleTechRateChange_() {
+    this.trigger('ratechange');
+  };
+
+  /**
+   * Fires when the volume has been changed
+   *
+   * @private
+   * @method handleTechVolumeChange_
+   */
+
+
+  Player.prototype.handleTechVolumeChange_ = function handleTechVolumeChange_() {
+    this.trigger('volumechange');
+  };
+
+  /**
+   * Fires when the text track has been changed
+   *
+   * @private
+   * @method handleTechTextTrackChange_
+   */
+
+
+  Player.prototype.handleTechTextTrackChange_ = function handleTechTextTrackChange_() {
+    this.trigger('texttrackchange');
+  };
+
+  /**
+   * Get object for cached values.
+   *
+   * @return {Object}
+   * @method getCache
+   */
+
+
+  Player.prototype.getCache = function getCache() {
+    return this.cache_;
+  };
+
+  /**
+   * Pass values to the playback tech
+   *
+   * @param {String=} method Method
+   * @param {Object=} arg Argument
+   * @private
+   * @method techCall_
+   */
+
+
+  Player.prototype.techCall_ = function techCall_(method, arg) {
+    // If it's not ready yet, call method when it is
+    if (this.tech_ && !this.tech_.isReady_) {
+      this.tech_.ready(function () {
+        this[method](arg);
+      }, true);
+
+      // Otherwise call method now
+    } else {
+      try {
+        if (this.tech_) {
+          this.tech_[method](arg);
+        }
+      } catch (e) {
+        (0, _log2['default'])(e);
+        throw e;
+      }
+    }
+  };
+
+  /**
+   * Get calls can't wait for the tech, and sometimes don't need to.
+   *
+   * @param {String} method Tech method
+   * @return {Method}
+   * @private
+   * @method techGet_
+   */
+
+
+  Player.prototype.techGet_ = function techGet_(method) {
+    if (this.tech_ && this.tech_.isReady_) {
+
+      // Flash likes to die and reload when you hide or reposition it.
+      // In these cases the object methods go away and we get errors.
+      // When that happens we'll catch the errors and inform tech that it's not ready any more.
+      try {
+        return this.tech_[method]();
+      } catch (e) {
+        // When building additional tech libs, an expected method may not be defined yet
+        if (this.tech_[method] === undefined) {
+          (0, _log2['default'])('Video.js: ' + method + ' method not defined for ' + this.techName_ + ' playback technology.', e);
+
+          // When a method isn't available on the object it throws a TypeError
+        } else if (e.name === 'TypeError') {
+          (0, _log2['default'])('Video.js: ' + method + ' unavailable on ' + this.techName_ + ' playback technology element.', e);
+          this.tech_.isReady_ = false;
+        } else {
+          (0, _log2['default'])(e);
+        }
+        throw e;
+      }
+    }
+
+    return;
+  };
+
+  /**
+   * start media playback
+   * ```js
+   *     myPlayer.play();
+   * ```
+   *
+   * @return {Player} self
+   * @method play
+   */
+
+
+  Player.prototype.play = function play() {
+    // Only calls the tech's play if we already have a src loaded
+    if (this.src() || this.currentSrc()) {
+      this.techCall_('play');
+    } else {
+      this.tech_.one('loadstart', function () {
+        this.play();
+      });
+    }
+
+    return this;
+  };
+
+  /**
+   * Pause the video playback
+   * ```js
+   *     myPlayer.pause();
+   * ```
+   *
+   * @return {Player} self
+   * @method pause
+   */
+
+
+  Player.prototype.pause = function pause() {
+    this.techCall_('pause');
+    return this;
+  };
+
+  /**
+   * Check if the player is paused
+   * ```js
+   *     var isPaused = myPlayer.paused();
+   *     var isPlaying = !myPlayer.paused();
+   * ```
+   *
+   * @return {Boolean} false if the media is currently playing, or true otherwise
+   * @method paused
+   */
+
+
+  Player.prototype.paused = function paused() {
+    // The initial state of paused should be true (in Safari it's actually false)
+    return this.techGet_('paused') === false ? false : true;
+  };
+
+  /**
+   * Returns whether or not the user is "scrubbing". Scrubbing is when the user
+   * has clicked the progress bar handle and is dragging it along the progress bar.
+   *
+   * @param  {Boolean} isScrubbing   True/false the user is scrubbing
+   * @return {Boolean}               The scrubbing status when getting
+   * @return {Object}                The player when setting
+   * @method scrubbing
+   */
+
+
+  Player.prototype.scrubbing = function scrubbing(isScrubbing) {
+    if (isScrubbing !== undefined) {
+      this.scrubbing_ = !!isScrubbing;
+
+      if (isScrubbing) {
+        this.addClass('vjs-scrubbing');
+      } else {
+        this.removeClass('vjs-scrubbing');
+      }
+
+      return this;
+    }
+
+    return this.scrubbing_;
+  };
+
+  /**
+   * Get or set the current time (in seconds)
+   * ```js
+   *     // get
+   *     var whereYouAt = myPlayer.currentTime();
+   *     // set
+   *     myPlayer.currentTime(120); // 2 minutes into the video
+   * ```
+   *
+   * @param  {Number|String=} seconds The time to seek to
+   * @return {Number}        The time in seconds, when not setting
+   * @return {Player}    self, when the current time is set
+   * @method currentTime
+   */
+
+
+  Player.prototype.currentTime = function currentTime(seconds) {
+    if (seconds !== undefined) {
+
+      this.techCall_('setCurrentTime', seconds);
+
+      return this;
+    }
+
+    // cache last currentTime and return. default to 0 seconds
+    //
+    // Caching the currentTime is meant to prevent a massive amount of reads on the tech's
+    // currentTime when scrubbing, but may not provide much performance benefit afterall.
+    // Should be tested. Also something has to read the actual current time or the cache will
+    // never get updated.
+    this.cache_.currentTime = this.techGet_('currentTime') || 0;
+    return this.cache_.currentTime;
+  };
+
+  /**
+   * Normally gets the length in time of the video in seconds;
+   * in all but the rarest use cases an argument will NOT be passed to the method
+   * ```js
+   *     var lengthOfVideo = myPlayer.duration();
+   * ```
+   * **NOTE**: The video must have started loading before the duration can be
+   * known, and in the case of Flash, may not be known until the video starts
+   * playing.
+   *
+   * @param {Number} seconds Duration when setting
+   * @return {Number} The duration of the video in seconds when getting
+   * @method duration
+   */
+
+
+  Player.prototype.duration = function duration(seconds) {
+    if (seconds === undefined) {
+      return this.cache_.duration || 0;
+    }
+
+    seconds = parseFloat(seconds) || 0;
+
+    // Standardize on Inifity for signaling video is live
+    if (seconds < 0) {
+      seconds = Infinity;
+    }
+
+    if (seconds !== this.cache_.duration) {
+      // Cache the last set value for optimized scrubbing (esp. Flash)
+      this.cache_.duration = seconds;
+
+      if (seconds === Infinity) {
+        this.addClass('vjs-live');
+      } else {
+        this.removeClass('vjs-live');
+      }
+
+      this.trigger('durationchange');
+    }
+
+    return this;
+  };
+
+  /**
+   * Calculates how much time is left.
+   * ```js
+   *     var timeLeft = myPlayer.remainingTime();
+   * ```
+   * Not a native video element function, but useful
+   *
+   * @return {Number} The time remaining in seconds
+   * @method remainingTime
+   */
+
+
+  Player.prototype.remainingTime = function remainingTime() {
+    return this.duration() - this.currentTime();
+  };
+
+  // http://dev.w3.org/html5/spec/video.html#dom-media-buffered
+  // Buffered returns a timerange object.
+  // Kind of like an array of portions of the video that have been downloaded.
+
+  /**
+   * Get a TimeRange object with the times of the video that have been downloaded
+   * If you just want the percent of the video that's been downloaded,
+   * use bufferedPercent.
+   * ```js
+   *     // Number of different ranges of time have been buffered. Usually 1.
+   *     numberOfRanges = bufferedTimeRange.length,
+   *     // Time in seconds when the first range starts. Usually 0.
+   *     firstRangeStart = bufferedTimeRange.start(0),
+   *     // Time in seconds when the first range ends
+   *     firstRangeEnd = bufferedTimeRange.end(0),
+   *     // Length in seconds of the first time range
+   *     firstRangeLength = firstRangeEnd - firstRangeStart;
+   * ```
+   *
+   * @return {Object} A mock TimeRange object (following HTML spec)
+   * @method buffered
+   */
+
+
+  Player.prototype.buffered = function buffered() {
+    var buffered = this.techGet_('buffered');
+
+    if (!buffered || !buffered.length) {
+      buffered = (0, _timeRanges.createTimeRange)(0, 0);
+    }
+
+    return buffered;
+  };
+
+  /**
+   * Get the percent (as a decimal) of the video that's been downloaded
+   * ```js
+   *     var howMuchIsDownloaded = myPlayer.bufferedPercent();
+   * ```
+   * 0 means none, 1 means all.
+   * (This method isn't in the HTML5 spec, but it's very convenient)
+   *
+   * @return {Number} A decimal between 0 and 1 representing the percent
+   * @method bufferedPercent
+   */
+
+
+  Player.prototype.bufferedPercent = function bufferedPercent() {
+    return (0, _buffer.bufferedPercent)(this.buffered(), this.duration());
+  };
+
+  /**
+   * Get the ending time of the last buffered time range
+   * This is used in the progress bar to encapsulate all time ranges.
+   *
+   * @return {Number} The end of the last buffered time range
+   * @method bufferedEnd
+   */
+
+
+  Player.prototype.bufferedEnd = function bufferedEnd() {
+    var buffered = this.buffered();
+    var duration = this.duration();
+    var end = buffered.end(buffered.length - 1);
+
+    if (end > duration) {
+      end = duration;
+    }
+
+    return end;
+  };
+
+  /**
+   * Get or set the current volume of the media
+   * ```js
+   *     // get
+   *     var howLoudIsIt = myPlayer.volume();
+   *     // set
+   *     myPlayer.volume(0.5); // Set volume to half
+   * ```
+   * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.
+   *
+   * @param  {Number} percentAsDecimal The new volume as a decimal percent
+   * @return {Number}              The current volume when getting
+   * @return {Player}              self when setting
+   * @method volume
+   */
+
+
+  Player.prototype.volume = function volume(percentAsDecimal) {
+    var vol = void 0;
+
+    if (percentAsDecimal !== undefined) {
+      // Force value to between 0 and 1
+      vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal)));
+      this.cache_.volume = vol;
+      this.techCall_('setVolume', vol);
+
+      return this;
+    }
+
+    // Default to 1 when returning current volume.
+    vol = parseFloat(this.techGet_('volume'));
+    return isNaN(vol) ? 1 : vol;
+  };
+
+  /**
+   * Get the current muted state, or turn mute on or off
+   * ```js
+   *     // get
+   *     var isVolumeMuted = myPlayer.muted();
+   *     // set
+   *     myPlayer.muted(true); // mute the volume
+   * ```
+   *
+   * @param  {Boolean=} muted True to mute, false to unmute
+   * @return {Boolean} True if mute is on, false if not when getting
+   * @return {Player} self when setting mute
+   * @method muted
+   */
+
+
+  Player.prototype.muted = function muted(_muted) {
+    if (_muted !== undefined) {
+      this.techCall_('setMuted', _muted);
+      return this;
+    }
+    return this.techGet_('muted') || false;
+  };
+
+  // Check if current tech can support native fullscreen
+  // (e.g. with built in controls like iOS, so not our flash swf)
+  /**
+   * Check to see if fullscreen is supported
+   *
+   * @return {Boolean}
+   * @method supportsFullScreen
+   */
+
+
+  Player.prototype.supportsFullScreen = function supportsFullScreen() {
+    return this.techGet_('supportsFullScreen') || false;
+  };
+
+  /**
+   * Check if the player is in fullscreen mode
+   * ```js
+   *     // get
+   *     var fullscreenOrNot = myPlayer.isFullscreen();
+   *     // set
+   *     myPlayer.isFullscreen(true); // tell the player it's in fullscreen
+   * ```
+   * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official
+   * property and instead document.fullscreenElement is used. But isFullscreen is
+   * still a valuable property for internal player workings.
+   *
+   * @param  {Boolean=} isFS Update the player's fullscreen state
+   * @return {Boolean} true if fullscreen false if not when getting
+   * @return {Player} self when setting
+   * @method isFullscreen
+   */
+
+
+  Player.prototype.isFullscreen = function isFullscreen(isFS) {
+    if (isFS !== undefined) {
+      this.isFullscreen_ = !!isFS;
+      return this;
+    }
+    return !!this.isFullscreen_;
+  };
+
+  /**
+   * Increase the size of the video to full screen
+   * ```js
+   *     myPlayer.requestFullscreen();
+   * ```
+   * In some browsers, full screen is not supported natively, so it enters
+   * "full window mode", where the video fills the browser window.
+   * In browsers and devices that support native full screen, sometimes the
+   * browser's default controls will be shown, and not the Video.js custom skin.
+   * This includes most mobile devices (iOS, Android) and older versions of
+   * Safari.
+   *
+   * @return {Player} self
+   * @method requestFullscreen
+   */
+
+
+  Player.prototype.requestFullscreen = function requestFullscreen() {
+    var fsApi = _fullscreenApi2['default'];
+
+    this.isFullscreen(true);
+
+    if (fsApi.requestFullscreen) {
+      // the browser supports going fullscreen at the element level so we can
+      // take the controls fullscreen as well as the video
+
+      // Trigger fullscreenchange event after change
+      // We have to specifically add this each time, and remove
+      // when canceling fullscreen. Otherwise if there's multiple
+      // players on a page, they would all be reacting to the same fullscreen
+      // events
+      Events.on(_document2['default'], fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e) {
+        this.isFullscreen(_document2['default'][fsApi.fullscreenElement]);
+
+        // If cancelling fullscreen, remove event listener.
+        if (this.isFullscreen() === false) {
+          Events.off(_document2['default'], fsApi.fullscreenchange, documentFullscreenChange);
+        }
+
+        this.trigger('fullscreenchange');
+      }));
+
+      this.el_[fsApi.requestFullscreen]();
+    } else if (this.tech_.supportsFullScreen()) {
+      // we can't take the video.js controls fullscreen but we can go fullscreen
+      // with native controls
+      this.techCall_('enterFullScreen');
+    } else {
+      // fullscreen isn't supported so we'll just stretch the video element to
+      // fill the viewport
+      this.enterFullWindow();
+      this.trigger('fullscreenchange');
+    }
+
+    return this;
+  };
+
+  /**
+   * Return the video to its normal size after having been in full screen mode
+   * ```js
+   *     myPlayer.exitFullscreen();
+   * ```
+   *
+   * @return {Player} self
+   * @method exitFullscreen
+   */
+
+
+  Player.prototype.exitFullscreen = function exitFullscreen() {
+    var fsApi = _fullscreenApi2['default'];
+
+    this.isFullscreen(false);
+
+    // Check for browser element fullscreen support
+    if (fsApi.requestFullscreen) {
+      _document2['default'][fsApi.exitFullscreen]();
+    } else if (this.tech_.supportsFullScreen()) {
+      this.techCall_('exitFullScreen');
+    } else {
+      this.exitFullWindow();
+      this.trigger('fullscreenchange');
+    }
+
+    return this;
+  };
+
+  /**
+   * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.
+   *
+   * @method enterFullWindow
+   */
+
+
+  Player.prototype.enterFullWindow = function enterFullWindow() {
+    this.isFullWindow = true;
+
+    // Storing original doc overflow value to return to when fullscreen is off
+    this.docOrigOverflow = _document2['default'].documentElement.style.overflow;
+
+    // Add listener for esc key to exit fullscreen
+    Events.on(_document2['default'], 'keydown', Fn.bind(this, this.fullWindowOnEscKey));
+
+    // Hide any scroll bars
+    _document2['default'].documentElement.style.overflow = 'hidden';
+
+    // Apply fullscreen styles
+    Dom.addElClass(_document2['default'].body, 'vjs-full-window');
+
+    this.trigger('enterFullWindow');
+  };
+
+  /**
+   * Check for call to either exit full window or full screen on ESC key
+   *
+   * @param {String} event Event to check for key press
+   * @method fullWindowOnEscKey
+   */
+
+
+  Player.prototype.fullWindowOnEscKey = function fullWindowOnEscKey(event) {
+    if (event.keyCode === 27) {
+      if (this.isFullscreen() === true) {
+        this.exitFullscreen();
+      } else {
+        this.exitFullWindow();
+      }
+    }
+  };
+
+  /**
+   * Exit full window
+   *
+   * @method exitFullWindow
+   */
+
+
+  Player.prototype.exitFullWindow = function exitFullWindow() {
+    this.isFullWindow = false;
+    Events.off(_document2['default'], 'keydown', this.fullWindowOnEscKey);
+
+    // Unhide scroll bars.
+    _document2['default'].documentElement.style.overflow = this.docOrigOverflow;
+
+    // Remove fullscreen styles
+    Dom.removeElClass(_document2['default'].body, 'vjs-full-window');
+
+    // Resize the box, controller, and poster to original sizes
+    // this.positionAll();
+    this.trigger('exitFullWindow');
+  };
+
+  /**
+   * Check whether the player can play a given mimetype
+   *
+   * @param {String} type The mimetype to check
+   * @return {String} 'probably', 'maybe', or '' (empty string)
+   * @method canPlayType
+   */
+
+
+  Player.prototype.canPlayType = function canPlayType(type) {
+    var can = void 0;
+
+    // Loop through each playback technology in the options order
+    for (var i = 0, j = this.options_.techOrder; i < j.length; i++) {
+      var techName = (0, _toTitleCase2['default'])(j[i]);
+      var tech = _tech2['default'].getTech(techName);
+
+      // Support old behavior of techs being registered as components.
+      // Remove once that deprecated behavior is removed.
+      if (!tech) {
+        tech = _component2['default'].getComponent(techName);
+      }
+
+      // Check if the current tech is defined before continuing
+      if (!tech) {
+        _log2['default'].error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.');
+        continue;
+      }
+
+      // Check if the browser supports this technology
+      if (tech.isSupported()) {
+        can = tech.canPlayType(type);
+
+        if (can) {
+          return can;
+        }
+      }
+    }
+
+    return '';
+  };
+
+  /**
+   * Select source based on tech-order or source-order
+   * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,
+   * defaults to tech-order selection
+   *
+   * @param {Array} sources The sources for a media asset
+   * @return {Object|Boolean} Object of source and tech order, otherwise false
+   * @method selectSource
+   */
+
+
+  Player.prototype.selectSource = function selectSource(sources) {
+    var _this3 = this;
+
+    // Get only the techs specified in `techOrder` that exist and are supported by the
+    // current platform
+    var techs = this.options_.techOrder.map(_toTitleCase2['default']).map(function (techName) {
+      // `Component.getComponent(...)` is for support of old behavior of techs
+      // being registered as components.
+      // Remove once that deprecated behavior is removed.
+      return [techName, _tech2['default'].getTech(techName) || _component2['default'].getComponent(techName)];
+    }).filter(function (_ref) {
+      var techName = _ref[0];
+      var tech = _ref[1];
+
+      // Check if the current tech is defined before continuing
+      if (tech) {
+        // Check if the browser supports this technology
+        return tech.isSupported();
+      }
+
+      _log2['default'].error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.');
+      return false;
+    });
+
+    // Iterate over each `innerArray` element once per `outerArray` element and execute
+    // `tester` with both. If `tester` returns a non-falsy value, exit early and return
+    // that value.
+    var findFirstPassingTechSourcePair = function findFirstPassingTechSourcePair(outerArray, innerArray, tester) {
+      var found = void 0;
+
+      outerArray.some(function (outerChoice) {
+        return innerArray.some(function (innerChoice) {
+          found = tester(outerChoice, innerChoice);
+
+          if (found) {
+            return true;
+          }
+        });
+      });
+
+      return found;
+    };
+
+    var foundSourceAndTech = void 0;
+    var flip = function flip(fn) {
+      return function (a, b) {
+        return fn(b, a);
+      };
+    };
+    var finder = function finder(_ref2, source) {
+      var techName = _ref2[0];
+      var tech = _ref2[1];
+
+      if (tech.canPlaySource(source, _this3.options_[techName.toLowerCase()])) {
+        return { source: source, tech: techName };
+      }
+    };
+
+    // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources
+    // to select from them based on their priority.
+    if (this.options_.sourceOrder) {
+      // Source-first ordering
+      foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder));
+    } else {
+      // Tech-first ordering
+      foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder);
+    }
+
+    return foundSourceAndTech || false;
+  };
+
+  /**
+   * The source function updates the video source
+   * There are three types of variables you can pass as the argument.
+   * **URL String**: A URL to the the video file. Use this method if you are sure
+   * the current playback technology (HTML5/Flash) can support the source you
+   * provide. Currently only MP4 files can be used in both HTML5 and Flash.
+   * ```js
+   *     myPlayer.src("http://www.example.com/path/to/video.mp4");
+   * ```
+   * **Source Object (or element):* * A javascript object containing information
+   * about the source file. Use this method if you want the player to determine if
+   * it can support the file using the type information.
+   * ```js
+   *     myPlayer.src({ type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" });
+   * ```
+   * **Array of Source Objects:* * To provide multiple versions of the source so
+   * that it can be played using HTML5 across browsers you can use an array of
+   * source objects. Video.js will detect which version is supported and load that
+   * file.
+   * ```js
+   *     myPlayer.src([
+   *       { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" },
+   *       { type: "video/webm", src: "http://www.example.com/path/to/video.webm" },
+   *       { type: "video/ogg", src: "http://www.example.com/path/to/video.ogv" }
+   *     ]);
+   * ```
+   *
+   * @param  {String|Object|Array=} source The source URL, object, or array of sources
+   * @return {String} The current video source when getting
+   * @return {String} The player when setting
+   * @method src
+   */
+
+
+  Player.prototype.src = function src(source) {
+    if (source === undefined) {
+      return this.techGet_('src');
+    }
+
+    var currentTech = _tech2['default'].getTech(this.techName_);
+
+    // Support old behavior of techs being registered as components.
+    // Remove once that deprecated behavior is removed.
+    if (!currentTech) {
+      currentTech = _component2['default'].getComponent(this.techName_);
+    }
+
+    // case: Array of source objects to choose from and pick the best to play
+    if (Array.isArray(source)) {
+      this.sourceList_(source);
+
+      // case: URL String (http://myvideo...)
+    } else if (typeof source === 'string') {
+      // create a source object from the string
+      this.src({ src: source });
+
+      // case: Source object { src: '', type: '' ... }
+    } else if (source instanceof Object) {
+      // check if the source has a type and the loaded tech cannot play the source
+      // if there's no type we'll just try the current tech
+      if (source.type && !currentTech.canPlaySource(source, this.options_[this.techName_.toLowerCase()])) {
+        // create a source list with the current source and send through
+        // the tech loop to check for a compatible technology
+        this.sourceList_([source]);
+      } else {
+        this.cache_.src = source.src;
+        this.currentType_ = source.type || '';
+
+        // wait until the tech is ready to set the source
+        this.ready(function () {
+
+          // The setSource tech method was added with source handlers
+          // so older techs won't support it
+          // We need to check the direct prototype for the case where subclasses
+          // of the tech do not support source handlers
+          if (currentTech.prototype.hasOwnProperty('setSource')) {
+            this.techCall_('setSource', source);
+          } else {
+            this.techCall_('src', source.src);
+          }
+
+          if (this.options_.preload === 'auto') {
+            this.load();
+          }
+
+          if (this.options_.autoplay) {
+            this.play();
+          }
+
+          // Set the source synchronously if possible (#2326)
+        }, true);
+      }
+    }
+
+    return this;
+  };
+
+  /**
+   * Handle an array of source objects
+   *
+   * @param  {Array} sources Array of source objects
+   * @private
+   * @method sourceList_
+   */
+
+
+  Player.prototype.sourceList_ = function sourceList_(sources) {
+    var sourceTech = this.selectSource(sources);
+
+    if (sourceTech) {
+      if (sourceTech.tech === this.techName_) {
+        // if this technology is already loaded, set the source
+        this.src(sourceTech.source);
+      } else {
+        // load this technology with the chosen source
+        this.loadTech_(sourceTech.tech, sourceTech.source);
+      }
+    } else {
+      // We need to wrap this in a timeout to give folks a chance to add error event handlers
+      this.setTimeout(function () {
+        this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) });
+      }, 0);
+
+      // we could not find an appropriate tech, but let's still notify the delegate that this is it
+      // this needs a better comment about why this is needed
+      this.triggerReady();
+    }
+  };
+
+  /**
+   * Begin loading the src data.
+   *
+   * @return {Player} Returns the player
+   * @method load
+   */
+
+
+  Player.prototype.load = function load() {
+    this.techCall_('load');
+    return this;
+  };
+
+  /**
+   * Reset the player. Loads the first tech in the techOrder,
+   * and calls `reset` on the tech`.
+   *
+   * @return {Player} Returns the player
+   * @method reset
+   */
+
+
+  Player.prototype.reset = function reset() {
+    this.loadTech_((0, _toTitleCase2['default'])(this.options_.techOrder[0]), null);
+    this.techCall_('reset');
+    return this;
+  };
+
+  /**
+   * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4
+   * Can be used in conjuction with `currentType` to assist in rebuilding the current source object.
+   *
+   * @return {String} The current source
+   * @method currentSrc
+   */
+
+
+  Player.prototype.currentSrc = function currentSrc() {
+    return this.techGet_('currentSrc') || this.cache_.src || '';
+  };
+
+  /**
+   * Get the current source type e.g. video/mp4
+   * This can allow you rebuild the current source object so that you could load the same
+   * source and tech later
+   *
+   * @return {String} The source MIME type
+   * @method currentType
+   */
+
+
+  Player.prototype.currentType = function currentType() {
+    return this.currentType_ || '';
+  };
+
+  /**
+   * Get or set the preload attribute
+   *
+   * @param {Boolean} value Boolean to determine if preload should be used
+   * @return {String} The preload attribute value when getting
+   * @return {Player} Returns the player when setting
+   * @method preload
+   */
+
+
+  Player.prototype.preload = function preload(value) {
+    if (value !== undefined) {
+      this.techCall_('setPreload', value);
+      this.options_.preload = value;
+      return this;
+    }
+    return this.techGet_('preload');
+  };
+
+  /**
+   * Get or set the autoplay attribute.
+   *
+   * @param {Boolean} value Boolean to determine if video should autoplay
+   * @return {String} The autoplay attribute value when getting
+   * @return {Player} Returns the player when setting
+   * @method autoplay
+   */
+
+
+  Player.prototype.autoplay = function autoplay(value) {
+    if (value !== undefined) {
+      this.techCall_('setAutoplay', value);
+      this.options_.autoplay = value;
+      return this;
+    }
+    return this.techGet_('autoplay', value);
+  };
+
+  /**
+   * Get or set the loop attribute on the video element.
+   *
+   * @param {Boolean} value Boolean to determine if video should loop
+   * @return {String} The loop attribute value when getting
+   * @return {Player} Returns the player when setting
+   * @method loop
+   */
+
+
+  Player.prototype.loop = function loop(value) {
+    if (value !== undefined) {
+      this.techCall_('setLoop', value);
+      this.options_.loop = value;
+      return this;
+    }
+    return this.techGet_('loop');
+  };
+
+  /**
+   * Get or set the poster image source url
+   *
+   * ##### EXAMPLE:
+   * ```js
+   *     // get
+   *     var currentPoster = myPlayer.poster();
+   *     // set
+   *     myPlayer.poster('http://example.com/myImage.jpg');
+   * ```
+   *
+   * @param  {String=} src Poster image source URL
+   * @return {String} poster URL when getting
+   * @return {Player} self when setting
+   * @method poster
+   */
+
+
+  Player.prototype.poster = function poster(src) {
+    if (src === undefined) {
+      return this.poster_;
+    }
+
+    // The correct way to remove a poster is to set as an empty string
+    // other falsey values will throw errors
+    if (!src) {
+      src = '';
+    }
+
+    // update the internal poster variable
+    this.poster_ = src;
+
+    // update the tech's poster
+    this.techCall_('setPoster', src);
+
+    // alert components that the poster has been set
+    this.trigger('posterchange');
+
+    return this;
+  };
+
+  /**
+   * Some techs (e.g. YouTube) can provide a poster source in an
+   * asynchronous way. We want the poster component to use this
+   * poster source so that it covers up the tech's controls.
+   * (YouTube's play button). However we only want to use this
+   * soruce if the player user hasn't set a poster through
+   * the normal APIs.
+   *
+   * @private
+   * @method handleTechPosterChange_
+   */
+
+
+  Player.prototype.handleTechPosterChange_ = function handleTechPosterChange_() {
+    if (!this.poster_ && this.tech_ && this.tech_.poster) {
+      this.poster_ = this.tech_.poster() || '';
+
+      // Let components know the poster has changed
+      this.trigger('posterchange');
+    }
+  };
+
+  /**
+   * Get or set whether or not the controls are showing.
+   *
+   * @param  {Boolean} bool Set controls to showing or not
+   * @return {Boolean}    Controls are showing
+   * @method controls
+   */
+
+
+  Player.prototype.controls = function controls(bool) {
+    if (bool !== undefined) {
+      bool = !!bool;
+
+      // Don't trigger a change event unless it actually changed
+      if (this.controls_ !== bool) {
+        this.controls_ = bool;
+
+        if (this.usingNativeControls()) {
+          this.techCall_('setControls', bool);
+        }
+
+        if (bool) {
+          this.removeClass('vjs-controls-disabled');
+          this.addClass('vjs-controls-enabled');
+          this.trigger('controlsenabled');
+
+          if (!this.usingNativeControls()) {
+            this.addTechControlsListeners_();
+          }
+        } else {
+          this.removeClass('vjs-controls-enabled');
+          this.addClass('vjs-controls-disabled');
+          this.trigger('controlsdisabled');
+
+          if (!this.usingNativeControls()) {
+            this.removeTechControlsListeners_();
+          }
+        }
+      }
+      return this;
+    }
+    return !!this.controls_;
+  };
+
+  /**
+   * Toggle native controls on/off. Native controls are the controls built into
+   * devices (e.g. default iPhone controls), Flash, or other techs
+   * (e.g. Vimeo Controls)
+   * **This should only be set by the current tech, because only the tech knows
+   * if it can support native controls**
+   *
+   * @param  {Boolean} bool    True signals that native controls are on
+   * @return {Player}      Returns the player
+   * @private
+   * @method usingNativeControls
+   */
+
+
+  Player.prototype.usingNativeControls = function usingNativeControls(bool) {
+    if (bool !== undefined) {
+      bool = !!bool;
+
+      // Don't trigger a change event unless it actually changed
+      if (this.usingNativeControls_ !== bool) {
+        this.usingNativeControls_ = bool;
+        if (bool) {
+          this.addClass('vjs-using-native-controls');
+
+          /**
+            * player is using the native device controls
+           *
+            * @event usingnativecontrols
+            * @memberof Player
+            * @instance
+            * @private
+            */
+          this.trigger('usingnativecontrols');
+        } else {
+          this.removeClass('vjs-using-native-controls');
+
+          /**
+            * player is using the custom HTML controls
+           *
+            * @event usingcustomcontrols
+            * @memberof Player
+            * @instance
+            * @private
+            */
+          this.trigger('usingcustomcontrols');
+        }
+      }
+      return this;
+    }
+    return !!this.usingNativeControls_;
+  };
+
+  /**
+   * Set or get the current MediaError
+   *
+   * @param  {*} err A MediaError or a String/Number to be turned into a MediaError
+   * @return {MediaError|null}     when getting
+   * @return {Player}              when setting
+   * @method error
+   */
+
+
+  Player.prototype.error = function error(err) {
+    if (err === undefined) {
+      return this.error_ || null;
+    }
+
+    // restoring to default
+    if (err === null) {
+      this.error_ = err;
+      this.removeClass('vjs-error');
+      if (this.errorDisplay) {
+        this.errorDisplay.close();
+      }
+      return this;
+    }
+
+    this.error_ = new _mediaError2['default'](err);
+
+    // add the vjs-error classname to the player
+    this.addClass('vjs-error');
+
+    // log the name of the error type and any message
+    // ie8 just logs "[object object]" if you just log the error object
+    _log2['default'].error('(CODE:' + this.error_.code + ' ' + _mediaError2['default'].errorTypes[this.error_.code] + ')', this.error_.message, this.error_);
+
+    // fire an error event on the player
+    this.trigger('error');
+
+    return this;
+  };
+
+  /**
+   * Returns whether or not the player is in the "ended" state.
+   *
+   * @return {Boolean} True if the player is in the ended state, false if not.
+   * @method ended
+   */
+
+
+  Player.prototype.ended = function ended() {
+    return this.techGet_('ended');
+  };
+
+  /**
+   * Returns whether or not the player is in the "seeking" state.
+   *
+   * @return {Boolean} True if the player is in the seeking state, false if not.
+   * @method seeking
+   */
+
+
+  Player.prototype.seeking = function seeking() {
+    return this.techGet_('seeking');
+  };
+
+  /**
+   * Returns the TimeRanges of the media that are currently available
+   * for seeking to.
+   *
+   * @return {TimeRanges} the seekable intervals of the media timeline
+   * @method seekable
+   */
+
+
+  Player.prototype.seekable = function seekable() {
+    return this.techGet_('seekable');
+  };
+
+  /**
+   * Report user activity
+   *
+   * @param {Object} event Event object
+   * @method reportUserActivity
+   */
+
+
+  Player.prototype.reportUserActivity = function reportUserActivity(event) {
+    this.userActivity_ = true;
+  };
+
+  /**
+   * Get/set if user is active
+   *
+   * @param {Boolean} bool Value when setting
+   * @return {Boolean} Value if user is active user when getting
+   * @method userActive
+   */
+
+
+  Player.prototype.userActive = function userActive(bool) {
+    if (bool !== undefined) {
+      bool = !!bool;
+      if (bool !== this.userActive_) {
+        this.userActive_ = bool;
+        if (bool) {
+          // If the user was inactive and is now active we want to reset the
+          // inactivity timer
+          this.userActivity_ = true;
+          this.removeClass('vjs-user-inactive');
+          this.addClass('vjs-user-active');
+          this.trigger('useractive');
+        } else {
+          // We're switching the state to inactive manually, so erase any other
+          // activity
+          this.userActivity_ = false;
+
+          // Chrome/Safari/IE have bugs where when you change the cursor it can
+          // trigger a mousemove event. This causes an issue when you're hiding
+          // the cursor when the user is inactive, and a mousemove signals user
+          // activity. Making it impossible to go into inactive mode. Specifically
+          // this happens in fullscreen when we really need to hide the cursor.
+          //
+          // When this gets resolved in ALL browsers it can be removed
+          // https://code.google.com/p/chromium/issues/detail?id=103041
+          if (this.tech_) {
+            this.tech_.one('mousemove', function (e) {
+              e.stopPropagation();
+              e.preventDefault();
+            });
+          }
+
+          this.removeClass('vjs-user-active');
+          this.addClass('vjs-user-inactive');
+          this.trigger('userinactive');
+        }
+      }
+      return this;
+    }
+    return this.userActive_;
+  };
+
+  /**
+   * Listen for user activity based on timeout value
+   *
+   * @private
+   * @method listenForUserActivity_
+   */
+
+
+  Player.prototype.listenForUserActivity_ = function listenForUserActivity_() {
+    var mouseInProgress = void 0;
+    var lastMoveX = void 0;
+    var lastMoveY = void 0;
+    var handleActivity = Fn.bind(this, this.reportUserActivity);
+
+    var handleMouseMove = function handleMouseMove(e) {
+      // #1068 - Prevent mousemove spamming
+      // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970
+      if (e.screenX !== lastMoveX || e.screenY !== lastMoveY) {
+        lastMoveX = e.screenX;
+        lastMoveY = e.screenY;
+        handleActivity();
+      }
+    };
+
+    var handleMouseDown = function handleMouseDown() {
+      handleActivity();
+      // For as long as the they are touching the device or have their mouse down,
+      // we consider them active even if they're not moving their finger or mouse.
+      // So we want to continue to update that they are active
+      this.clearInterval(mouseInProgress);
+      // Setting userActivity=true now and setting the interval to the same time
+      // as the activityCheck interval (250) should ensure we never miss the
+      // next activityCheck
+      mouseInProgress = this.setInterval(handleActivity, 250);
+    };
+
+    var handleMouseUp = function handleMouseUp(event) {
+      handleActivity();
+      // Stop the interval that maintains activity if the mouse/touch is down
+      this.clearInterval(mouseInProgress);
+    };
+
+    // Any mouse movement will be considered user activity
+    this.on('mousedown', handleMouseDown);
+    this.on('mousemove', handleMouseMove);
+    this.on('mouseup', handleMouseUp);
+
+    // Listen for keyboard navigation
+    // Shouldn't need to use inProgress interval because of key repeat
+    this.on('keydown', handleActivity);
+    this.on('keyup', handleActivity);
+
+    // Run an interval every 250 milliseconds instead of stuffing everything into
+    // the mousemove/touchmove function itself, to prevent performance degradation.
+    // `this.reportUserActivity` simply sets this.userActivity_ to true, which
+    // then gets picked up by this loop
+    // http://ejohn.org/blog/learning-from-twitter/
+    var inactivityTimeout = void 0;
+
+    this.setInterval(function () {
+      // Check to see if mouse/touch activity has happened
+      if (this.userActivity_) {
+        // Reset the activity tracker
+        this.userActivity_ = false;
+
+        // If the user state was inactive, set the state to active
+        this.userActive(true);
+
+        // Clear any existing inactivity timeout to start the timer over
+        this.clearTimeout(inactivityTimeout);
+
+        var timeout = this.options_.inactivityTimeout;
+
+        if (timeout > 0) {
+          // In <timeout> milliseconds, if no more activity has occurred the
+          // user will be considered inactive
+          inactivityTimeout = this.setTimeout(function () {
+            // Protect against the case where the inactivityTimeout can trigger just
+            // before the next user activity is picked up by the activity check loop
+            // causing a flicker
+            if (!this.userActivity_) {
+              this.userActive(false);
+            }
+          }, timeout);
+        }
+      }
+    }, 250);
+  };
+
+  /**
+   * Gets or sets the current playback rate.  A playback rate of
+   * 1.0 represents normal speed and 0.5 would indicate half-speed
+   * playback, for instance.
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate
+   *
+   * @param  {Number} rate    New playback rate to set.
+   * @return {Number}         Returns the new playback rate when setting
+   * @return {Number}         Returns the current playback rate when getting
+   * @method playbackRate
+   */
+
+
+  Player.prototype.playbackRate = function playbackRate(rate) {
+    if (rate !== undefined) {
+      this.techCall_('setPlaybackRate', rate);
+      return this;
+    }
+
+    if (this.tech_ && this.tech_.featuresPlaybackRate) {
+      return this.techGet_('playbackRate');
+    }
+    return 1.0;
+  };
+
+  /**
+   * Gets or sets the audio flag
+   *
+   * @param  {Boolean} bool    True signals that this is an audio player.
+   * @return {Boolean}         Returns true if player is audio, false if not when getting
+   * @return {Player}      Returns the player if setting
+   * @private
+   * @method isAudio
+   */
+
+
+  Player.prototype.isAudio = function isAudio(bool) {
+    if (bool !== undefined) {
+      this.isAudio_ = !!bool;
+      return this;
+    }
+
+    return !!this.isAudio_;
+  };
+
+  /**
+   * Returns the current state of network activity for the element, from
+   * the codes in the list below.
+   * - NETWORK_EMPTY (numeric value 0)
+   *   The element has not yet been initialised. All attributes are in
+   *   their initial states.
+   * - NETWORK_IDLE (numeric value 1)
+   *   The element's resource selection algorithm is active and has
+   *   selected a resource, but it is not actually using the network at
+   *   this time.
+   * - NETWORK_LOADING (numeric value 2)
+   *   The user agent is actively trying to download data.
+   * - NETWORK_NO_SOURCE (numeric value 3)
+   *   The element's resource selection algorithm is active, but it has
+   *   not yet found a resource to use.
+   *
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states
+   * @return {Number} the current network activity state
+   * @method networkState
+   */
+
+
+  Player.prototype.networkState = function networkState() {
+    return this.techGet_('networkState');
+  };
+
+  /**
+   * Returns a value that expresses the current state of the element
+   * with respect to rendering the current playback position, from the
+   * codes in the list below.
+   * - HAVE_NOTHING (numeric value 0)
+   *   No information regarding the media resource is available.
+   * - HAVE_METADATA (numeric value 1)
+   *   Enough of the resource has been obtained that the duration of the
+   *   resource is available.
+   * - HAVE_CURRENT_DATA (numeric value 2)
+   *   Data for the immediate current playback position is available.
+   * - HAVE_FUTURE_DATA (numeric value 3)
+   *   Data for the immediate current playback position is available, as
+   *   well as enough data for the user agent to advance the current
+   *   playback position in the direction of playback.
+   * - HAVE_ENOUGH_DATA (numeric value 4)
+   *   The user agent estimates that enough data is available for
+   *   playback to proceed uninterrupted.
+   *
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate
+   * @return {Number} the current playback rendering state
+   * @method readyState
+   */
+
+
+  Player.prototype.readyState = function readyState() {
+    return this.techGet_('readyState');
+  };
+
+  /**
+   * Get a video track list
+   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist
+   *
+   * @return {VideoTrackList} thes current video track list
+   * @method videoTracks
+   */
+
+
+  Player.prototype.videoTracks = function videoTracks() {
+    // if we have not yet loadTech_, we create videoTracks_
+    // these will be passed to the tech during loading
+    if (!this.tech_) {
+      this.videoTracks_ = this.videoTracks_ || new _videoTrackList2['default']();
+      return this.videoTracks_;
+    }
+
+    return this.tech_.videoTracks();
+  };
+
+  /**
+   * Get an audio track list
+   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist
+   *
+   * @return {AudioTrackList} thes current audio track list
+   * @method audioTracks
+   */
+
+
+  Player.prototype.audioTracks = function audioTracks() {
+    // if we have not yet loadTech_, we create videoTracks_
+    // these will be passed to the tech during loading
+    if (!this.tech_) {
+      this.audioTracks_ = this.audioTracks_ || new _audioTrackList2['default']();
+      return this.audioTracks_;
+    }
+
+    return this.tech_.audioTracks();
+  };
+
+  /*
+    * Text tracks are tracks of timed text events.
+    * Captions - text displayed over the video for the hearing impaired
+    * Subtitles - text displayed over the video for those who don't understand language in the video
+    * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video
+    * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device
+    */
+
+  /**
+   * Get an array of associated text tracks. captions, subtitles, chapters, descriptions
+   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks
+   *
+   * @return {Array}           Array of track objects
+   * @method textTracks
+   */
+
+
+  Player.prototype.textTracks = function textTracks() {
+    // cannot use techGet_ directly because it checks to see whether the tech is ready.
+    // Flash is unlikely to be ready in time but textTracks should still work.
+    if (this.tech_) {
+      return this.tech_.textTracks();
+    }
+  };
+
+  /**
+   * Get an array of remote text tracks
+   *
+   * @return {Array}
+   * @method remoteTextTracks
+   */
+
+
+  Player.prototype.remoteTextTracks = function remoteTextTracks() {
+    if (this.tech_) {
+      return this.tech_.remoteTextTracks();
+    }
+  };
+
+  /**
+   * Get an array of remote html track elements
+   *
+   * @return {HTMLTrackElement[]}
+   * @method remoteTextTrackEls
+   */
+
+
+  Player.prototype.remoteTextTrackEls = function remoteTextTrackEls() {
+    if (this.tech_) {
+      return this.tech_.remoteTextTrackEls();
+    }
+  };
+
+  /**
+   * Add a text track
+   * In addition to the W3C settings we allow adding additional info through options.
+   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack
+   *
+   * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata
+   * @param {String=} label       Optional label
+   * @param {String=} language    Optional language
+   * @method addTextTrack
+   */
+
+
+  Player.prototype.addTextTrack = function addTextTrack(kind, label, language) {
+    if (this.tech_) {
+      return this.tech_.addTextTrack(kind, label, language);
+    }
+  };
+
+  /**
+   * Add a remote text track
+   *
+   * @param {Object} options    Options for remote text track
+   * @method addRemoteTextTrack
+   */
+
+
+  Player.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) {
+    if (this.tech_) {
+      return this.tech_.addRemoteTextTrack(options);
+    }
+  };
+
+  /**
+   * Remove a remote text track
+   *
+   * @param {Object} track    Remote text track to remove
+   * @method removeRemoteTextTrack
+   */
+  // destructure the input into an object with a track argument, defaulting to arguments[0]
+  // default the whole argument to an empty object if nothing was passed in
+
+
+  Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack() {
+    var _ref3 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    var _ref3$track = _ref3.track;
+    var track = _ref3$track === undefined ? arguments[0] : _ref3$track;
+
+    if (this.tech_) {
+      return this.tech_.removeRemoteTextTrack(track);
+    }
+  };
+
+  /**
+   * Get video width
+   *
+   * @return {Number} Video width
+   * @method videoWidth
+   */
+
+
+  Player.prototype.videoWidth = function videoWidth() {
+    return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;
+  };
+
+  /**
+   * Get video height
+   *
+   * @return {Number} Video height
+   * @method videoHeight
+   */
+
+
+  Player.prototype.videoHeight = function videoHeight() {
+    return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;
+  };
+
+  // Methods to add support for
+  // initialTime: function() { return this.techCall_('initialTime'); },
+  // startOffsetTime: function() { return this.techCall_('startOffsetTime'); },
+  // played: function() { return this.techCall_('played'); },
+  // defaultPlaybackRate: function() { return this.techCall_('defaultPlaybackRate'); },
+  // defaultMuted: function() { return this.techCall_('defaultMuted'); }
+
+  /**
+   * The player's language code
+   * NOTE: The language should be set in the player options if you want the
+   * the controls to be built with a specific language. Changing the lanugage
+   * later will not update controls text.
+   *
+   * @param {String} code  The locale string
+   * @return {String}      The locale string when getting
+   * @return {Player}      self when setting
+   * @method language
+   */
+
+
+  Player.prototype.language = function language(code) {
+    if (code === undefined) {
+      return this.language_;
+    }
+
+    this.language_ = String(code).toLowerCase();
+    return this;
+  };
+
+  /**
+   * Get the player's language dictionary
+   * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time
+   * Languages specified directly in the player options have precedence
+   *
+   * @return {Array} Array of languages
+   * @method languages
+   */
+
+
+  Player.prototype.languages = function languages() {
+    return (0, _mergeOptions2['default'])(Player.prototype.options_.languages, this.languages_);
+  };
+
+  /**
+   * Converts track info to JSON
+   *
+   * @return {Object} JSON object of options
+   * @method toJSON
+   */
+
+
+  Player.prototype.toJSON = function toJSON() {
+    var options = (0, _mergeOptions2['default'])(this.options_);
+    var tracks = options.tracks;
+
+    options.tracks = [];
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      // deep merge tracks and null out player so no circular references
+      track = (0, _mergeOptions2['default'])(track);
+      track.player = undefined;
+      options.tracks[i] = track;
+    }
+
+    return options;
+  };
+
+  /**
+   * Creates a simple modal dialog (an instance of the `ModalDialog`
+   * component) that immediately overlays the player with arbitrary
+   * content and removes itself when closed.
+   *
+   * @param {String|Function|Element|Array|Null} content
+   *        Same as `ModalDialog#content`'s param of the same name.
+   *
+   *        The most straight-forward usage is to provide a string or DOM
+   *        element.
+   *
+   * @param {Object} [options]
+   *        Extra options which will be passed on to the `ModalDialog`.
+   *
+   * @return {ModalDialog}
+   */
+
+
+  Player.prototype.createModal = function createModal(content, options) {
+    var _this4 = this;
+
+    options = options || {};
+    options.content = content || '';
+
+    var modal = new _modalDialog2['default'](this, options);
+
+    this.addChild(modal);
+    modal.on('dispose', function () {
+      _this4.removeChild(modal);
+    });
+
+    return modal.open();
+  };
+
+  /**
+   * Gets tag settings
+   *
+   * @param {Element} tag The player tag
+   * @return {Array} An array of sources and track objects
+   * @static
+   * @method getTagSettings
+   */
+
+
+  Player.getTagSettings = function getTagSettings(tag) {
+    var baseOptions = {
+      sources: [],
+      tracks: []
+    };
+
+    var tagOptions = Dom.getElAttributes(tag);
+    var dataSetup = tagOptions['data-setup'];
+
+    // Check if data-setup attr exists.
+    if (dataSetup !== null) {
+      // Parse options JSON
+      // If empty string, make it a parsable json object.
+      var _safeParseTuple = (0, _tuple2['default'])(dataSetup || '{}');
+
+      var err = _safeParseTuple[0];
+      var data = _safeParseTuple[1];
+
+
+      if (err) {
+        _log2['default'].error(err);
+      }
+      (0, _object2['default'])(tagOptions, data);
+    }
+
+    (0, _object2['default'])(baseOptions, tagOptions);
+
+    // Get tag children settings
+    if (tag.hasChildNodes()) {
+      var children = tag.childNodes;
+
+      for (var i = 0, j = children.length; i < j; i++) {
+        var child = children[i];
+        // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/
+        var childName = child.nodeName.toLowerCase();
+
+        if (childName === 'source') {
+          baseOptions.sources.push(Dom.getElAttributes(child));
+        } else if (childName === 'track') {
+          baseOptions.tracks.push(Dom.getElAttributes(child));
+        }
+      }
+    }
+
+    return baseOptions;
+  };
+
+  return Player;
+}(_component2['default']);
+
+/*
+ * Global player list
+ *
+ * @type {Object}
+ */
+
+
+Player.players = {};
+
+var navigator = _window2['default'].navigator;
+
+/*
+ * Player instance options, surfaced using options
+ * options = Player.prototype.options_
+ * Make changes in options, not here.
+ *
+ * @type {Object}
+ * @private
+ */
+Player.prototype.options_ = {
+  // Default order of fallback technology
+  techOrder: ['html5', 'flash'],
+  // techOrder: ['flash','html5'],
+
+  html5: {},
+  flash: {},
+
+  // defaultVolume: 0.85,
+  defaultVolume: 0.00,
+
+  // default inactivity timeout
+  inactivityTimeout: 2000,
+
+  // default playback rates
+  playbackRates: [],
+  // Add playback rate selection by adding rates
+  // 'playbackRates': [0.5, 1, 1.5, 2],
+
+  // Included control sets
+  children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'controlBar', 'errorDisplay', 'textTrackSettings'],
+
+  language: navigator && (navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language) || 'en',
+
+  // locales and their language translations
+  languages: {},
+
+  // Default message to show when a video cannot be played.
+  notSupportedMessage: 'No compatible source was found for this media.'
+};
+
+// The following no-op expressions are here only for purposes of documentation.
+
+/**
+ * Fired when the user agent begins looking for media data
+ *
+ * @event loadstart
+ */
+Player.prototype.handleTechLoadStart_; // eslint-disable-line
+
+/**
+ * Fired when the player has initial duration and dimension information
+ *
+ * @event loadedmetadata
+ */
+Player.prototype.handleLoadedMetaData_; // eslint-disable-line
+
+/**
+ * Fired when the player receives text data
+ *
+ * @event textdata
+ */
+Player.prototype.handleTextData_; // eslint-disable-line
+
+/**
+ * Fired when the player has downloaded data at the current playback position
+ *
+ * @event loadeddata
+ */
+Player.prototype.handleLoadedData_; // eslint-disable-line
+
+/**
+ * Fired when the user is active, e.g. moves the mouse over the player
+ *
+ * @event useractive
+ */
+Player.prototype.handleUserActive_; // eslint-disable-line
+
+/**
+ * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction
+ *
+ * @event userinactive
+ */
+Player.prototype.handleUserInactive_; // eslint-disable-line
+
+/**
+ * Fired when the current playback position has changed *
+ * During playback this is fired every 15-250 milliseconds, depending on the
+ * playback technology in use.
+ *
+ * @event timeupdate
+ */
+Player.prototype.handleTimeUpdate_; // eslint-disable-line
+
+/**
+ * Fired when video playback ends
+ *
+ * @event ended
+ */
+Player.prototype.handleTechEnded_; // eslint-disable-line
+
+/**
+ * Fired when the volume changes
+ *
+ * @event volumechange
+ */
+Player.prototype.handleVolumeChange_; // eslint-disable-line
+
+/**
+ * Fired when an error occurs
+ *
+ * @event error
+ */
+Player.prototype.handleError_; // eslint-disable-line
+
+Player.prototype.flexNotSupported_ = function () {
+  var elem = _document2['default'].createElement('i');
+
+  // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more
+  // common flex features that we can rely on when checking for flex support.
+  return !('flexBasis' in elem.style || 'webkitFlexBasis' in elem.style || 'mozFlexBasis' in elem.style || 'msFlexBasis' in elem.style ||
+  // IE10-specific (2012 flex spec)
+  'msFlexOrder' in elem.style);
+};
+
+_component2['default'].registerComponent('Player', Player);
+exports['default'] = Player;
+
+},{"./big-play-button.js":1,"./close-button.js":4,"./component.js":5,"./control-bar/control-bar.js":8,"./error-display.js":41,"./fullscreen-api.js":44,"./loading-spinner.js":45,"./media-error.js":46,"./modal-dialog":50,"./poster-image.js":55,"./tech/flash.js":59,"./tech/html5.js":60,"./tech/loader.js":61,"./tech/tech.js":62,"./tracks/audio-track-list.js":63,"./tracks/text-track-display.js":68,"./tracks/text-track-list-converter.js":69,"./tracks/text-track-settings.js":71,"./tracks/video-track-list.js":76,"./utils/browser.js":78,"./utils/buffer.js":79,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/to-title-case.js":89,"global/document":92,"global/window":93,"object.assign":136,"safe-json-parse/tuple":145}],52:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _player = _dereq_('./player.js');
+
+var _player2 = _interopRequireDefault(_player);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * The method for registering a video.js plugin
+ *
+ * @param  {String} name The name of the plugin
+ * @param  {Function} init The function that is run when the player inits
+ * @method plugin
+ */
+var plugin = function plugin(name, init) {
+  _player2['default'].prototype[name] = init;
+}; /**
+    * @file plugins.js
+    */
+exports['default'] = plugin;
+
+},{"./player.js":51}],53:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('../clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file popup-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A button class with a popup control
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends ClickableComponent
+ * @class PopupButton
+ */
+var PopupButton = function (_ClickableComponent) {
+  _inherits(PopupButton, _ClickableComponent);
+
+  function PopupButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, PopupButton);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.update();
+    return _this;
+  }
+
+  /**
+   * Update popup
+   *
+   * @method update
+   */
+
+
+  PopupButton.prototype.update = function update() {
+    var popup = this.createPopup();
+
+    if (this.popup) {
+      this.removeChild(this.popup);
+    }
+
+    this.popup = popup;
+    this.addChild(popup);
+
+    if (this.items && this.items.length === 0) {
+      this.hide();
+    } else if (this.items && this.items.length > 1) {
+      this.show();
+    }
+  };
+
+  /**
+   * Create popup - Override with specific functionality for component
+   *
+   * @return {Popup} The constructed popup
+   * @method createPopup
+   */
+
+
+  PopupButton.prototype.createPopup = function createPopup() {};
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PopupButton.prototype.createEl = function createEl() {
+    return _ClickableComponent.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass()
+    });
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  PopupButton.prototype.buildCSSClass = function buildCSSClass() {
+    var menuButtonClass = 'vjs-menu-button';
+
+    // If the inline option is passed, we want to use different styles altogether.
+    if (this.options_.inline === true) {
+      menuButtonClass += '-inline';
+    } else {
+      menuButtonClass += '-popup';
+    }
+
+    return 'vjs-menu-button ' + menuButtonClass + ' ' + _ClickableComponent.prototype.buildCSSClass.call(this);
+  };
+
+  return PopupButton;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('PopupButton', PopupButton);
+exports['default'] = PopupButton;
+
+},{"../clickable-component.js":3,"../component.js":5}],54:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _events = _dereq_('../utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file popup.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Popup component is used to build pop up controls.
+ *
+ * @extends Component
+ * @class Popup
+ */
+var Popup = function (_Component) {
+  _inherits(Popup, _Component);
+
+  function Popup() {
+    _classCallCheck(this, Popup);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Add a popup item to the popup
+   *
+   * @param {Object|String} component Component or component type to add
+   * @method addItem
+   */
+  Popup.prototype.addItem = function addItem(component) {
+    this.addChild(component);
+    component.on('click', Fn.bind(this, function () {
+      this.unlockShowing();
+    }));
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Popup.prototype.createEl = function createEl() {
+    var contentElType = this.options_.contentElType || 'ul';
+
+    this.contentEl_ = Dom.createEl(contentElType, {
+      className: 'vjs-menu-content'
+    });
+
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      append: this.contentEl_,
+      className: 'vjs-menu'
+    });
+
+    el.appendChild(this.contentEl_);
+
+    // Prevent clicks from bubbling up. Needed for Popup Buttons,
+    // where a click on the parent is significant
+    Events.on(el, 'click', function (event) {
+      event.preventDefault();
+      event.stopImmediatePropagation();
+    });
+
+    return el;
+  };
+
+  return Popup;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Popup', Popup);
+exports['default'] = Popup;
+
+},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],55:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('./clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('./component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _browser = _dereq_('./utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file poster-image.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The component that handles showing the poster image.
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class PosterImage
+ */
+var PosterImage = function (_ClickableComponent) {
+  _inherits(PosterImage, _ClickableComponent);
+
+  function PosterImage(player, options) {
+    _classCallCheck(this, PosterImage);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.update();
+    player.on('posterchange', Fn.bind(_this, _this.update));
+    return _this;
+  }
+
+  /**
+   * Clean up the poster image
+   *
+   * @method dispose
+   */
+
+
+  PosterImage.prototype.dispose = function dispose() {
+    this.player().off('posterchange', this.update);
+    _ClickableComponent.prototype.dispose.call(this);
+  };
+
+  /**
+   * Create the poster's image element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PosterImage.prototype.createEl = function createEl() {
+    var el = Dom.createEl('div', {
+      className: 'vjs-poster',
+
+      // Don't want poster to be tabbable.
+      tabIndex: -1
+    });
+
+    // To ensure the poster image resizes while maintaining its original aspect
+    // ratio, use a div with `background-size` when available. For browsers that
+    // do not support `background-size` (e.g. IE8), fall back on using a regular
+    // img element.
+    if (!browser.BACKGROUND_SIZE_SUPPORTED) {
+      this.fallbackImg_ = Dom.createEl('img');
+      el.appendChild(this.fallbackImg_);
+    }
+
+    return el;
+  };
+
+  /**
+   * Event handler for updates to the player's poster source
+   *
+   * @method update
+   */
+
+
+  PosterImage.prototype.update = function update() {
+    var url = this.player().poster();
+
+    this.setSrc(url);
+
+    // If there's no poster source we should display:none on this component
+    // so it's not still clickable or right-clickable
+    if (url) {
+      this.show();
+    } else {
+      this.hide();
+    }
+  };
+
+  /**
+   * Set the poster source depending on the display method
+   *
+   * @param {String} url The URL to the poster source
+   * @method setSrc
+   */
+
+
+  PosterImage.prototype.setSrc = function setSrc(url) {
+    if (this.fallbackImg_) {
+      this.fallbackImg_.src = url;
+    } else {
+      var backgroundImage = '';
+
+      // Any falsey values should stay as an empty string, otherwise
+      // this will throw an extra error
+      if (url) {
+        backgroundImage = 'url("' + url + '")';
+      }
+
+      this.el_.style.backgroundImage = backgroundImage;
+    }
+  };
+
+  /**
+   * Event handler for clicks on the poster image
+   *
+   * @method handleClick
+   */
+
+
+  PosterImage.prototype.handleClick = function handleClick() {
+    // We don't want a click to trigger playback when controls are disabled
+    // but CSS should be hiding the poster to prevent that from happening
+    if (this.player_.paused()) {
+      this.player_.play();
+    } else {
+      this.player_.pause();
+    }
+  };
+
+  return PosterImage;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('PosterImage', PosterImage);
+exports['default'] = PosterImage;
+
+},{"./clickable-component.js":3,"./component.js":5,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/fn.js":82}],56:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.hasLoaded = exports.autoSetupTimeout = exports.autoSetup = undefined;
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+var _windowLoaded = false; /**
+                            * @file setup.js
+                            *
+                            * Functions for automatically setting up a player
+                            * based on the data-setup attribute of the video tag
+                            */
+
+var videojs = void 0;
+
+// Automatically set up any tags that have a data-setup attribute
+var autoSetup = function autoSetup() {
+  // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*
+  // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));
+  // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));
+  // var mediaEls = vids.concat(audios);
+
+  // Because IE8 doesn't support calling slice on a node list, we need to loop
+  // through each list of elements to build up a new, combined list of elements.
+  var vids = _document2['default'].getElementsByTagName('video');
+  var audios = _document2['default'].getElementsByTagName('audio');
+  var mediaEls = [];
+
+  if (vids && vids.length > 0) {
+    for (var i = 0, e = vids.length; i < e; i++) {
+      mediaEls.push(vids[i]);
+    }
+  }
+
+  if (audios && audios.length > 0) {
+    for (var _i = 0, _e = audios.length; _i < _e; _i++) {
+      mediaEls.push(audios[_i]);
+    }
+  }
+
+  // Check if any media elements exist
+  if (mediaEls && mediaEls.length > 0) {
+
+    for (var _i2 = 0, _e2 = mediaEls.length; _i2 < _e2; _i2++) {
+      var mediaEl = mediaEls[_i2];
+
+      // Check if element exists, has getAttribute func.
+      // IE seems to consider typeof el.getAttribute == 'object' instead of
+      // 'function' like expected, at least when loading the player immediately.
+      if (mediaEl && mediaEl.getAttribute) {
+
+        // Make sure this player hasn't already been set up.
+        if (mediaEl.player === undefined) {
+          var options = mediaEl.getAttribute('data-setup');
+
+          // Check if data-setup attr exists.
+          // We only auto-setup if they've added the data-setup attr.
+          if (options !== null) {
+            // Create new video.js instance.
+            videojs(mediaEl);
+          }
+        }
+
+        // If getAttribute isn't defined, we need to wait for the DOM.
+      } else {
+        autoSetupTimeout(1);
+        break;
+      }
+    }
+
+    // No videos were found, so keep looping unless page is finished loading.
+  } else if (!_windowLoaded) {
+    autoSetupTimeout(1);
+  }
+};
+
+// Pause to let the DOM keep processing
+function autoSetupTimeout(wait, vjs) {
+  if (vjs) {
+    videojs = vjs;
+  }
+
+  setTimeout(autoSetup, wait);
+}
+
+if (_document2['default'].readyState === 'complete') {
+  _windowLoaded = true;
+} else {
+  Events.one(_window2['default'], 'load', function () {
+    _windowLoaded = true;
+  });
+}
+
+var hasLoaded = function hasLoaded() {
+  return _windowLoaded;
+};
+
+exports.autoSetup = autoSetup;
+exports.autoSetupTimeout = autoSetupTimeout;
+exports.hasLoaded = hasLoaded;
+
+},{"./utils/events.js":81,"global/document":92,"global/window":93}],57:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file slider.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base functionality for sliders like the volume bar and seek bar
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class Slider
+ */
+var Slider = function (_Component) {
+  _inherits(Slider, _Component);
+
+  function Slider(player, options) {
+    _classCallCheck(this, Slider);
+
+    // Set property names to bar to match with the child Slider class is looking for
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.bar = _this.getChild(_this.options_.barName);
+
+    // Set a horizontal or vertical class on the slider depending on the slider type
+    _this.vertical(!!_this.options_.vertical);
+
+    _this.on('mousedown', _this.handleMouseDown);
+    _this.on('touchstart', _this.handleMouseDown);
+    _this.on('focus', _this.handleFocus);
+    _this.on('blur', _this.handleBlur);
+    _this.on('click', _this.handleClick);
+
+    _this.on(player, 'controlsvisible', _this.update);
+    _this.on(player, _this.playerEvent, _this.update);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String} type Type of element to create
+   * @param {Object=} props List of properties in Object form
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Slider.prototype.createEl = function createEl(type) {
+    var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+    // Add the slider element class to all sub classes
+    props.className = props.className + ' vjs-slider';
+    props = (0, _object2['default'])({
+      tabIndex: 0
+    }, props);
+
+    attributes = (0, _object2['default'])({
+      'role': 'slider',
+      'aria-valuenow': 0,
+      'aria-valuemin': 0,
+      'aria-valuemax': 100,
+      'tabIndex': 0
+    }, attributes);
+
+    return _Component.prototype.createEl.call(this, type, props, attributes);
+  };
+
+  /**
+   * Handle mouse down on slider
+   *
+   * @param {Object} event Mouse down event object
+   * @method handleMouseDown
+   */
+
+
+  Slider.prototype.handleMouseDown = function handleMouseDown(event) {
+    var doc = this.bar.el_.ownerDocument;
+
+    event.preventDefault();
+    Dom.blockTextSelection();
+
+    this.addClass('vjs-sliding');
+    this.trigger('slideractive');
+
+    this.on(doc, 'mousemove', this.handleMouseMove);
+    this.on(doc, 'mouseup', this.handleMouseUp);
+    this.on(doc, 'touchmove', this.handleMouseMove);
+    this.on(doc, 'touchend', this.handleMouseUp);
+
+    this.handleMouseMove(event);
+  };
+
+  /**
+   * To be overridden by a subclass
+   *
+   * @method handleMouseMove
+   */
+
+
+  Slider.prototype.handleMouseMove = function handleMouseMove() {};
+
+  /**
+   * Handle mouse up on Slider
+   *
+   * @method handleMouseUp
+   */
+
+
+  Slider.prototype.handleMouseUp = function handleMouseUp() {
+    var doc = this.bar.el_.ownerDocument;
+
+    Dom.unblockTextSelection();
+
+    this.removeClass('vjs-sliding');
+    this.trigger('sliderinactive');
+
+    this.off(doc, 'mousemove', this.handleMouseMove);
+    this.off(doc, 'mouseup', this.handleMouseUp);
+    this.off(doc, 'touchmove', this.handleMouseMove);
+    this.off(doc, 'touchend', this.handleMouseUp);
+
+    this.update();
+  };
+
+  /**
+   * Update slider
+   *
+   * @method update
+   */
+
+
+  Slider.prototype.update = function update() {
+    // In VolumeBar init we have a setTimeout for update that pops and update to the end of the
+    // execution stack. The player is destroyed before then update will cause an error
+    if (!this.el_) {
+      return;
+    }
+
+    // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.
+    // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.
+    // var progress =  (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();
+    var progress = this.getPercent();
+    var bar = this.bar;
+
+    // If there's no bar...
+    if (!bar) {
+      return;
+    }
+
+    // Protect against no duration and other division issues
+    if (typeof progress !== 'number' || progress !== progress || progress < 0 || progress === Infinity) {
+      progress = 0;
+    }
+
+    // Convert to a percentage for setting
+    var percentage = (progress * 100).toFixed(2) + '%';
+
+    // Set the new bar width or height
+    if (this.vertical()) {
+      bar.el().style.height = percentage;
+    } else {
+      bar.el().style.width = percentage;
+    }
+  };
+
+  /**
+   * Calculate distance for slider
+   *
+   * @param {Object} event Event object
+   * @method calculateDistance
+   */
+
+
+  Slider.prototype.calculateDistance = function calculateDistance(event) {
+    var position = Dom.getPointerPosition(this.el_, event);
+
+    if (this.vertical()) {
+      return position.y;
+    }
+    return position.x;
+  };
+
+  /**
+   * Handle on focus for slider
+   *
+   * @method handleFocus
+   */
+
+
+  Slider.prototype.handleFocus = function handleFocus() {
+    this.on(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);
+  };
+
+  /**
+   * Handle key press for slider
+   *
+   * @param {Object} event Event object
+   * @method handleKeyPress
+   */
+
+
+  Slider.prototype.handleKeyPress = function handleKeyPress(event) {
+    // Left and Down Arrows
+    if (event.which === 37 || event.which === 40) {
+      event.preventDefault();
+      this.stepBack();
+
+      // Up and Right Arrows
+    } else if (event.which === 38 || event.which === 39) {
+      event.preventDefault();
+      this.stepForward();
+    }
+  };
+
+  /**
+   * Handle on blur for slider
+   *
+   * @method handleBlur
+   */
+
+
+  Slider.prototype.handleBlur = function handleBlur() {
+    this.off(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);
+  };
+
+  /**
+   * Listener for click events on slider, used to prevent clicks
+   *   from bubbling up to parent elements like button menus.
+   *
+   * @param {Object} event Event object
+   * @method handleClick
+   */
+
+
+  Slider.prototype.handleClick = function handleClick(event) {
+    event.stopImmediatePropagation();
+    event.preventDefault();
+  };
+
+  /**
+   * Get/set if slider is horizontal for vertical
+   *
+   * @param {Boolean} bool True if slider is vertical, false is horizontal
+   * @return {Boolean} True if slider is vertical, false is horizontal
+   * @method vertical
+   */
+
+
+  Slider.prototype.vertical = function vertical(bool) {
+    if (bool === undefined) {
+      return this.vertical_ || false;
+    }
+
+    this.vertical_ = !!bool;
+
+    if (this.vertical_) {
+      this.addClass('vjs-slider-vertical');
+    } else {
+      this.addClass('vjs-slider-horizontal');
+    }
+
+    return this;
+  };
+
+  return Slider;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Slider', Slider);
+exports['default'] = Slider;
+
+},{"../component.js":5,"../utils/dom.js":80,"object.assign":136}],58:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * @file flash-rtmp.js
+ */
+function FlashRtmpDecorator(Flash) {
+  Flash.streamingFormats = {
+    'rtmp/mp4': 'MP4',
+    'rtmp/flv': 'FLV'
+  };
+
+  Flash.streamFromParts = function (connection, stream) {
+    return connection + '&' + stream;
+  };
+
+  Flash.streamToParts = function (src) {
+    var parts = {
+      connection: '',
+      stream: ''
+    };
+
+    if (!src) {
+      return parts;
+    }
+
+    // Look for the normal URL separator we expect, '&'.
+    // If found, we split the URL into two pieces around the
+    // first '&'.
+    var connEnd = src.search(/&(?!\w+=)/);
+    var streamBegin = void 0;
+
+    if (connEnd !== -1) {
+      streamBegin = connEnd + 1;
+    } else {
+      // If there's not a '&', we use the last '/' as the delimiter.
+      connEnd = streamBegin = src.lastIndexOf('/') + 1;
+      if (connEnd === 0) {
+        // really, there's not a '/'?
+        connEnd = streamBegin = src.length;
+      }
+    }
+
+    parts.connection = src.substring(0, connEnd);
+    parts.stream = src.substring(streamBegin, src.length);
+
+    return parts;
+  };
+
+  Flash.isStreamingType = function (srcType) {
+    return srcType in Flash.streamingFormats;
+  };
+
+  // RTMP has four variations, any string starting
+  // with one of these protocols should be valid
+  Flash.RTMP_RE = /^rtmp[set]?:\/\//i;
+
+  Flash.isStreamingSrc = function (src) {
+    return Flash.RTMP_RE.test(src);
+  };
+
+  /**
+   * A source handler for RTMP urls
+   * @type {Object}
+   */
+  Flash.rtmpSourceHandler = {};
+
+  /**
+   * Check if Flash can play the given videotype
+   * @param  {String} type    The mimetype to check
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  Flash.rtmpSourceHandler.canPlayType = function (type) {
+    if (Flash.isStreamingType(type)) {
+      return 'maybe';
+    }
+
+    return '';
+  };
+
+  /**
+   * Check if Flash can handle the source natively
+   * @param  {Object} source  The source object
+   * @param  {Object} options The options passed to the tech
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  Flash.rtmpSourceHandler.canHandleSource = function (source, options) {
+    var can = Flash.rtmpSourceHandler.canPlayType(source.type);
+
+    if (can) {
+      return can;
+    }
+
+    if (Flash.isStreamingSrc(source.src)) {
+      return 'maybe';
+    }
+
+    return '';
+  };
+
+  /**
+   * Pass the source to the flash object
+   * Adaptive source handlers will have more complicated workflows before passing
+   * video data to the video element
+   * @param  {Object} source   The source object
+   * @param  {Flash}  tech     The instance of the Flash tech
+   * @param  {Object} options  The options to pass to the source
+   */
+  Flash.rtmpSourceHandler.handleSource = function (source, tech, options) {
+    var srcParts = Flash.streamToParts(source.src);
+
+    tech.setRtmpConnection(srcParts.connection);
+    tech.setRtmpStream(srcParts.stream);
+  };
+
+  // Register the native source handler
+  Flash.registerSourceHandler(Flash.rtmpSourceHandler);
+
+  return Flash;
+}
+
+exports['default'] = FlashRtmpDecorator;
+
+},{}],59:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _tech = _dereq_('./tech');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _url = _dereq_('../utils/url.js');
+
+var Url = _interopRequireWildcard(_url);
+
+var _timeRanges = _dereq_('../utils/time-ranges.js');
+
+var _flashRtmp = _dereq_('./flash-rtmp');
+
+var _flashRtmp2 = _interopRequireDefault(_flashRtmp);
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file flash.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * VideoJS-SWF - Custom Flash Player with HTML5-ish API
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * https://github.com/zencoder/video-js-swf
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Not using setupTriggers. Using global onEvent func to distribute events
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var navigator = _window2['default'].navigator;
+
+/**
+ * Flash Media Controller - Wrapper for fallback SWF API
+ *
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready Ready callback function
+ * @extends Tech
+ * @class Flash
+ */
+
+var Flash = function (_Tech) {
+  _inherits(Flash, _Tech);
+
+  function Flash(options, ready) {
+    _classCallCheck(this, Flash);
+
+    // Set the source when ready
+    var _this = _possibleConstructorReturn(this, _Tech.call(this, options, ready));
+
+    if (options.source) {
+      _this.ready(function () {
+        this.setSource(options.source);
+      }, true);
+    }
+
+    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers
+    // This allows resetting the playhead when we catch the reload
+    if (options.startTime) {
+      _this.ready(function () {
+        this.load();
+        this.play();
+        this.currentTime(options.startTime);
+      }, true);
+    }
+
+    // Add global window functions that the swf expects
+    // A 4.x workflow we weren't able to solve for in 5.0
+    // because of the need to hard code these functions
+    // into the swf for security reasons
+    _window2['default'].videojs = _window2['default'].videojs || {};
+    _window2['default'].videojs.Flash = _window2['default'].videojs.Flash || {};
+    _window2['default'].videojs.Flash.onReady = Flash.onReady;
+    _window2['default'].videojs.Flash.onEvent = Flash.onEvent;
+    _window2['default'].videojs.Flash.onError = Flash.onError;
+
+    _this.on('seeked', function () {
+      this.lastSeekTarget_ = undefined;
+    });
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Flash.prototype.createEl = function createEl() {
+    var options = this.options_;
+
+    // If video.js is hosted locally you should also set the location
+    // for the hosted swf, which should be relative to the page (not video.js)
+    // Otherwise this adds a CDN url.
+    // The CDN also auto-adds a swf URL for that specific version.
+    if (!options.swf) {
+      var ver = '5.1.0';
+
+      options.swf = '//vjs.zencdn.net/swf/' + ver + '/video-js.swf';
+    }
+
+    // Generate ID for swf object
+    var objId = options.techId;
+
+    // Merge default flashvars with ones passed in to init
+    var flashVars = (0, _object2['default'])({
+
+      // SWF Callback Functions
+      readyFunction: 'videojs.Flash.onReady',
+      eventProxyFunction: 'videojs.Flash.onEvent',
+      errorEventProxyFunction: 'videojs.Flash.onError',
+
+      // Player Settings
+      autoplay: options.autoplay,
+      preload: options.preload,
+      loop: options.loop,
+      muted: options.muted
+
+    }, options.flashVars);
+
+    // Merge default parames with ones passed in
+    var params = (0, _object2['default'])({
+      // Opaque is needed to overlay controls, but can affect playback performance
+      wmode: 'opaque',
+      // Using bgcolor prevents a white flash when the object is loading
+      bgcolor: '#000000'
+    }, options.params);
+
+    // Merge default attributes with ones passed in
+    var attributes = (0, _object2['default'])({
+      // Both ID and Name needed or swf to identify itself
+      id: objId,
+      name: objId,
+      'class': 'vjs-tech'
+    }, options.attributes);
+
+    this.el_ = Flash.embed(options.swf, flashVars, params, attributes);
+    this.el_.tech = this;
+
+    return this.el_;
+  };
+
+  /**
+   * Play for flash tech
+   *
+   * @method play
+   */
+
+
+  Flash.prototype.play = function play() {
+    if (this.ended()) {
+      this.setCurrentTime(0);
+    }
+    this.el_.vjs_play();
+  };
+
+  /**
+   * Pause for flash tech
+   *
+   * @method pause
+   */
+
+
+  Flash.prototype.pause = function pause() {
+    this.el_.vjs_pause();
+  };
+
+  /**
+   * Get/set video
+   *
+   * @param {Object=} src Source object
+   * @return {Object}
+   * @method src
+   */
+
+
+  Flash.prototype.src = function src(_src) {
+    if (_src === undefined) {
+      return this.currentSrc();
+    }
+
+    // Setting src through `src` not `setSrc` will be deprecated
+    return this.setSrc(_src);
+  };
+
+  /**
+   * Set video
+   *
+   * @param {Object=} src Source object
+   * @deprecated
+   * @method setSrc
+   */
+
+
+  Flash.prototype.setSrc = function setSrc(src) {
+    var _this2 = this;
+
+    // Make sure source URL is absolute.
+    src = Url.getAbsoluteURL(src);
+    this.el_.vjs_src(src);
+
+    // Currently the SWF doesn't autoplay if you load a source later.
+    // e.g. Load player w/ no source, wait 2s, set src.
+    if (this.autoplay()) {
+      this.setTimeout(function () {
+        return _this2.play();
+      }, 0);
+    }
+  };
+
+  /**
+   * Returns true if the tech is currently seeking.
+   * @return {boolean} true if seeking
+   */
+
+
+  Flash.prototype.seeking = function seeking() {
+    return this.lastSeekTarget_ !== undefined;
+  };
+
+  /**
+   * Set current time
+   *
+   * @param {Number} time Current time of video
+   * @method setCurrentTime
+   */
+
+
+  Flash.prototype.setCurrentTime = function setCurrentTime(time) {
+    var seekable = this.seekable();
+
+    if (seekable.length) {
+      // clamp to the current seekable range
+      time = time > seekable.start(0) ? time : seekable.start(0);
+      time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);
+
+      this.lastSeekTarget_ = time;
+      this.trigger('seeking');
+      this.el_.vjs_setProperty('currentTime', time);
+      _Tech.prototype.setCurrentTime.call(this);
+    }
+  };
+
+  /**
+   * Get current time
+   *
+   * @param {Number=} time Current time of video
+   * @return {Number} Current time
+   * @method currentTime
+   */
+
+
+  Flash.prototype.currentTime = function currentTime(time) {
+    // when seeking make the reported time keep up with the requested time
+    // by reading the time we're seeking to
+    if (this.seeking()) {
+      return this.lastSeekTarget_ || 0;
+    }
+    return this.el_.vjs_getProperty('currentTime');
+  };
+
+  /**
+   * Get current source
+   *
+   * @method currentSrc
+   */
+
+
+  Flash.prototype.currentSrc = function currentSrc() {
+    if (this.currentSource_) {
+      return this.currentSource_.src;
+    }
+    return this.el_.vjs_getProperty('currentSrc');
+  };
+
+  /**
+   * Get media duration
+   *
+   * @returns {Number} Media duration
+   */
+
+
+  Flash.prototype.duration = function duration() {
+    if (this.readyState() === 0) {
+      return NaN;
+    }
+    var duration = this.el_.vjs_getProperty('duration');
+
+    return duration >= 0 ? duration : Infinity;
+  };
+
+  /**
+   * Load media into player
+   *
+   * @method load
+   */
+
+
+  Flash.prototype.load = function load() {
+    this.el_.vjs_load();
+  };
+
+  /**
+   * Get poster
+   *
+   * @method poster
+   */
+
+
+  Flash.prototype.poster = function poster() {
+    this.el_.vjs_getProperty('poster');
+  };
+
+  /**
+   * Poster images are not handled by the Flash tech so make this a no-op
+   *
+   * @method setPoster
+   */
+
+
+  Flash.prototype.setPoster = function setPoster() {};
+
+  /**
+   * Determine if can seek in media
+   *
+   * @return {TimeRangeObject}
+   * @method seekable
+   */
+
+
+  Flash.prototype.seekable = function seekable() {
+    var duration = this.duration();
+
+    if (duration === 0) {
+      return (0, _timeRanges.createTimeRange)();
+    }
+    return (0, _timeRanges.createTimeRange)(0, duration);
+  };
+
+  /**
+   * Get buffered time range
+   *
+   * @return {TimeRangeObject}
+   * @method buffered
+   */
+
+
+  Flash.prototype.buffered = function buffered() {
+    var ranges = this.el_.vjs_getProperty('buffered');
+
+    if (ranges.length === 0) {
+      return (0, _timeRanges.createTimeRange)();
+    }
+    return (0, _timeRanges.createTimeRange)(ranges[0][0], ranges[0][1]);
+  };
+
+  /**
+   * Get fullscreen support -
+   * Flash does not allow fullscreen through javascript
+   * so always returns false
+   *
+   * @return {Boolean} false
+   * @method supportsFullScreen
+   */
+
+
+  Flash.prototype.supportsFullScreen = function supportsFullScreen() {
+    // Flash does not allow fullscreen through javascript
+    return false;
+  };
+
+  /**
+   * Request to enter fullscreen
+   * Flash does not allow fullscreen through javascript
+   * so always returns false
+   *
+   * @return {Boolean} false
+   * @method enterFullScreen
+   */
+
+
+  Flash.prototype.enterFullScreen = function enterFullScreen() {
+    return false;
+  };
+
+  return Flash;
+}(_tech2['default']);
+
+// Create setters and getters for attributes
+
+
+var _api = Flash.prototype;
+var _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');
+var _readOnly = 'networkState,readyState,initialTime,startOffsetTime,paused,ended,videoWidth,videoHeight'.split(',');
+
+function _createSetter(attr) {
+  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);
+
+  _api['set' + attrUpper] = function (val) {
+    return this.el_.vjs_setProperty(attr, val);
+  };
+}
+
+function _createGetter(attr) {
+  _api[attr] = function () {
+    return this.el_.vjs_getProperty(attr);
+  };
+}
+
+// Create getter and setters for all read/write attributes
+for (var i = 0; i < _readWrite.length; i++) {
+  _createGetter(_readWrite[i]);
+  _createSetter(_readWrite[i]);
+}
+
+// Create getters for read-only attributes
+for (var _i = 0; _i < _readOnly.length; _i++) {
+  _createGetter(_readOnly[_i]);
+}
+
+/* Flash Support Testing -------------------------------------------------------- */
+
+Flash.isSupported = function () {
+  return Flash.version()[0] >= 10;
+  // return swfobject.hasFlashPlayerVersion('10');
+};
+
+// Add Source Handler pattern functions to this tech
+_tech2['default'].withSourceHandlers(Flash);
+
+/*
+ * The default native source handler.
+ * This simply passes the source to the video element. Nothing fancy.
+ *
+ * @param  {Object} source   The source object
+ * @param  {Flash} tech  The instance of the Flash tech
+ */
+Flash.nativeSourceHandler = {};
+
+/**
+ * Check if Flash can play the given videotype
+ * @param  {String} type    The mimetype to check
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Flash.nativeSourceHandler.canPlayType = function (type) {
+  if (type in Flash.formats) {
+    return 'maybe';
+  }
+
+  return '';
+};
+
+/*
+ * Check Flash can handle the source natively
+ *
+ * @param  {Object} source  The source object
+ * @param  {Object} options The options passed to the tech
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Flash.nativeSourceHandler.canHandleSource = function (source, options) {
+  var type = void 0;
+
+  function guessMimeType(src) {
+    var ext = Url.getFileExtension(src);
+
+    if (ext) {
+      return 'video/' + ext;
+    }
+    return '';
+  }
+
+  if (!source.type) {
+    type = guessMimeType(source.src);
+  } else {
+    // Strip code information from the type because we don't get that specific
+    type = source.type.replace(/;.*/, '').toLowerCase();
+  }
+
+  return Flash.nativeSourceHandler.canPlayType(type);
+};
+
+/*
+ * Pass the source to the flash object
+ * Adaptive source handlers will have more complicated workflows before passing
+ * video data to the video element
+ *
+ * @param  {Object} source   The source object
+ * @param  {Flash}  tech     The instance of the Flash tech
+ * @param  {Object} options  The options to pass to the source
+ */
+Flash.nativeSourceHandler.handleSource = function (source, tech, options) {
+  tech.setSrc(source.src);
+};
+
+/*
+ * Clean up the source handler when disposing the player or switching sources..
+ * (no cleanup is needed when supporting the format natively)
+ */
+Flash.nativeSourceHandler.dispose = function () {};
+
+// Register the native source handler
+Flash.registerSourceHandler(Flash.nativeSourceHandler);
+
+Flash.formats = {
+  'video/flv': 'FLV',
+  'video/x-flv': 'FLV',
+  'video/mp4': 'MP4',
+  'video/m4v': 'MP4'
+};
+
+Flash.onReady = function (currSwf) {
+  var el = Dom.getEl(currSwf);
+  var tech = el && el.tech;
+
+  // if there is no el then the tech has been disposed
+  // and the tech element was removed from the player div
+  if (tech && tech.el()) {
+    // check that the flash object is really ready
+    Flash.checkReady(tech);
+  }
+};
+
+// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.
+// If it's not ready, we set a timeout to check again shortly.
+Flash.checkReady = function (tech) {
+  // stop worrying if the tech has been disposed
+  if (!tech.el()) {
+    return;
+  }
+
+  // check if API property exists
+  if (tech.el().vjs_getProperty) {
+    // tell tech it's ready
+    tech.triggerReady();
+  } else {
+    // wait longer
+    this.setTimeout(function () {
+      Flash.checkReady(tech);
+    }, 50);
+  }
+};
+
+// Trigger events from the swf on the player
+Flash.onEvent = function (swfID, eventName) {
+  var tech = Dom.getEl(swfID).tech;
+
+  tech.trigger(eventName, Array.prototype.slice.call(arguments, 2));
+};
+
+// Log errors from the swf
+Flash.onError = function (swfID, err) {
+  var tech = Dom.getEl(swfID).tech;
+
+  // trigger MEDIA_ERR_SRC_NOT_SUPPORTED
+  if (err === 'srcnotfound') {
+    return tech.error(4);
+  }
+
+  // trigger a custom error
+  tech.error('FLASH: ' + err);
+};
+
+// Flash Version Check
+Flash.version = function () {
+  var version = '0,0,0';
+
+  // IE
+  try {
+    version = new _window2['default'].ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
+
+    // other browsers
+  } catch (e) {
+    try {
+      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
+        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
+      }
+    } catch (err) {
+      // satisfy linter
+    }
+  }
+  return version.split(',');
+};
+
+// Flash embedding method. Only used in non-iframe mode
+Flash.embed = function (swf, flashVars, params, attributes) {
+  var code = Flash.getEmbedCode(swf, flashVars, params, attributes);
+
+  // Get element by embedding code and retrieving created element
+  var obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];
+
+  return obj;
+};
+
+Flash.getEmbedCode = function (swf, flashVars, params, attributes) {
+  var objTag = '<object type="application/x-shockwave-flash" ';
+  var flashVarsString = '';
+  var paramsString = '';
+  var attrsString = '';
+
+  // Convert flash vars to string
+  if (flashVars) {
+    Object.getOwnPropertyNames(flashVars).forEach(function (key) {
+      flashVarsString += key + '=' + flashVars[key] + '&amp;';
+    });
+  }
+
+  // Add swf, flashVars, and other default params
+  params = (0, _object2['default'])({
+    movie: swf,
+    flashvars: flashVarsString,
+    // Required to talk to swf
+    allowScriptAccess: 'always',
+    // All should be default, but having security issues.
+    allowNetworking: 'all'
+  }, params);
+
+  // Create param tags string
+  Object.getOwnPropertyNames(params).forEach(function (key) {
+    paramsString += '<param name="' + key + '" value="' + params[key] + '" />';
+  });
+
+  attributes = (0, _object2['default'])({
+    // Add swf to attributes (need both for IE and Others to work)
+    data: swf,
+
+    // Default to 100% width/height
+    width: '100%',
+    height: '100%'
+
+  }, attributes);
+
+  // Create Attributes string
+  Object.getOwnPropertyNames(attributes).forEach(function (key) {
+    attrsString += key + '="' + attributes[key] + '" ';
+  });
+
+  return '' + objTag + attrsString + '>' + paramsString + '</object>';
+};
+
+// Run Flash through the RTMP decorator
+(0, _flashRtmp2['default'])(Flash);
+
+_component2['default'].registerComponent('Flash', Flash);
+_tech2['default'].registerTech('Flash', Flash);
+exports['default'] = Flash;
+
+},{"../component":5,"../utils/dom.js":80,"../utils/time-ranges.js":88,"../utils/url.js":90,"./flash-rtmp":58,"./tech":62,"global/window":93,"object.assign":136}],60:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _templateObject = _taggedTemplateLiteralLoose(['Text Tracks are being loaded from another origin but the crossorigin attribute isn\'t used.\n            This may prevent text tracks from loading.'], ['Text Tracks are being loaded from another origin but the crossorigin attribute isn\'t used.\n            This may prevent text tracks from loading.']);
+
+var _tech = _dereq_('./tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _url = _dereq_('../utils/url.js');
+
+var Url = _interopRequireWildcard(_url);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _tsml = _dereq_('tsml');
+
+var _tsml2 = _interopRequireDefault(_tsml);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+var _mergeOptions = _dereq_('../utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _toTitleCase = _dereq_('../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file html5.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * HTML5 Media Controller - Wrapper for HTML5 Media API
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+/**
+ * HTML5 Media Controller - Wrapper for HTML5 Media API
+ *
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready Ready callback function
+ * @extends Tech
+ * @class Html5
+ */
+var Html5 = function (_Tech) {
+  _inherits(Html5, _Tech);
+
+  function Html5(options, ready) {
+    _classCallCheck(this, Html5);
+
+    var _this = _possibleConstructorReturn(this, _Tech.call(this, options, ready));
+
+    var source = options.source;
+    var crossoriginTracks = false;
+
+    // Set the source if one is provided
+    // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)
+    // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source
+    // anyway so the error gets fired.
+    if (source && (_this.el_.currentSrc !== source.src || options.tag && options.tag.initNetworkState_ === 3)) {
+      _this.setSource(source);
+    } else {
+      _this.handleLateInit_(_this.el_);
+    }
+
+    if (_this.el_.hasChildNodes()) {
+
+      var nodes = _this.el_.childNodes;
+      var nodesLength = nodes.length;
+      var removeNodes = [];
+
+      while (nodesLength--) {
+        var node = nodes[nodesLength];
+        var nodeName = node.nodeName.toLowerCase();
+
+        if (nodeName === 'track') {
+          if (!_this.featuresNativeTextTracks) {
+            // Empty video tag tracks so the built-in player doesn't use them also.
+            // This may not be fast enough to stop HTML5 browsers from reading the tags
+            // so we'll need to turn off any default tracks if we're manually doing
+            // captions and subtitles. videoElement.textTracks
+            removeNodes.push(node);
+          } else {
+            // store HTMLTrackElement and TextTrack to remote list
+            _this.remoteTextTrackEls().addTrackElement_(node);
+            _this.remoteTextTracks().addTrack_(node.track);
+            if (!crossoriginTracks && !_this.el_.hasAttribute('crossorigin') && Url.isCrossOrigin(node.src)) {
+              crossoriginTracks = true;
+            }
+          }
+        }
+      }
+
+      for (var i = 0; i < removeNodes.length; i++) {
+        _this.el_.removeChild(removeNodes[i]);
+      }
+    }
+
+    var trackTypes = ['audio', 'video'];
+
+    // ProxyNativeTextTracks
+    trackTypes.forEach(function (type) {
+      var capitalType = (0, _toTitleCase2['default'])(type);
+
+      if (!_this['featuresNative' + capitalType + 'Tracks']) {
+        return;
+      }
+      var tl = _this.el()[type + 'Tracks'];
+
+      if (tl && tl.addEventListener) {
+        tl.addEventListener('change', Fn.bind(_this, _this['handle' + capitalType + 'TrackChange_']));
+        tl.addEventListener('addtrack', Fn.bind(_this, _this['handle' + capitalType + 'TrackAdd_']));
+        tl.addEventListener('removetrack', Fn.bind(_this, _this['handle' + capitalType + 'TrackRemove_']));
+
+        // Remove (native) trackts that are not used anymore
+        _this.on('loadstart', _this['removeOld' + capitalType + 'Tracks_']);
+      }
+    });
+
+    if (_this.featuresNativeTextTracks) {
+      if (crossoriginTracks) {
+        _log2['default'].warn((0, _tsml2['default'])(_templateObject));
+      }
+
+      _this.handleTextTrackChange_ = Fn.bind(_this, _this.handleTextTrackChange);
+      _this.handleTextTrackAdd_ = Fn.bind(_this, _this.handleTextTrackAdd);
+      _this.handleTextTrackRemove_ = Fn.bind(_this, _this.handleTextTrackRemove);
+      _this.proxyNativeTextTracks_();
+    }
+
+    // Determine if native controls should be used
+    // Our goal should be to get the custom controls on mobile solid everywhere
+    // so we can remove this all together. Right now this will block custom
+    // controls on touch enabled laptops like the Chrome Pixel
+    if ((browser.TOUCH_ENABLED || browser.IS_IPHONE || browser.IS_NATIVE_ANDROID) && options.nativeControlsForTouch === true) {
+      _this.setControls(true);
+    }
+
+    _this.triggerReady();
+    return _this;
+  }
+
+  /**
+   * Dispose of html5 media element
+   *
+   * @method dispose
+   */
+
+
+  Html5.prototype.dispose = function dispose() {
+    var _this2 = this;
+
+    // Un-ProxyNativeTracks
+    ['audio', 'video', 'text'].forEach(function (type) {
+      var capitalType = (0, _toTitleCase2['default'])(type);
+      var tl = _this2.el_[type + 'Tracks'];
+
+      if (tl && tl.removeEventListener) {
+        tl.removeEventListener('change', _this2['handle' + capitalType + 'TrackChange_']);
+        tl.removeEventListener('addtrack', _this2['handle' + capitalType + 'TrackAdd_']);
+        tl.removeEventListener('removetrack', _this2['handle' + capitalType + 'TrackRemove_']);
+      }
+
+      // Stop removing old text tracks
+      if (tl) {
+        _this2.off('loadstart', _this2['removeOld' + capitalType + 'Tracks_']);
+      }
+    });
+
+    Html5.disposeMediaElement(this.el_);
+    // tech will handle clearing of the emulated track list
+    _Tech.prototype.dispose.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Html5.prototype.createEl = function createEl() {
+    var el = this.options_.tag;
+
+    // Check if this browser supports moving the element into the box.
+    // On the iPhone video will break if you move the element,
+    // So we have to create a brand new element.
+    if (!el || this.movingMediaElementInDOM === false) {
+
+      // If the original tag is still there, clone and remove it.
+      if (el) {
+        var clone = el.cloneNode(true);
+
+        el.parentNode.insertBefore(clone, el);
+        Html5.disposeMediaElement(el);
+        el = clone;
+      } else {
+        el = _document2['default'].createElement('video');
+
+        // determine if native controls should be used
+        var tagAttributes = this.options_.tag && Dom.getElAttributes(this.options_.tag);
+        var attributes = (0, _mergeOptions2['default'])({}, tagAttributes);
+
+        if (!browser.TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) {
+          delete attributes.controls;
+        }
+
+        Dom.setElAttributes(el, (0, _object2['default'])(attributes, {
+          id: this.options_.techId,
+          'class': 'vjs-tech'
+        }));
+      }
+    }
+
+    // Update specific tag settings, in case they were overridden
+    var settingsAttrs = ['autoplay', 'preload', 'loop', 'muted'];
+
+    for (var i = settingsAttrs.length - 1; i >= 0; i--) {
+      var attr = settingsAttrs[i];
+      var overwriteAttrs = {};
+
+      if (typeof this.options_[attr] !== 'undefined') {
+        overwriteAttrs[attr] = this.options_[attr];
+      }
+      Dom.setElAttributes(el, overwriteAttrs);
+    }
+
+    return el;
+    // jenniisawesome = true;
+  };
+
+  // If we're loading the playback object after it has started loading
+  // or playing the video (often with autoplay on) then the loadstart event
+  // has already fired and we need to fire it manually because many things
+  // rely on it.
+
+
+  Html5.prototype.handleLateInit_ = function handleLateInit_(el) {
+    var _this3 = this;
+
+    if (el.networkState === 0 || el.networkState === 3) {
+      // The video element hasn't started loading the source yet
+      // or didn't find a source
+      return;
+    }
+
+    if (el.readyState === 0) {
+      var _ret = function () {
+        // NetworkState is set synchronously BUT loadstart is fired at the
+        // end of the current stack, usually before setInterval(fn, 0).
+        // So at this point we know loadstart may have already fired or is
+        // about to fire, and either way the player hasn't seen it yet.
+        // We don't want to fire loadstart prematurely here and cause a
+        // double loadstart so we'll wait and see if it happens between now
+        // and the next loop, and fire it if not.
+        // HOWEVER, we also want to make sure it fires before loadedmetadata
+        // which could also happen between now and the next loop, so we'll
+        // watch for that also.
+        var loadstartFired = false;
+        var setLoadstartFired = function setLoadstartFired() {
+          loadstartFired = true;
+        };
+
+        _this3.on('loadstart', setLoadstartFired);
+
+        var triggerLoadstart = function triggerLoadstart() {
+          // We did miss the original loadstart. Make sure the player
+          // sees loadstart before loadedmetadata
+          if (!loadstartFired) {
+            this.trigger('loadstart');
+          }
+        };
+
+        _this3.on('loadedmetadata', triggerLoadstart);
+
+        _this3.ready(function () {
+          this.off('loadstart', setLoadstartFired);
+          this.off('loadedmetadata', triggerLoadstart);
+
+          if (!loadstartFired) {
+            // We did miss the original native loadstart. Fire it now.
+            this.trigger('loadstart');
+          }
+        });
+
+        return {
+          v: void 0
+        };
+      }();
+
+      if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
+    }
+
+    // From here on we know that loadstart already fired and we missed it.
+    // The other readyState events aren't as much of a problem if we double
+    // them, so not going to go to as much trouble as loadstart to prevent
+    // that unless we find reason to.
+    var eventsToTrigger = ['loadstart'];
+
+    // loadedmetadata: newly equal to HAVE_METADATA (1) or greater
+    eventsToTrigger.push('loadedmetadata');
+
+    // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater
+    if (el.readyState >= 2) {
+      eventsToTrigger.push('loadeddata');
+    }
+
+    // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater
+    if (el.readyState >= 3) {
+      eventsToTrigger.push('canplay');
+    }
+
+    // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)
+    if (el.readyState >= 4) {
+      eventsToTrigger.push('canplaythrough');
+    }
+
+    // We still need to give the player time to add event listeners
+    this.ready(function () {
+      eventsToTrigger.forEach(function (type) {
+        this.trigger(type);
+      }, this);
+    });
+  };
+
+  Html5.prototype.proxyNativeTextTracks_ = function proxyNativeTextTracks_() {
+    var tt = this.el().textTracks;
+
+    if (tt) {
+      // Add tracks - if player is initialised after DOM loaded, textTracks
+      // will not trigger addtrack
+      for (var i = 0; i < tt.length; i++) {
+        this.textTracks().addTrack_(tt[i]);
+      }
+
+      if (tt.addEventListener) {
+        tt.addEventListener('change', this.handleTextTrackChange_);
+        tt.addEventListener('addtrack', this.handleTextTrackAdd_);
+        tt.addEventListener('removetrack', this.handleTextTrackRemove_);
+      }
+
+      // Remove (native) texttracks that are not used anymore
+      this.on('loadstart', this.removeOldTextTracks_);
+    }
+  };
+
+  Html5.prototype.handleTextTrackChange = function handleTextTrackChange(e) {
+    var tt = this.textTracks();
+
+    this.textTracks().trigger({
+      type: 'change',
+      target: tt,
+      currentTarget: tt,
+      srcElement: tt
+    });
+  };
+
+  Html5.prototype.handleTextTrackAdd = function handleTextTrackAdd(e) {
+    this.textTracks().addTrack_(e.track);
+  };
+
+  Html5.prototype.handleTextTrackRemove = function handleTextTrackRemove(e) {
+    this.textTracks().removeTrack_(e.track);
+  };
+
+  Html5.prototype.handleVideoTrackChange_ = function handleVideoTrackChange_(e) {
+    var vt = this.videoTracks();
+
+    this.videoTracks().trigger({
+      type: 'change',
+      target: vt,
+      currentTarget: vt,
+      srcElement: vt
+    });
+  };
+
+  Html5.prototype.handleVideoTrackAdd_ = function handleVideoTrackAdd_(e) {
+    this.videoTracks().addTrack_(e.track);
+  };
+
+  Html5.prototype.handleVideoTrackRemove_ = function handleVideoTrackRemove_(e) {
+    this.videoTracks().removeTrack_(e.track);
+  };
+
+  Html5.prototype.handleAudioTrackChange_ = function handleAudioTrackChange_(e) {
+    var audioTrackList = this.audioTracks();
+
+    this.audioTracks().trigger({
+      type: 'change',
+      target: audioTrackList,
+      currentTarget: audioTrackList,
+      srcElement: audioTrackList
+    });
+  };
+
+  Html5.prototype.handleAudioTrackAdd_ = function handleAudioTrackAdd_(e) {
+    this.audioTracks().addTrack_(e.track);
+  };
+
+  Html5.prototype.handleAudioTrackRemove_ = function handleAudioTrackRemove_(e) {
+    this.audioTracks().removeTrack_(e.track);
+  };
+
+  /**
+   * This is a helper function that is used in removeOldTextTracks_, removeOldAudioTracks_ and
+   * removeOldVideoTracks_
+   * @param {Track[]} techTracks Tracks for this tech
+   * @param {Track[]} elTracks Tracks for the HTML5 video element
+   * @private
+   */
+
+
+  Html5.prototype.removeOldTracks_ = function removeOldTracks_(techTracks, elTracks) {
+    // This will loop over the techTracks and check if they are still used by the HTML5 video element
+    // If not, they will be removed from the emulated list
+    var removeTracks = [];
+
+    if (!elTracks) {
+      return;
+    }
+
+    for (var i = 0; i < techTracks.length; i++) {
+      var techTrack = techTracks[i];
+      var found = false;
+
+      for (var j = 0; j < elTracks.length; j++) {
+        if (elTracks[j] === techTrack) {
+          found = true;
+          break;
+        }
+      }
+
+      if (!found) {
+        removeTracks.push(techTrack);
+      }
+    }
+
+    for (var _i = 0; _i < removeTracks.length; _i++) {
+      var _track = removeTracks[_i];
+
+      techTracks.removeTrack_(_track);
+    }
+  };
+
+  Html5.prototype.removeOldTextTracks_ = function removeOldTextTracks_() {
+    var techTracks = this.textTracks();
+    var elTracks = this.el().textTracks;
+
+    this.removeOldTracks_(techTracks, elTracks);
+  };
+
+  Html5.prototype.removeOldAudioTracks_ = function removeOldAudioTracks_() {
+    var techTracks = this.audioTracks();
+    var elTracks = this.el().audioTracks;
+
+    this.removeOldTracks_(techTracks, elTracks);
+  };
+
+  Html5.prototype.removeOldVideoTracks_ = function removeOldVideoTracks_() {
+    var techTracks = this.videoTracks();
+    var elTracks = this.el().videoTracks;
+
+    this.removeOldTracks_(techTracks, elTracks);
+  };
+
+  /**
+   * Play for html5 tech
+   *
+   * @method play
+   */
+
+
+  Html5.prototype.play = function play() {
+    var playPromise = this.el_.play();
+
+    // Catch/silence error when a pause interrupts a play request
+    // on browsers which return a promise
+    if (playPromise !== undefined && typeof playPromise.then === 'function') {
+      playPromise.then(null, function (e) {});
+    }
+  };
+
+  /**
+   * Pause for html5 tech
+   *
+   * @method pause
+   */
+
+
+  Html5.prototype.pause = function pause() {
+    this.el_.pause();
+  };
+
+  /**
+   * Paused for html5 tech
+   *
+   * @return {Boolean}
+   * @method paused
+   */
+
+
+  Html5.prototype.paused = function paused() {
+    return this.el_.paused;
+  };
+
+  /**
+   * Get current time
+   *
+   * @return {Number}
+   * @method currentTime
+   */
+
+
+  Html5.prototype.currentTime = function currentTime() {
+    return this.el_.currentTime;
+  };
+
+  /**
+   * Set current time
+   *
+   * @param {Number} seconds Current time of video
+   * @method setCurrentTime
+   */
+
+
+  Html5.prototype.setCurrentTime = function setCurrentTime(seconds) {
+    try {
+      this.el_.currentTime = seconds;
+    } catch (e) {
+      (0, _log2['default'])(e, 'Video is not ready. (Video.js)');
+      // this.warning(VideoJS.warnings.videoNotReady);
+    }
+  };
+
+  /**
+   * Get duration
+   *
+   * @return {Number}
+   * @method duration
+   */
+
+
+  Html5.prototype.duration = function duration() {
+    return this.el_.duration || 0;
+  };
+
+  /**
+   * Get a TimeRange object that represents the intersection
+   * of the time ranges for which the user agent has all
+   * relevant media
+   *
+   * @return {TimeRangeObject}
+   * @method buffered
+   */
+
+
+  Html5.prototype.buffered = function buffered() {
+    return this.el_.buffered;
+  };
+
+  /**
+   * Get volume level
+   *
+   * @return {Number}
+   * @method volume
+   */
+
+
+  Html5.prototype.volume = function volume() {
+    return this.el_.volume;
+  };
+
+  /**
+   * Set volume level
+   *
+   * @param {Number} percentAsDecimal Volume percent as a decimal
+   * @method setVolume
+   */
+
+
+  Html5.prototype.setVolume = function setVolume(percentAsDecimal) {
+    this.el_.volume = percentAsDecimal;
+  };
+
+  /**
+   * Get if muted
+   *
+   * @return {Boolean}
+   * @method muted
+   */
+
+
+  Html5.prototype.muted = function muted() {
+    return this.el_.muted;
+  };
+
+  /**
+   * Set muted
+   *
+   * @param {Boolean} If player is to be muted or note
+   * @method setMuted
+   */
+
+
+  Html5.prototype.setMuted = function setMuted(muted) {
+    this.el_.muted = muted;
+  };
+
+  /**
+   * Get player width
+   *
+   * @return {Number}
+   * @method width
+   */
+
+
+  Html5.prototype.width = function width() {
+    return this.el_.offsetWidth;
+  };
+
+  /**
+   * Get player height
+   *
+   * @return {Number}
+   * @method height
+   */
+
+
+  Html5.prototype.height = function height() {
+    return this.el_.offsetHeight;
+  };
+
+  /**
+   * Get if there is fullscreen support
+   *
+   * @return {Boolean}
+   * @method supportsFullScreen
+   */
+
+
+  Html5.prototype.supportsFullScreen = function supportsFullScreen() {
+    if (typeof this.el_.webkitEnterFullScreen === 'function') {
+      var userAgent = _window2['default'].navigator && _window2['default'].navigator.userAgent || '';
+
+      // Seems to be broken in Chromium/Chrome && Safari in Leopard
+      if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  /**
+   * Request to enter fullscreen
+   *
+   * @method enterFullScreen
+   */
+
+
+  Html5.prototype.enterFullScreen = function enterFullScreen() {
+    var video = this.el_;
+
+    if ('webkitDisplayingFullscreen' in video) {
+      this.one('webkitbeginfullscreen', function () {
+        this.one('webkitendfullscreen', function () {
+          this.trigger('fullscreenchange', { isFullscreen: false });
+        });
+
+        this.trigger('fullscreenchange', { isFullscreen: true });
+      });
+    }
+
+    if (video.paused && video.networkState <= video.HAVE_METADATA) {
+      // attempt to prime the video element for programmatic access
+      // this isn't necessary on the desktop but shouldn't hurt
+      this.el_.play();
+
+      // playing and pausing synchronously during the transition to fullscreen
+      // can get iOS ~6.1 devices into a play/pause loop
+      this.setTimeout(function () {
+        video.pause();
+        video.webkitEnterFullScreen();
+      }, 0);
+    } else {
+      video.webkitEnterFullScreen();
+    }
+  };
+
+  /**
+   * Request to exit fullscreen
+   *
+   * @method exitFullScreen
+   */
+
+
+  Html5.prototype.exitFullScreen = function exitFullScreen() {
+    this.el_.webkitExitFullScreen();
+  };
+
+  /**
+   * Get/set video
+   *
+   * @param {Object=} src Source object
+   * @return {Object}
+   * @method src
+   */
+
+
+  Html5.prototype.src = function src(_src) {
+    if (_src === undefined) {
+      return this.el_.src;
+    }
+
+    // Setting src through `src` instead of `setSrc` will be deprecated
+    this.setSrc(_src);
+  };
+
+  /**
+   * Set video
+   *
+   * @param {Object} src Source object
+   * @deprecated
+   * @method setSrc
+   */
+
+
+  Html5.prototype.setSrc = function setSrc(src) {
+    this.el_.src = src;
+  };
+
+  /**
+   * Load media into player
+   *
+   * @method load
+   */
+
+
+  Html5.prototype.load = function load() {
+    this.el_.load();
+  };
+
+  /**
+   * Reset the tech. Removes all sources and calls `load`.
+   *
+   * @method reset
+   */
+
+
+  Html5.prototype.reset = function reset() {
+    Html5.resetMediaElement(this.el_);
+  };
+
+  /**
+   * Get current source
+   *
+   * @return {Object}
+   * @method currentSrc
+   */
+
+
+  Html5.prototype.currentSrc = function currentSrc() {
+    if (this.currentSource_) {
+      return this.currentSource_.src;
+    }
+    return this.el_.currentSrc;
+  };
+
+  /**
+   * Get poster
+   *
+   * @return {String}
+   * @method poster
+   */
+
+
+  Html5.prototype.poster = function poster() {
+    return this.el_.poster;
+  };
+
+  /**
+   * Set poster
+   *
+   * @param {String} val URL to poster image
+   * @method
+   */
+
+
+  Html5.prototype.setPoster = function setPoster(val) {
+    this.el_.poster = val;
+  };
+
+  /**
+   * Get preload attribute
+   *
+   * @return {String}
+   * @method preload
+   */
+
+
+  Html5.prototype.preload = function preload() {
+    return this.el_.preload;
+  };
+
+  /**
+   * Set preload attribute
+   *
+   * @param {String} val Value for preload attribute
+   * @method setPreload
+   */
+
+
+  Html5.prototype.setPreload = function setPreload(val) {
+    this.el_.preload = val;
+  };
+
+  /**
+   * Get autoplay attribute
+   *
+   * @return {String}
+   * @method autoplay
+   */
+
+
+  Html5.prototype.autoplay = function autoplay() {
+    return this.el_.autoplay;
+  };
+
+  /**
+   * Set autoplay attribute
+   *
+   * @param {String} val Value for preload attribute
+   * @method setAutoplay
+   */
+
+
+  Html5.prototype.setAutoplay = function setAutoplay(val) {
+    this.el_.autoplay = val;
+  };
+
+  /**
+   * Get controls attribute
+   *
+   * @return {String}
+   * @method controls
+   */
+
+
+  Html5.prototype.controls = function controls() {
+    return this.el_.controls;
+  };
+
+  /**
+   * Set controls attribute
+   *
+   * @param {String} val Value for controls attribute
+   * @method setControls
+   */
+
+
+  Html5.prototype.setControls = function setControls(val) {
+    this.el_.controls = !!val;
+  };
+
+  /**
+   * Get loop attribute
+   *
+   * @return {String}
+   * @method loop
+   */
+
+
+  Html5.prototype.loop = function loop() {
+    return this.el_.loop;
+  };
+
+  /**
+   * Set loop attribute
+   *
+   * @param {String} val Value for loop attribute
+   * @method setLoop
+   */
+
+
+  Html5.prototype.setLoop = function setLoop(val) {
+    this.el_.loop = val;
+  };
+
+  /**
+   * Get error value
+   *
+   * @return {String}
+   * @method error
+   */
+
+
+  Html5.prototype.error = function error() {
+    return this.el_.error;
+  };
+
+  /**
+   * Get whether or not the player is in the "seeking" state
+   *
+   * @return {Boolean}
+   * @method seeking
+   */
+
+
+  Html5.prototype.seeking = function seeking() {
+    return this.el_.seeking;
+  };
+
+  /**
+   * Get a TimeRanges object that represents the
+   * ranges of the media resource to which it is possible
+   * for the user agent to seek.
+   *
+   * @return {TimeRangeObject}
+   * @method seekable
+   */
+
+
+  Html5.prototype.seekable = function seekable() {
+    return this.el_.seekable;
+  };
+
+  /**
+   * Get if video ended
+   *
+   * @return {Boolean}
+   * @method ended
+   */
+
+
+  Html5.prototype.ended = function ended() {
+    return this.el_.ended;
+  };
+
+  /**
+   * Get the value of the muted content attribute
+   * This attribute has no dynamic effect, it only
+   * controls the default state of the element
+   *
+   * @return {Boolean}
+   * @method defaultMuted
+   */
+
+
+  Html5.prototype.defaultMuted = function defaultMuted() {
+    return this.el_.defaultMuted;
+  };
+
+  /**
+   * Get desired speed at which the media resource is to play
+   *
+   * @return {Number}
+   * @method playbackRate
+   */
+
+
+  Html5.prototype.playbackRate = function playbackRate() {
+    return this.el_.playbackRate;
+  };
+
+  /**
+   * Returns a TimeRanges object that represents the ranges of the
+   * media resource that the user agent has played.
+   * @return {TimeRangeObject} the range of points on the media
+   * timeline that has been reached through normal playback
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played
+   */
+
+
+  Html5.prototype.played = function played() {
+    return this.el_.played;
+  };
+
+  /**
+   * Set desired speed at which the media resource is to play
+   *
+   * @param {Number} val Speed at which the media resource is to play
+   * @method setPlaybackRate
+   */
+
+
+  Html5.prototype.setPlaybackRate = function setPlaybackRate(val) {
+    this.el_.playbackRate = val;
+  };
+
+  /**
+   * Get the current state of network activity for the element, from
+   * the list below
+   * NETWORK_EMPTY (numeric value 0)
+   * NETWORK_IDLE (numeric value 1)
+   * NETWORK_LOADING (numeric value 2)
+   * NETWORK_NO_SOURCE (numeric value 3)
+   *
+   * @return {Number}
+   * @method networkState
+   */
+
+
+  Html5.prototype.networkState = function networkState() {
+    return this.el_.networkState;
+  };
+
+  /**
+   * Get a value that expresses the current state of the element
+   * with respect to rendering the current playback position, from
+   * the codes in the list below
+   * HAVE_NOTHING (numeric value 0)
+   * HAVE_METADATA (numeric value 1)
+   * HAVE_CURRENT_DATA (numeric value 2)
+   * HAVE_FUTURE_DATA (numeric value 3)
+   * HAVE_ENOUGH_DATA (numeric value 4)
+   *
+   * @return {Number}
+   * @method readyState
+   */
+
+
+  Html5.prototype.readyState = function readyState() {
+    return this.el_.readyState;
+  };
+
+  /**
+   * Get width of video
+   *
+   * @return {Number}
+   * @method videoWidth
+   */
+
+
+  Html5.prototype.videoWidth = function videoWidth() {
+    return this.el_.videoWidth;
+  };
+
+  /**
+   * Get height of video
+   *
+   * @return {Number}
+   * @method videoHeight
+   */
+
+
+  Html5.prototype.videoHeight = function videoHeight() {
+    return this.el_.videoHeight;
+  };
+
+  /**
+   * Get text tracks
+   *
+   * @return {TextTrackList}
+   * @method textTracks
+   */
+
+
+  Html5.prototype.textTracks = function textTracks() {
+    return _Tech.prototype.textTracks.call(this);
+  };
+
+  /**
+   * Creates and returns a text track object
+   *
+   * @param {String} kind Text track kind (subtitles, captions, descriptions
+   *                                       chapters and metadata)
+   * @param {String=} label Label to identify the text track
+   * @param {String=} language Two letter language abbreviation
+   * @return {TextTrackObject}
+   * @method addTextTrack
+   */
+
+
+  Html5.prototype.addTextTrack = function addTextTrack(kind, label, language) {
+    if (!this.featuresNativeTextTracks) {
+      return _Tech.prototype.addTextTrack.call(this, kind, label, language);
+    }
+
+    return this.el_.addTextTrack(kind, label, language);
+  };
+
+  /**
+   * Creates a remote text track object and returns a html track element
+   *
+   * @param {Object} options The object should contain values for
+   * kind, language, label and src (location of the WebVTT file)
+   * @return {HTMLTrackElement}
+   * @method addRemoteTextTrack
+   */
+
+
+  Html5.prototype.addRemoteTextTrack = function addRemoteTextTrack() {
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    if (!this.featuresNativeTextTracks) {
+      return _Tech.prototype.addRemoteTextTrack.call(this, options);
+    }
+
+    var htmlTrackElement = _document2['default'].createElement('track');
+
+    if (options.kind) {
+      htmlTrackElement.kind = options.kind;
+    }
+    if (options.label) {
+      htmlTrackElement.label = options.label;
+    }
+    if (options.language || options.srclang) {
+      htmlTrackElement.srclang = options.language || options.srclang;
+    }
+    if (options['default']) {
+      htmlTrackElement['default'] = options['default'];
+    }
+    if (options.id) {
+      htmlTrackElement.id = options.id;
+    }
+    if (options.src) {
+      htmlTrackElement.src = options.src;
+    }
+
+    this.el().appendChild(htmlTrackElement);
+
+    // store HTMLTrackElement and TextTrack to remote list
+    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);
+    this.remoteTextTracks().addTrack_(htmlTrackElement.track);
+
+    return htmlTrackElement;
+  };
+
+  /**
+   * Remove remote text track from TextTrackList object
+   *
+   * @param {TextTrackObject} track Texttrack object to remove
+   * @method removeRemoteTextTrack
+   */
+
+
+  Html5.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {
+    if (!this.featuresNativeTextTracks) {
+      return _Tech.prototype.removeRemoteTextTrack.call(this, track);
+    }
+
+    var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);
+
+    // remove HTMLTrackElement and TextTrack from remote list
+    this.remoteTextTrackEls().removeTrackElement_(trackElement);
+    this.remoteTextTracks().removeTrack_(track);
+
+    var tracks = this.$$('track');
+
+    var i = tracks.length;
+
+    while (i--) {
+      if (track === tracks[i] || track === tracks[i].track) {
+        this.el().removeChild(tracks[i]);
+      }
+    }
+  };
+
+  return Html5;
+}(_tech2['default']);
+
+/* HTML5 Support Testing ---------------------------------------------------- */
+
+/*
+* Element for testing browser HTML5 video capabilities
+*
+* @type {Element}
+* @constant
+* @private
+*/
+
+
+Html5.TEST_VID = _document2['default'].createElement('video');
+var track = _document2['default'].createElement('track');
+
+track.kind = 'captions';
+track.srclang = 'en';
+track.label = 'English';
+Html5.TEST_VID.appendChild(track);
+
+/*
+ * Check if HTML5 video is supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.isSupported = function () {
+  // IE9 with no Media Player is a LIAR! (#984)
+  try {
+    Html5.TEST_VID.volume = 0.5;
+  } catch (e) {
+    return false;
+  }
+
+  return !!Html5.TEST_VID.canPlayType;
+};
+
+// Add Source Handler pattern functions to this tech
+_tech2['default'].withSourceHandlers(Html5);
+
+/*
+ * The default native source handler.
+ * This simply passes the source to the video element. Nothing fancy.
+ *
+ * @param  {Object} source   The source object
+ * @param  {Html5} tech  The instance of the HTML5 tech
+ */
+Html5.nativeSourceHandler = {};
+
+/*
+ * Check if the video element can play the given videotype
+ *
+ * @param  {String} type    The mimetype to check
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Html5.nativeSourceHandler.canPlayType = function (type) {
+  // IE9 on Windows 7 without MediaPlayer throws an error here
+  // https://github.com/videojs/video.js/issues/519
+  try {
+    return Html5.TEST_VID.canPlayType(type);
+  } catch (e) {
+    return '';
+  }
+};
+
+/*
+ * Check if the video element can handle the source natively
+ *
+ * @param  {Object} source  The source object
+ * @param  {Object} options The options passed to the tech
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Html5.nativeSourceHandler.canHandleSource = function (source, options) {
+
+  // If a type was provided we should rely on that
+  if (source.type) {
+    return Html5.nativeSourceHandler.canPlayType(source.type);
+
+    // If no type, fall back to checking 'video/[EXTENSION]'
+  } else if (source.src) {
+    var ext = Url.getFileExtension(source.src);
+
+    return Html5.nativeSourceHandler.canPlayType('video/' + ext);
+  }
+
+  return '';
+};
+
+/*
+ * Pass the source to the video element
+ * Adaptive source handlers will have more complicated workflows before passing
+ * video data to the video element
+ *
+ * @param  {Object} source   The source object
+ * @param  {Html5}  tech     The instance of the Html5 tech
+ * @param  {Object} options  The options to pass to the source
+ */
+Html5.nativeSourceHandler.handleSource = function (source, tech, options) {
+  tech.setSrc(source.src);
+};
+
+/*
+* Clean up the source handler when disposing the player or switching sources..
+* (no cleanup is needed when supporting the format natively)
+*/
+Html5.nativeSourceHandler.dispose = function () {};
+
+// Register the native source handler
+Html5.registerSourceHandler(Html5.nativeSourceHandler);
+
+/*
+ * Check if the volume can be changed in this browser/device.
+ * Volume cannot be changed in a lot of mobile devices.
+ * Specifically, it can't be changed from 1 on iOS.
+ *
+ * @return {Boolean}
+ */
+Html5.canControlVolume = function () {
+  // IE will error if Windows Media Player not installed #3315
+  try {
+    var volume = Html5.TEST_VID.volume;
+
+    Html5.TEST_VID.volume = volume / 2 + 0.1;
+    return volume !== Html5.TEST_VID.volume;
+  } catch (e) {
+    return false;
+  }
+};
+
+/*
+ * Check if playbackRate is supported in this browser/device.
+ *
+ * @return {Boolean}
+ */
+Html5.canControlPlaybackRate = function () {
+  // Playback rate API is implemented in Android Chrome, but doesn't do anything
+  // https://github.com/videojs/video.js/issues/3180
+  if (browser.IS_ANDROID && browser.IS_CHROME) {
+    return false;
+  }
+  // IE will error if Windows Media Player not installed #3315
+  try {
+    var playbackRate = Html5.TEST_VID.playbackRate;
+
+    Html5.TEST_VID.playbackRate = playbackRate / 2 + 0.1;
+    return playbackRate !== Html5.TEST_VID.playbackRate;
+  } catch (e) {
+    return false;
+  }
+};
+
+/*
+ * Check to see if native text tracks are supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.supportsNativeTextTracks = function () {
+  var supportsTextTracks = void 0;
+
+  // Figure out native text track support
+  // If mode is a number, we cannot change it because it'll disappear from view.
+  // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.
+  // Firefox isn't playing nice either with modifying the mode
+  // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862
+  supportsTextTracks = !!Html5.TEST_VID.textTracks;
+  if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {
+    supportsTextTracks = typeof Html5.TEST_VID.textTracks[0].mode !== 'number';
+  }
+  if (supportsTextTracks && browser.IS_FIREFOX) {
+    supportsTextTracks = false;
+  }
+  if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {
+    supportsTextTracks = false;
+  }
+
+  return supportsTextTracks;
+};
+
+/*
+ * Check to see if native video tracks are supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.supportsNativeVideoTracks = function () {
+  var supportsVideoTracks = !!Html5.TEST_VID.videoTracks;
+
+  return supportsVideoTracks;
+};
+
+/*
+ * Check to see if native audio tracks are supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.supportsNativeAudioTracks = function () {
+  var supportsAudioTracks = !!Html5.TEST_VID.audioTracks;
+
+  return supportsAudioTracks;
+};
+
+/**
+ * An array of events available on the Html5 tech.
+ *
+ * @private
+ * @type {Array}
+ */
+Html5.Events = ['loadstart', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'seeking', 'seeked', 'ended', 'durationchange', 'timeupdate', 'progress', 'play', 'pause', 'ratechange', 'volumechange'];
+
+/*
+ * Set the tech's volume control support status
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresVolumeControl = Html5.canControlVolume();
+
+/*
+ * Set the tech's playbackRate support status
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresPlaybackRate = Html5.canControlPlaybackRate();
+
+/*
+ * Set the tech's status on moving the video element.
+ * In iOS, if you move a video element in the DOM, it breaks video playback.
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.movingMediaElementInDOM = !browser.IS_IOS;
+
+/*
+ * Set the the tech's fullscreen resize support status.
+ * HTML video is able to automatically resize when going to fullscreen.
+ * (No longer appears to be used. Can probably be removed.)
+ */
+Html5.prototype.featuresFullscreenResize = true;
+
+/*
+ * Set the tech's progress event support status
+ * (this disables the manual progress events of the Tech)
+ */
+Html5.prototype.featuresProgressEvents = true;
+
+/*
+ * Sets the tech's status on native text track support
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresNativeTextTracks = Html5.supportsNativeTextTracks();
+
+/**
+ * Sets the tech's status on native text track support
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresNativeVideoTracks = Html5.supportsNativeVideoTracks();
+
+/**
+ * Sets the tech's status on native audio track support
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresNativeAudioTracks = Html5.supportsNativeAudioTracks();
+
+// HTML5 Feature detection and Device Fixes --------------------------------- //
+var canPlayType = void 0;
+var mpegurlRE = /^application\/(?:x-|vnd\.apple\.)mpegurl/i;
+var mp4RE = /^video\/mp4/i;
+
+Html5.patchCanPlayType = function () {
+  // Android 4.0 and above can play HLS to some extent but it reports being unable to do so
+  if (browser.ANDROID_VERSION >= 4.0) {
+    if (!canPlayType) {
+      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;
+    }
+
+    Html5.TEST_VID.constructor.prototype.canPlayType = function (type) {
+      if (type && mpegurlRE.test(type)) {
+        return 'maybe';
+      }
+      return canPlayType.call(this, type);
+    };
+  }
+
+  // Override Android 2.2 and less canPlayType method which is broken
+  if (browser.IS_OLD_ANDROID) {
+    if (!canPlayType) {
+      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;
+    }
+
+    Html5.TEST_VID.constructor.prototype.canPlayType = function (type) {
+      if (type && mp4RE.test(type)) {
+        return 'maybe';
+      }
+      return canPlayType.call(this, type);
+    };
+  }
+};
+
+Html5.unpatchCanPlayType = function () {
+  var r = Html5.TEST_VID.constructor.prototype.canPlayType;
+
+  Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;
+  canPlayType = null;
+  return r;
+};
+
+// by default, patch the video element
+Html5.patchCanPlayType();
+
+Html5.disposeMediaElement = function (el) {
+  if (!el) {
+    return;
+  }
+
+  if (el.parentNode) {
+    el.parentNode.removeChild(el);
+  }
+
+  // remove any child track or source nodes to prevent their loading
+  while (el.hasChildNodes()) {
+    el.removeChild(el.firstChild);
+  }
+
+  // remove any src reference. not setting `src=''` because that causes a warning
+  // in firefox
+  el.removeAttribute('src');
+
+  // force the media element to update its loading state by calling load()
+  // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)
+  if (typeof el.load === 'function') {
+    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)
+    (function () {
+      try {
+        el.load();
+      } catch (e) {
+        // not supported
+      }
+    })();
+  }
+};
+
+Html5.resetMediaElement = function (el) {
+  if (!el) {
+    return;
+  }
+
+  var sources = el.querySelectorAll('source');
+  var i = sources.length;
+
+  while (i--) {
+    el.removeChild(sources[i]);
+  }
+
+  // remove any src reference.
+  // not setting `src=''` because that throws an error
+  el.removeAttribute('src');
+
+  if (typeof el.load === 'function') {
+    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)
+    (function () {
+      try {
+        el.load();
+      } catch (e) {
+        // satisfy linter
+      }
+    })();
+  }
+};
+
+_component2['default'].registerComponent('Html5', Html5);
+_tech2['default'].registerTech('Html5', Html5);
+exports['default'] = Html5;
+
+},{"../component":5,"../utils/browser.js":78,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/to-title-case.js":89,"../utils/url.js":90,"./tech.js":62,"global/document":92,"global/window":93,"object.assign":136,"tsml":146}],61:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _tech = _dereq_('./tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _toTitleCase = _dereq_('../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file loader.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Media Loader is the component that decides which playback technology to load
+ * when the player is initialized.
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends Component
+ * @class MediaLoader
+ */
+var MediaLoader = function (_Component) {
+  _inherits(MediaLoader, _Component);
+
+  function MediaLoader(player, options, ready) {
+    _classCallCheck(this, MediaLoader);
+
+    // If there are no sources when the player is initialized,
+    // load the first supported playback technology.
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options, ready));
+
+    if (!options.playerOptions.sources || options.playerOptions.sources.length === 0) {
+      for (var i = 0, j = options.playerOptions.techOrder; i < j.length; i++) {
+        var techName = (0, _toTitleCase2['default'])(j[i]);
+        var tech = _tech2['default'].getTech(techName);
+
+        // Support old behavior of techs being registered as components.
+        // Remove once that deprecated behavior is removed.
+        if (!techName) {
+          tech = _component2['default'].getComponent(techName);
+        }
+
+        // Check if the browser supports this technology
+        if (tech && tech.isSupported()) {
+          player.loadTech_(techName);
+          break;
+        }
+      }
+    } else {
+      // Loop through playback technologies (HTML5, Flash) and check for support.
+      // Then load the best source.
+      // A few assumptions here:
+      //   All playback technologies respect preload false.
+      player.src(options.playerOptions.sources);
+    }
+    return _this;
+  }
+
+  return MediaLoader;
+}(_component2['default']);
+
+_component2['default'].registerComponent('MediaLoader', MediaLoader);
+exports['default'] = MediaLoader;
+
+},{"../component.js":5,"../utils/to-title-case.js":89,"./tech.js":62}],62:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _htmlTrackElement = _dereq_('../tracks/html-track-element');
+
+var _htmlTrackElement2 = _interopRequireDefault(_htmlTrackElement);
+
+var _htmlTrackElementList = _dereq_('../tracks/html-track-element-list');
+
+var _htmlTrackElementList2 = _interopRequireDefault(_htmlTrackElementList);
+
+var _mergeOptions = _dereq_('../utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _textTrack = _dereq_('../tracks/text-track');
+
+var _textTrack2 = _interopRequireDefault(_textTrack);
+
+var _textTrackList = _dereq_('../tracks/text-track-list');
+
+var _textTrackList2 = _interopRequireDefault(_textTrackList);
+
+var _videoTrackList = _dereq_('../tracks/video-track-list');
+
+var _videoTrackList2 = _interopRequireDefault(_videoTrackList);
+
+var _audioTrackList = _dereq_('../tracks/audio-track-list');
+
+var _audioTrackList2 = _interopRequireDefault(_audioTrackList);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _timeRanges = _dereq_('../utils/time-ranges.js');
+
+var _buffer = _dereq_('../utils/buffer.js');
+
+var _mediaError = _dereq_('../media-error.js');
+
+var _mediaError2 = _interopRequireDefault(_mediaError);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file tech.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Media Technology Controller - Base class for media playback
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * technology controllers like Flash and HTML5
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+function createTrackHelper(self, kind, label, language) {
+  var options = arguments.length <= 4 || arguments[4] === undefined ? {} : arguments[4];
+
+  var tracks = self.textTracks();
+
+  options.kind = kind;
+
+  if (label) {
+    options.label = label;
+  }
+  if (language) {
+    options.language = language;
+  }
+  options.tech = self;
+
+  var track = new _textTrack2['default'](options);
+
+  tracks.addTrack_(track);
+
+  return track;
+}
+
+/**
+ * Base class for media (HTML5 Video, Flash) controllers
+ *
+ * @param {Object=} options Options object
+ * @param {Function=} ready Ready callback function
+ * @extends Component
+ * @class Tech
+ */
+
+var Tech = function (_Component) {
+  _inherits(Tech, _Component);
+
+  function Tech() {
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+    var ready = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1];
+
+    _classCallCheck(this, Tech);
+
+    // we don't want the tech to report user activity automatically.
+    // This is done manually in addControlsListeners
+    options.reportTouchActivity = false;
+
+    // keep track of whether the current source has played at all to
+    // implement a very limited played()
+    var _this = _possibleConstructorReturn(this, _Component.call(this, null, options, ready));
+
+    _this.hasStarted_ = false;
+    _this.on('playing', function () {
+      this.hasStarted_ = true;
+    });
+    _this.on('loadstart', function () {
+      this.hasStarted_ = false;
+    });
+
+    _this.textTracks_ = options.textTracks;
+    _this.videoTracks_ = options.videoTracks;
+    _this.audioTracks_ = options.audioTracks;
+
+    // Manually track progress in cases where the browser/flash player doesn't report it.
+    if (!_this.featuresProgressEvents) {
+      _this.manualProgressOn();
+    }
+
+    // Manually track timeupdates in cases where the browser/flash player doesn't report it.
+    if (!_this.featuresTimeupdateEvents) {
+      _this.manualTimeUpdatesOn();
+    }
+
+    if (options.nativeCaptions === false || options.nativeTextTracks === false) {
+      _this.featuresNativeTextTracks = false;
+    }
+
+    if (!_this.featuresNativeTextTracks) {
+      _this.on('ready', _this.emulateTextTracks);
+    }
+
+    _this.initTextTrackListeners();
+    _this.initTrackListeners();
+
+    // Turn on component tap events
+    _this.emitTapEvents();
+    return _this;
+  }
+
+  /* Fallbacks for unsupported event types
+  ================================================================================ */
+  // Manually trigger progress events based on changes to the buffered amount
+  // Many flash players and older HTML5 browsers don't send progress or progress-like events
+  /**
+   * Turn on progress events
+   *
+   * @method manualProgressOn
+   */
+
+
+  Tech.prototype.manualProgressOn = function manualProgressOn() {
+    this.on('durationchange', this.onDurationChange);
+
+    this.manualProgress = true;
+
+    // Trigger progress watching when a source begins loading
+    this.one('ready', this.trackProgress);
+  };
+
+  /**
+   * Turn off progress events
+   *
+   * @method manualProgressOff
+   */
+
+
+  Tech.prototype.manualProgressOff = function manualProgressOff() {
+    this.manualProgress = false;
+    this.stopTrackingProgress();
+
+    this.off('durationchange', this.onDurationChange);
+  };
+
+  /**
+   * Track progress
+   *
+   * @method trackProgress
+   */
+
+
+  Tech.prototype.trackProgress = function trackProgress() {
+    this.stopTrackingProgress();
+    this.progressInterval = this.setInterval(Fn.bind(this, function () {
+      // Don't trigger unless buffered amount is greater than last time
+
+      var numBufferedPercent = this.bufferedPercent();
+
+      if (this.bufferedPercent_ !== numBufferedPercent) {
+        this.trigger('progress');
+      }
+
+      this.bufferedPercent_ = numBufferedPercent;
+
+      if (numBufferedPercent === 1) {
+        this.stopTrackingProgress();
+      }
+    }), 500);
+  };
+
+  /**
+   * Update duration
+   *
+   * @method onDurationChange
+   */
+
+
+  Tech.prototype.onDurationChange = function onDurationChange() {
+    this.duration_ = this.duration();
+  };
+
+  /**
+   * Create and get TimeRange object for buffering
+   *
+   * @return {TimeRangeObject}
+   * @method buffered
+   */
+
+
+  Tech.prototype.buffered = function buffered() {
+    return (0, _timeRanges.createTimeRange)(0, 0);
+  };
+
+  /**
+   * Get buffered percent
+   *
+   * @return {Number}
+   * @method bufferedPercent
+   */
+
+
+  Tech.prototype.bufferedPercent = function bufferedPercent() {
+    return (0, _buffer.bufferedPercent)(this.buffered(), this.duration_);
+  };
+
+  /**
+   * Stops tracking progress by clearing progress interval
+   *
+   * @method stopTrackingProgress
+   */
+
+
+  Tech.prototype.stopTrackingProgress = function stopTrackingProgress() {
+    this.clearInterval(this.progressInterval);
+  };
+
+  /**
+   * Set event listeners for on play and pause and tracking current time
+   *
+   * @method manualTimeUpdatesOn
+   */
+
+
+  Tech.prototype.manualTimeUpdatesOn = function manualTimeUpdatesOn() {
+    this.manualTimeUpdates = true;
+
+    this.on('play', this.trackCurrentTime);
+    this.on('pause', this.stopTrackingCurrentTime);
+  };
+
+  /**
+   * Remove event listeners for on play and pause and tracking current time
+   *
+   * @method manualTimeUpdatesOff
+   */
+
+
+  Tech.prototype.manualTimeUpdatesOff = function manualTimeUpdatesOff() {
+    this.manualTimeUpdates = false;
+    this.stopTrackingCurrentTime();
+    this.off('play', this.trackCurrentTime);
+    this.off('pause', this.stopTrackingCurrentTime);
+  };
+
+  /**
+   * Tracks current time
+   *
+   * @method trackCurrentTime
+   */
+
+
+  Tech.prototype.trackCurrentTime = function trackCurrentTime() {
+    if (this.currentTimeInterval) {
+      this.stopTrackingCurrentTime();
+    }
+    this.currentTimeInterval = this.setInterval(function () {
+      this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });
+
+      // 42 = 24 fps // 250 is what Webkit uses // FF uses 15
+    }, 250);
+  };
+
+  /**
+   * Turn off play progress tracking (when paused or dragging)
+   *
+   * @method stopTrackingCurrentTime
+   */
+
+
+  Tech.prototype.stopTrackingCurrentTime = function stopTrackingCurrentTime() {
+    this.clearInterval(this.currentTimeInterval);
+
+    // #1002 - if the video ends right before the next timeupdate would happen,
+    // the progress bar won't make it all the way to the end
+    this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });
+  };
+
+  /**
+   * Turn off any manual progress or timeupdate tracking
+   *
+   * @method dispose
+   */
+
+
+  Tech.prototype.dispose = function dispose() {
+
+    // clear out all tracks because we can't reuse them between techs
+    this.clearTracks(['audio', 'video', 'text']);
+
+    // Turn off any manual progress or timeupdate tracking
+    if (this.manualProgress) {
+      this.manualProgressOff();
+    }
+
+    if (this.manualTimeUpdates) {
+      this.manualTimeUpdatesOff();
+    }
+
+    _Component.prototype.dispose.call(this);
+  };
+
+  /**
+   * clear out a track list, or multiple track lists
+   *
+   * Note: Techs without source handlers should call this between
+   * sources for video & audio tracks, as usually you don't want
+   * to use them between tracks and we have no automatic way to do
+   * it for you
+   *
+   * @method clearTracks
+   * @param {Array|String} types type(s) of track lists to empty
+   */
+
+
+  Tech.prototype.clearTracks = function clearTracks(types) {
+    var _this2 = this;
+
+    types = [].concat(types);
+    // clear out all tracks because we can't reuse them between techs
+    types.forEach(function (type) {
+      var list = _this2[type + 'Tracks']() || [];
+      var i = list.length;
+
+      while (i--) {
+        var track = list[i];
+
+        if (type === 'text') {
+          _this2.removeRemoteTextTrack(track);
+        }
+        list.removeTrack_(track);
+      }
+    });
+  };
+
+  /**
+   * Reset the tech. Removes all sources and resets readyState.
+   *
+   * @method reset
+   */
+
+
+  Tech.prototype.reset = function reset() {};
+
+  /**
+   * When invoked without an argument, returns a MediaError object
+   * representing the current error state of the player or null if
+   * there is no error. When invoked with an argument, set the current
+   * error state of the player.
+   * @param {MediaError=} err    Optional an error object
+   * @return {MediaError}        the current error object or null
+   * @method error
+   */
+
+
+  Tech.prototype.error = function error(err) {
+    if (err !== undefined) {
+      this.error_ = new _mediaError2['default'](err);
+      this.trigger('error');
+    }
+    return this.error_;
+  };
+
+  /**
+   * Return the time ranges that have been played through for the
+   * current source. This implementation is incomplete. It does not
+   * track the played time ranges, only whether the source has played
+   * at all or not.
+   * @return {TimeRangeObject} a single time range if this video has
+   * played or an empty set of ranges if not.
+   * @method played
+   */
+
+
+  Tech.prototype.played = function played() {
+    if (this.hasStarted_) {
+      return (0, _timeRanges.createTimeRange)(0, 0);
+    }
+    return (0, _timeRanges.createTimeRange)();
+  };
+
+  /**
+   * Set current time
+   *
+   * @method setCurrentTime
+   */
+
+
+  Tech.prototype.setCurrentTime = function setCurrentTime() {
+    // improve the accuracy of manual timeupdates
+    if (this.manualTimeUpdates) {
+      this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });
+    }
+  };
+
+  /**
+   * Initialize texttrack listeners
+   *
+   * @method initTextTrackListeners
+   */
+
+
+  Tech.prototype.initTextTrackListeners = function initTextTrackListeners() {
+    var textTrackListChanges = Fn.bind(this, function () {
+      this.trigger('texttrackchange');
+    });
+
+    var tracks = this.textTracks();
+
+    if (!tracks) {
+      return;
+    }
+
+    tracks.addEventListener('removetrack', textTrackListChanges);
+    tracks.addEventListener('addtrack', textTrackListChanges);
+
+    this.on('dispose', Fn.bind(this, function () {
+      tracks.removeEventListener('removetrack', textTrackListChanges);
+      tracks.removeEventListener('addtrack', textTrackListChanges);
+    }));
+  };
+
+  /**
+   * Initialize audio and video track listeners
+   *
+   * @method initTrackListeners
+   */
+
+
+  Tech.prototype.initTrackListeners = function initTrackListeners() {
+    var _this3 = this;
+
+    var trackTypes = ['video', 'audio'];
+
+    trackTypes.forEach(function (type) {
+      var trackListChanges = function trackListChanges() {
+        _this3.trigger(type + 'trackchange');
+      };
+
+      var tracks = _this3[type + 'Tracks']();
+
+      tracks.addEventListener('removetrack', trackListChanges);
+      tracks.addEventListener('addtrack', trackListChanges);
+
+      _this3.on('dispose', function () {
+        tracks.removeEventListener('removetrack', trackListChanges);
+        tracks.removeEventListener('addtrack', trackListChanges);
+      });
+    });
+  };
+
+  /**
+   * Emulate texttracks
+   *
+   * @method emulateTextTracks
+   */
+
+
+  Tech.prototype.emulateTextTracks = function emulateTextTracks() {
+    var _this4 = this;
+
+    var tracks = this.textTracks();
+
+    if (!tracks) {
+      return;
+    }
+
+    if (!_window2['default'].WebVTT && this.el().parentNode !== null && this.el().parentNode !== undefined) {
+      (function () {
+        var script = _document2['default'].createElement('script');
+
+        script.src = _this4.options_['vtt.js'] || 'https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js';
+        script.onload = function () {
+          _this4.trigger('vttjsloaded');
+        };
+        script.onerror = function () {
+          _this4.trigger('vttjserror');
+        };
+        _this4.on('dispose', function () {
+          script.onload = null;
+          script.onerror = null;
+        });
+        // but have not loaded yet and we set it to true before the inject so that
+        // we don't overwrite the injected window.WebVTT if it loads right away
+        _window2['default'].WebVTT = true;
+        _this4.el().parentNode.appendChild(script);
+      })();
+    }
+
+    var updateDisplay = function updateDisplay() {
+      return _this4.trigger('texttrackchange');
+    };
+    var textTracksChanges = function textTracksChanges() {
+      updateDisplay();
+
+      for (var i = 0; i < tracks.length; i++) {
+        var track = tracks[i];
+
+        track.removeEventListener('cuechange', updateDisplay);
+        if (track.mode === 'showing') {
+          track.addEventListener('cuechange', updateDisplay);
+        }
+      }
+    };
+
+    textTracksChanges();
+    tracks.addEventListener('change', textTracksChanges);
+
+    this.on('dispose', function () {
+      tracks.removeEventListener('change', textTracksChanges);
+    });
+  };
+
+  /**
+   * Get videotracks
+   *
+   * @returns {VideoTrackList}
+   * @method videoTracks
+   */
+
+
+  Tech.prototype.videoTracks = function videoTracks() {
+    this.videoTracks_ = this.videoTracks_ || new _videoTrackList2['default']();
+    return this.videoTracks_;
+  };
+
+  /**
+   * Get audiotracklist
+   *
+   * @returns {AudioTrackList}
+   * @method audioTracks
+   */
+
+
+  Tech.prototype.audioTracks = function audioTracks() {
+    this.audioTracks_ = this.audioTracks_ || new _audioTrackList2['default']();
+    return this.audioTracks_;
+  };
+
+  /*
+   * Provide default methods for text tracks.
+   *
+   * Html5 tech overrides these.
+   */
+
+  /**
+   * Get texttracks
+   *
+   * @returns {TextTrackList}
+   * @method textTracks
+   */
+
+
+  Tech.prototype.textTracks = function textTracks() {
+    this.textTracks_ = this.textTracks_ || new _textTrackList2['default']();
+    return this.textTracks_;
+  };
+
+  /**
+   * Get remote texttracks
+   *
+   * @returns {TextTrackList}
+   * @method remoteTextTracks
+   */
+
+
+  Tech.prototype.remoteTextTracks = function remoteTextTracks() {
+    this.remoteTextTracks_ = this.remoteTextTracks_ || new _textTrackList2['default']();
+    return this.remoteTextTracks_;
+  };
+
+  /**
+   * Get remote htmltrackelements
+   *
+   * @returns {HTMLTrackElementList}
+   * @method remoteTextTrackEls
+   */
+
+
+  Tech.prototype.remoteTextTrackEls = function remoteTextTrackEls() {
+    this.remoteTextTrackEls_ = this.remoteTextTrackEls_ || new _htmlTrackElementList2['default']();
+    return this.remoteTextTrackEls_;
+  };
+
+  /**
+   * Creates and returns a remote text track object
+   *
+   * @param {String} kind Text track kind (subtitles, captions, descriptions
+   *                                       chapters and metadata)
+   * @param {String=} label Label to identify the text track
+   * @param {String=} language Two letter language abbreviation
+   * @return {TextTrackObject}
+   * @method addTextTrack
+   */
+
+
+  Tech.prototype.addTextTrack = function addTextTrack(kind, label, language) {
+    if (!kind) {
+      throw new Error('TextTrack kind is required but was not provided');
+    }
+
+    return createTrackHelper(this, kind, label, language);
+  };
+
+  /**
+   * Creates a remote text track object and returns a emulated html track element
+   *
+   * @param {Object} options The object should contain values for
+   * kind, language, label and src (location of the WebVTT file)
+   * @return {HTMLTrackElement}
+   * @method addRemoteTextTrack
+   */
+
+
+  Tech.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) {
+    var track = (0, _mergeOptions2['default'])(options, {
+      tech: this
+    });
+
+    var htmlTrackElement = new _htmlTrackElement2['default'](track);
+
+    // store HTMLTrackElement and TextTrack to remote list
+    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);
+    this.remoteTextTracks().addTrack_(htmlTrackElement.track);
+
+    // must come after remoteTextTracks()
+    this.textTracks().addTrack_(htmlTrackElement.track);
+
+    return htmlTrackElement;
+  };
+
+  /**
+   * Remove remote texttrack
+   *
+   * @param {TextTrackObject} track Texttrack to remove
+   * @method removeRemoteTextTrack
+   */
+
+
+  Tech.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {
+    this.textTracks().removeTrack_(track);
+
+    var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);
+
+    // remove HTMLTrackElement and TextTrack from remote list
+    this.remoteTextTrackEls().removeTrackElement_(trackElement);
+    this.remoteTextTracks().removeTrack_(track);
+  };
+
+  /**
+   * Provide a default setPoster method for techs
+   * Poster support for techs should be optional, so we don't want techs to
+   * break if they don't have a way to set a poster.
+   *
+   * @method setPoster
+   */
+
+
+  Tech.prototype.setPoster = function setPoster() {};
+
+  /*
+   * Check if the tech can support the given type
+   *
+   * The base tech does not support any type, but source handlers might
+   * overwrite this.
+   *
+   * @param  {String} type    The mimetype to check
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+
+
+  Tech.prototype.canPlayType = function canPlayType() {
+    return '';
+  };
+
+  /*
+   * Return whether the argument is a Tech or not.
+   * Can be passed either a Class like `Html5` or a instance like `player.tech_`
+   *
+   * @param {Object} component An item to check
+   * @return {Boolean}         Whether it is a tech or not
+   */
+
+
+  Tech.isTech = function isTech(component) {
+    return component.prototype instanceof Tech || component instanceof Tech || component === Tech;
+  };
+
+  /**
+   * Registers a Tech
+   *
+   * @param {String} name Name of the Tech to register
+   * @param {Object} tech The tech to register
+   * @static
+   * @method registerComponent
+   */
+
+
+  Tech.registerTech = function registerTech(name, tech) {
+    if (!Tech.techs_) {
+      Tech.techs_ = {};
+    }
+
+    if (!Tech.isTech(tech)) {
+      throw new Error('Tech ' + name + ' must be a Tech');
+    }
+
+    Tech.techs_[name] = tech;
+    return tech;
+  };
+
+  /**
+   * Gets a component by name
+   *
+   * @param {String} name Name of the component to get
+   * @return {Component}
+   * @static
+   * @method getComponent
+   */
+
+
+  Tech.getTech = function getTech(name) {
+    if (Tech.techs_ && Tech.techs_[name]) {
+      return Tech.techs_[name];
+    }
+
+    if (_window2['default'] && _window2['default'].videojs && _window2['default'].videojs[name]) {
+      _log2['default'].warn('The ' + name + ' tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)');
+      return _window2['default'].videojs[name];
+    }
+  };
+
+  return Tech;
+}(_component2['default']);
+
+/**
+ * List of associated text tracks
+ *
+ * @type {TextTrackList}
+ * @private
+ */
+
+
+Tech.prototype.textTracks_; // eslint-disable-line
+
+/**
+ * List of associated audio tracks
+ *
+ * @type {AudioTrackList}
+ * @private
+ */
+Tech.prototype.audioTracks_; // eslint-disable-line
+
+/**
+ * List of associated video tracks
+ *
+ * @type {VideoTrackList}
+ * @private
+ */
+Tech.prototype.videoTracks_; // eslint-disable-line
+
+Tech.prototype.featuresVolumeControl = true;
+
+// Resizing plugins using request fullscreen reloads the plugin
+Tech.prototype.featuresFullscreenResize = false;
+Tech.prototype.featuresPlaybackRate = false;
+
+// Optional events that we can manually mimic with timers
+// currently not triggered by video-js-swf
+Tech.prototype.featuresProgressEvents = false;
+Tech.prototype.featuresTimeupdateEvents = false;
+
+Tech.prototype.featuresNativeTextTracks = false;
+
+/**
+ * A functional mixin for techs that want to use the Source Handler pattern.
+ *
+ * ##### EXAMPLE:
+ *
+ *   Tech.withSourceHandlers.call(MyTech);
+ *
+ */
+Tech.withSourceHandlers = function (_Tech) {
+
+  /**
+   * Register a source handler
+   * Source handlers are scripts for handling specific formats.
+   * The source handler pattern is used for adaptive formats (HLS, DASH) that
+   * manually load video data and feed it into a Source Buffer (Media Source Extensions)
+   * @param  {Function} handler  The source handler
+   * @param  {Boolean}  first    Register it before any existing handlers
+   */
+  _Tech.registerSourceHandler = function (handler, index) {
+    var handlers = _Tech.sourceHandlers;
+
+    if (!handlers) {
+      handlers = _Tech.sourceHandlers = [];
+    }
+
+    if (index === undefined) {
+      // add to the end of the list
+      index = handlers.length;
+    }
+
+    handlers.splice(index, 0, handler);
+  };
+
+  /**
+   * Check if the tech can support the given type
+   * @param  {String} type    The mimetype to check
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  _Tech.canPlayType = function (type) {
+    var handlers = _Tech.sourceHandlers || [];
+    var can = void 0;
+
+    for (var i = 0; i < handlers.length; i++) {
+      can = handlers[i].canPlayType(type);
+
+      if (can) {
+        return can;
+      }
+    }
+
+    return '';
+  };
+
+  /**
+   * Return the first source handler that supports the source
+   * TODO: Answer question: should 'probably' be prioritized over 'maybe'
+   * @param  {Object} source  The source object
+   * @param  {Object} options The options passed to the tech
+   * @returns {Object}       The first source handler that supports the source
+   * @returns {null}         Null if no source handler is found
+   */
+  _Tech.selectSourceHandler = function (source, options) {
+    var handlers = _Tech.sourceHandlers || [];
+    var can = void 0;
+
+    for (var i = 0; i < handlers.length; i++) {
+      can = handlers[i].canHandleSource(source, options);
+
+      if (can) {
+        return handlers[i];
+      }
+    }
+
+    return null;
+  };
+
+  /**
+   * Check if the tech can support the given source
+   * @param  {Object} srcObj  The source object
+   * @param  {Object} options The options passed to the tech
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  _Tech.canPlaySource = function (srcObj, options) {
+    var sh = _Tech.selectSourceHandler(srcObj, options);
+
+    if (sh) {
+      return sh.canHandleSource(srcObj, options);
+    }
+
+    return '';
+  };
+
+  /**
+   * When using a source handler, prefer its implementation of
+   * any function normally provided by the tech.
+   */
+  var deferrable = ['seekable', 'duration'];
+
+  deferrable.forEach(function (fnName) {
+    var originalFn = this[fnName];
+
+    if (typeof originalFn !== 'function') {
+      return;
+    }
+
+    this[fnName] = function () {
+      if (this.sourceHandler_ && this.sourceHandler_[fnName]) {
+        return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments);
+      }
+      return originalFn.apply(this, arguments);
+    };
+  }, _Tech.prototype);
+
+  /**
+   * Create a function for setting the source using a source object
+   * and source handlers.
+   * Should never be called unless a source handler was found.
+   * @param {Object} source  A source object with src and type keys
+   * @return {Tech} self
+   */
+  _Tech.prototype.setSource = function (source) {
+    var sh = _Tech.selectSourceHandler(source, this.options_);
+
+    if (!sh) {
+      // Fall back to a native source hander when unsupported sources are
+      // deliberately set
+      if (_Tech.nativeSourceHandler) {
+        sh = _Tech.nativeSourceHandler;
+      } else {
+        _log2['default'].error('No source hander found for the current source.');
+      }
+    }
+
+    // Dispose any existing source handler
+    this.disposeSourceHandler();
+    this.off('dispose', this.disposeSourceHandler);
+
+    // if we have a source and get another one
+    // then we are loading something new
+    // than clear all of our current tracks
+    if (this.currentSource_) {
+      this.clearTracks(['audio', 'video']);
+
+      this.currentSource_ = null;
+    }
+
+    if (sh !== _Tech.nativeSourceHandler) {
+
+      this.currentSource_ = source;
+
+      // Catch if someone replaced the src without calling setSource.
+      // If they do, set currentSource_ to null and dispose our source handler.
+      this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);
+      this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+      this.one(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);
+    }
+
+    this.sourceHandler_ = sh.handleSource(source, this, this.options_);
+    this.on('dispose', this.disposeSourceHandler);
+
+    return this;
+  };
+
+  // On the first loadstart after setSource
+  _Tech.prototype.firstLoadStartListener_ = function () {
+    this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+  };
+
+  // On successive loadstarts when setSource has not been called again
+  _Tech.prototype.successiveLoadStartListener_ = function () {
+    this.currentSource_ = null;
+    this.disposeSourceHandler();
+    this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+  };
+
+  /*
+   * Clean up any existing source handler
+   */
+  _Tech.prototype.disposeSourceHandler = function () {
+    if (this.sourceHandler_ && this.sourceHandler_.dispose) {
+      this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);
+      this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+      this.sourceHandler_.dispose();
+      this.sourceHandler_ = null;
+    }
+  };
+};
+
+_component2['default'].registerComponent('Tech', Tech);
+// Old name for Tech
+_component2['default'].registerComponent('MediaTechController', Tech);
+Tech.registerTech('Tech', Tech);
+exports['default'] = Tech;
+
+},{"../component":5,"../media-error.js":46,"../tracks/audio-track-list":63,"../tracks/html-track-element":66,"../tracks/html-track-element-list":65,"../tracks/text-track":72,"../tracks/text-track-list":70,"../tracks/video-track-list":76,"../utils/buffer.js":79,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/time-ranges.js":88,"global/document":92,"global/window":93}],63:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackList = _dereq_('./track-list');
+
+var _trackList2 = _interopRequireDefault(_trackList);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file audio-track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * anywhere we call this function we diverge from the spec
+ * as we only support one enabled audiotrack at a time
+ *
+ * @param {Array|AudioTrackList} list list to work on
+ * @param {AudioTrack} track the track to skip
+ */
+var disableOthers = function disableOthers(list, track) {
+  for (var i = 0; i < list.length; i++) {
+    if (track.id === list[i].id) {
+      continue;
+    }
+    // another audio track is enabled, disable it
+    list[i].enabled = false;
+  }
+};
+
+/**
+ * A list of possible audio tracks. All functionality is in the
+ * base class Tracklist and the spec for AudioTrackList is located at:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist
+ *
+ * interface AudioTrackList : EventTarget {
+ *   readonly attribute unsigned long length;
+ *   getter AudioTrack (unsigned long index);
+ *   AudioTrack? getTrackById(DOMString id);
+ *
+ *   attribute EventHandler onchange;
+ *   attribute EventHandler onaddtrack;
+ *   attribute EventHandler onremovetrack;
+ * };
+ *
+ * @param {AudioTrack[]} tracks a list of audio tracks to instantiate the list with
+ * @extends TrackList
+ * @class AudioTrackList
+ */
+
+var AudioTrackList = function (_TrackList) {
+  _inherits(AudioTrackList, _TrackList);
+
+  function AudioTrackList() {
+    var _this, _ret;
+
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, AudioTrackList);
+
+    var list = void 0;
+
+    // make sure only 1 track is enabled
+    // sorted from last index to first index
+    for (var i = tracks.length - 1; i >= 0; i--) {
+      if (tracks[i].enabled) {
+        disableOthers(tracks, tracks[i]);
+        break;
+      }
+    }
+
+    // IE8 forces us to implement inheritance ourselves
+    // as it does not support Object.defineProperty properly
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+      for (var prop in _trackList2['default'].prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = _trackList2['default'].prototype[prop];
+        }
+      }
+      for (var _prop in AudioTrackList.prototype) {
+        if (_prop !== 'constructor') {
+          list[_prop] = AudioTrackList.prototype[_prop];
+        }
+      }
+    }
+
+    list = (_this = _possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);
+    list.changing_ = false;
+
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  AudioTrackList.prototype.addTrack_ = function addTrack_(track) {
+    var _this2 = this;
+
+    if (track.enabled) {
+      disableOthers(this, track);
+    }
+
+    _TrackList.prototype.addTrack_.call(this, track);
+    // native tracks don't have this
+    if (!track.addEventListener) {
+      return;
+    }
+
+    track.addEventListener('enabledchange', function () {
+      // when we are disabling other tracks (since we don't support
+      // more than one track at a time) we will set changing_
+      // to true so that we don't trigger additional change events
+      if (_this2.changing_) {
+        return;
+      }
+      _this2.changing_ = true;
+      disableOthers(_this2, track);
+      _this2.changing_ = false;
+      _this2.trigger('change');
+    });
+  };
+
+  AudioTrackList.prototype.addTrack = function addTrack(track) {
+    this.addTrack_(track);
+  };
+
+  AudioTrackList.prototype.removeTrack = function removeTrack(track) {
+    _TrackList.prototype.removeTrack_.call(this, track);
+  };
+
+  return AudioTrackList;
+}(_trackList2['default']);
+
+exports['default'] = AudioTrackList;
+
+},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],64:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackEnums = _dereq_('./track-enums');
+
+var _track = _dereq_('./track');
+
+var _track2 = _interopRequireDefault(_track);
+
+var _mergeOptions = _dereq_('../utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * A single audio text track as defined in:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack
+ *
+ * interface AudioTrack {
+ *   readonly attribute DOMString id;
+ *   readonly attribute DOMString kind;
+ *   readonly attribute DOMString label;
+ *   readonly attribute DOMString language;
+ *   attribute boolean enabled;
+ * };
+ *
+ * @param {Object=} options Object of option names and values
+ * @class AudioTrack
+ */
+var AudioTrack = function (_Track) {
+  _inherits(AudioTrack, _Track);
+
+  function AudioTrack() {
+    var _this, _ret;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, AudioTrack);
+
+    var settings = (0, _mergeOptions2['default'])(options, {
+      kind: _trackEnums.AudioTrackKind[options.kind] || ''
+    });
+    // on IE8 this will be a document element
+    // for every other browser this will be a normal object
+    var track = (_this = _possibleConstructorReturn(this, _Track.call(this, settings)), _this);
+    var enabled = false;
+
+    if (browser.IS_IE8) {
+      for (var prop in AudioTrack.prototype) {
+        if (prop !== 'constructor') {
+          track[prop] = AudioTrack.prototype[prop];
+        }
+      }
+    }
+
+    Object.defineProperty(track, 'enabled', {
+      get: function get() {
+        return enabled;
+      },
+      set: function set(newEnabled) {
+        // an invalid or unchanged value
+        if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {
+          return;
+        }
+        enabled = newEnabled;
+        this.trigger('enabledchange');
+      }
+    });
+
+    // if the user sets this track to selected then
+    // set selected to that true value otherwise
+    // we keep it false
+    if (settings.enabled) {
+      track.enabled = settings.enabled;
+    }
+    track.loaded_ = true;
+
+    return _ret = track, _possibleConstructorReturn(_this, _ret);
+  }
+
+  return AudioTrack;
+}(_track2['default']);
+
+exports['default'] = AudioTrack;
+
+},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],65:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * @file html-track-element-list.js
+                                                                                                                                                           */
+
+var HtmlTrackElementList = function () {
+  function HtmlTrackElementList() {
+    var trackElements = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, HtmlTrackElementList);
+
+    var list = this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+
+      for (var prop in HtmlTrackElementList.prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = HtmlTrackElementList.prototype[prop];
+        }
+      }
+    }
+
+    list.trackElements_ = [];
+
+    Object.defineProperty(list, 'length', {
+      get: function get() {
+        return this.trackElements_.length;
+      }
+    });
+
+    for (var i = 0, length = trackElements.length; i < length; i++) {
+      list.addTrackElement_(trackElements[i]);
+    }
+
+    if (browser.IS_IE8) {
+      return list;
+    }
+  }
+
+  HtmlTrackElementList.prototype.addTrackElement_ = function addTrackElement_(trackElement) {
+    this.trackElements_.push(trackElement);
+  };
+
+  HtmlTrackElementList.prototype.getTrackElementByTrack_ = function getTrackElementByTrack_(track) {
+    var trackElement_ = void 0;
+
+    for (var i = 0, length = this.trackElements_.length; i < length; i++) {
+      if (track === this.trackElements_[i].track) {
+        trackElement_ = this.trackElements_[i];
+
+        break;
+      }
+    }
+
+    return trackElement_;
+  };
+
+  HtmlTrackElementList.prototype.removeTrackElement_ = function removeTrackElement_(trackElement) {
+    for (var i = 0, length = this.trackElements_.length; i < length; i++) {
+      if (trackElement === this.trackElements_[i]) {
+        this.trackElements_.splice(i, 1);
+
+        break;
+      }
+    }
+  };
+
+  return HtmlTrackElementList;
+}();
+
+exports['default'] = HtmlTrackElementList;
+
+},{"../utils/browser.js":78,"global/document":92}],66:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _eventTarget = _dereq_('../event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+var _textTrack = _dereq_('../tracks/text-track');
+
+var _textTrack2 = _interopRequireDefault(_textTrack);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file html-track-element.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var NONE = 0;
+var LOADING = 1;
+var LOADED = 2;
+var ERROR = 3;
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement
+ *
+ * interface HTMLTrackElement : HTMLElement {
+ *   attribute DOMString kind;
+ *   attribute DOMString src;
+ *   attribute DOMString srclang;
+ *   attribute DOMString label;
+ *   attribute boolean default;
+ *
+ *   const unsigned short NONE = 0;
+ *   const unsigned short LOADING = 1;
+ *   const unsigned short LOADED = 2;
+ *   const unsigned short ERROR = 3;
+ *   readonly attribute unsigned short readyState;
+ *
+ *   readonly attribute TextTrack track;
+ * };
+ *
+ * @param {Object} options TextTrack configuration
+ * @class HTMLTrackElement
+ */
+
+var HTMLTrackElement = function (_EventTarget) {
+  _inherits(HTMLTrackElement, _EventTarget);
+
+  function HTMLTrackElement() {
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, HTMLTrackElement);
+
+    var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
+
+    var readyState = void 0;
+    var trackElement = _this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      trackElement = _document2['default'].createElement('custom');
+
+      for (var prop in HTMLTrackElement.prototype) {
+        if (prop !== 'constructor') {
+          trackElement[prop] = HTMLTrackElement.prototype[prop];
+        }
+      }
+    }
+
+    var track = new _textTrack2['default'](options);
+
+    trackElement.kind = track.kind;
+    trackElement.src = track.src;
+    trackElement.srclang = track.language;
+    trackElement.label = track.label;
+    trackElement['default'] = track['default'];
+
+    Object.defineProperty(trackElement, 'readyState', {
+      get: function get() {
+        return readyState;
+      }
+    });
+
+    Object.defineProperty(trackElement, 'track', {
+      get: function get() {
+        return track;
+      }
+    });
+
+    readyState = NONE;
+
+    track.addEventListener('loadeddata', function () {
+      readyState = LOADED;
+
+      trackElement.trigger({
+        type: 'load',
+        target: trackElement
+      });
+    });
+
+    if (browser.IS_IE8) {
+      var _ret;
+
+      return _ret = trackElement, _possibleConstructorReturn(_this, _ret);
+    }
+    return _this;
+  }
+
+  return HTMLTrackElement;
+}(_eventTarget2['default']);
+
+HTMLTrackElement.prototype.allowedEvents_ = {
+  load: 'load'
+};
+
+HTMLTrackElement.NONE = NONE;
+HTMLTrackElement.LOADING = LOADING;
+HTMLTrackElement.LOADED = LOADED;
+HTMLTrackElement.ERROR = ERROR;
+
+exports['default'] = HTMLTrackElement;
+
+},{"../event-target":42,"../tracks/text-track":72,"../utils/browser.js":78,"global/document":92}],67:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * @file text-track-cue-list.js
+                                                                                                                                                           */
+
+
+/**
+ * A List of text track cues as defined in:
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist
+ *
+ * interface TextTrackCueList {
+ *   readonly attribute unsigned long length;
+ *   getter TextTrackCue (unsigned long index);
+ *   TextTrackCue? getCueById(DOMString id);
+ * };
+ *
+ * @param {Array} cues A list of cues to be initialized with
+ * @class TextTrackCueList
+ */
+
+var TextTrackCueList = function () {
+  function TextTrackCueList(cues) {
+    _classCallCheck(this, TextTrackCueList);
+
+    var list = this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+
+      for (var prop in TextTrackCueList.prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = TextTrackCueList.prototype[prop];
+        }
+      }
+    }
+
+    TextTrackCueList.prototype.setCues_.call(list, cues);
+
+    Object.defineProperty(list, 'length', {
+      get: function get() {
+        return this.length_;
+      }
+    });
+
+    if (browser.IS_IE8) {
+      return list;
+    }
+  }
+
+  /**
+   * A setter for cues in this list
+   *
+   * @param {Array} cues an array of cues
+   * @method setCues_
+   * @private
+   */
+
+
+  TextTrackCueList.prototype.setCues_ = function setCues_(cues) {
+    var oldLength = this.length || 0;
+    var i = 0;
+    var l = cues.length;
+
+    this.cues_ = cues;
+    this.length_ = cues.length;
+
+    var defineProp = function defineProp(index) {
+      if (!('' + index in this)) {
+        Object.defineProperty(this, '' + index, {
+          get: function get() {
+            return this.cues_[index];
+          }
+        });
+      }
+    };
+
+    if (oldLength < l) {
+      i = oldLength;
+
+      for (; i < l; i++) {
+        defineProp.call(this, i);
+      }
+    }
+  };
+
+  /**
+   * Get a cue that is currently in the Cue list by id
+   *
+   * @param {String} id
+   * @method getCueById
+   * @return {Object} a single cue
+   */
+
+
+  TextTrackCueList.prototype.getCueById = function getCueById(id) {
+    var result = null;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      var cue = this[i];
+
+      if (cue.id === id) {
+        result = cue;
+        break;
+      }
+    }
+
+    return result;
+  };
+
+  return TextTrackCueList;
+}();
+
+exports['default'] = TextTrackCueList;
+
+},{"../utils/browser.js":78,"global/document":92}],68:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+var darkGray = '#222';
+var lightGray = '#ccc';
+var fontMap = {
+  monospace: 'monospace',
+  sansSerif: 'sans-serif',
+  serif: 'serif',
+  monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace',
+  monospaceSerif: '"Courier New", monospace',
+  proportionalSansSerif: 'sans-serif',
+  proportionalSerif: 'serif',
+  casual: '"Comic Sans MS", Impact, fantasy',
+  script: '"Monotype Corsiva", cursive',
+  smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif'
+};
+
+/**
+ * Add cue HTML to display
+ *
+ * @param {Number} color Hex number for color, like #f0e
+ * @param {Number} opacity Value for opacity,0.0 - 1.0
+ * @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'
+ * @method constructColor
+ */
+function constructColor(color, opacity) {
+  return 'rgba(' +
+  // color looks like "#f0e"
+  parseInt(color[1] + color[1], 16) + ',' + parseInt(color[2] + color[2], 16) + ',' + parseInt(color[3] + color[3], 16) + ',' + opacity + ')';
+}
+
+/**
+ * Try to update style
+ * Some style changes will throw an error, particularly in IE8. Those should be noops.
+ *
+ * @param {Element} el The element to be styles
+ * @param {CSSProperty} style The CSS property to be styled
+ * @param {CSSStyle} rule The actual style to be applied to the property
+ * @method tryUpdateStyle
+ */
+function tryUpdateStyle(el, style, rule) {
+  try {
+    el.style[style] = rule;
+  } catch (e) {
+
+    // Satisfies linter.
+    return;
+  }
+}
+
+/**
+ * The component for displaying text track cues
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends Component
+ * @class TextTrackDisplay
+ */
+
+var TextTrackDisplay = function (_Component) {
+  _inherits(TextTrackDisplay, _Component);
+
+  function TextTrackDisplay(player, options, ready) {
+    _classCallCheck(this, TextTrackDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options, ready));
+
+    player.on('loadstart', Fn.bind(_this, _this.toggleDisplay));
+    player.on('texttrackchange', Fn.bind(_this, _this.updateDisplay));
+
+    // This used to be called during player init, but was causing an error
+    // if a track should show by default and the display hadn't loaded yet.
+    // Should probably be moved to an external track loader when we support
+    // tracks that don't need a display.
+    player.ready(Fn.bind(_this, function () {
+      if (player.tech_ && player.tech_.featuresNativeTextTracks) {
+        this.hide();
+        return;
+      }
+
+      player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));
+
+      var tracks = this.options_.playerOptions.tracks || [];
+
+      for (var i = 0; i < tracks.length; i++) {
+        this.player_.addRemoteTextTrack(tracks[i]);
+      }
+
+      var modes = { captions: 1, subtitles: 1 };
+      var trackList = this.player_.textTracks();
+      var firstDesc = void 0;
+      var firstCaptions = void 0;
+
+      if (trackList) {
+        for (var _i = 0; _i < trackList.length; _i++) {
+          var track = trackList[_i];
+
+          if (track['default']) {
+            if (track.kind === 'descriptions' && !firstDesc) {
+              firstDesc = track;
+            } else if (track.kind in modes && !firstCaptions) {
+              firstCaptions = track;
+            }
+          }
+        }
+
+        // We want to show the first default track but captions and subtitles
+        // take precedence over descriptions.
+        // So, display the first default captions or subtitles track
+        // and otherwise the first default descriptions track.
+        if (firstCaptions) {
+          firstCaptions.mode = 'showing';
+        } else if (firstDesc) {
+          firstDesc.mode = 'showing';
+        }
+      }
+    }));
+    return _this;
+  }
+
+  /**
+   * Toggle display texttracks
+   *
+   * @method toggleDisplay
+   */
+
+
+  TextTrackDisplay.prototype.toggleDisplay = function toggleDisplay() {
+    if (this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks) {
+      this.hide();
+    } else {
+      this.show();
+    }
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  TextTrackDisplay.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-text-track-display'
+    }, {
+      'aria-live': 'assertive',
+      'aria-atomic': 'true'
+    });
+  };
+
+  /**
+   * Clear display texttracks
+   *
+   * @method clearDisplay
+   */
+
+
+  TextTrackDisplay.prototype.clearDisplay = function clearDisplay() {
+    if (typeof _window2['default'].WebVTT === 'function') {
+      _window2['default'].WebVTT.processCues(_window2['default'], [], this.el_);
+    }
+  };
+
+  /**
+   * Update display texttracks
+   *
+   * @method updateDisplay
+   */
+
+
+  TextTrackDisplay.prototype.updateDisplay = function updateDisplay() {
+    var tracks = this.player_.textTracks();
+
+    this.clearDisplay();
+
+    if (!tracks) {
+      return;
+    }
+
+    // Track display prioritization model: if multiple tracks are 'showing',
+    //  display the first 'subtitles' or 'captions' track which is 'showing',
+    //  otherwise display the first 'descriptions' track which is 'showing'
+
+    var descriptionsTrack = null;
+    var captionsSubtitlesTrack = null;
+
+    var i = tracks.length;
+
+    while (i--) {
+      var track = tracks[i];
+
+      if (track.mode === 'showing') {
+        if (track.kind === 'descriptions') {
+          descriptionsTrack = track;
+        } else {
+          captionsSubtitlesTrack = track;
+        }
+      }
+    }
+
+    if (captionsSubtitlesTrack) {
+      this.updateForTrack(captionsSubtitlesTrack);
+    } else if (descriptionsTrack) {
+      this.updateForTrack(descriptionsTrack);
+    }
+  };
+
+  /**
+   * Add texttrack to texttrack list
+   *
+   * @param {TextTrackObject} track Texttrack object to be added to list
+   * @method updateForTrack
+   */
+
+
+  TextTrackDisplay.prototype.updateForTrack = function updateForTrack(track) {
+    if (typeof _window2['default'].WebVTT !== 'function' || !track.activeCues) {
+      return;
+    }
+
+    var overrides = this.player_.textTrackSettings.getValues();
+    var cues = [];
+
+    for (var _i2 = 0; _i2 < track.activeCues.length; _i2++) {
+      cues.push(track.activeCues[_i2]);
+    }
+
+    _window2['default'].WebVTT.processCues(_window2['default'], cues, this.el_);
+
+    var i = cues.length;
+
+    while (i--) {
+      var cue = cues[i];
+
+      if (!cue) {
+        continue;
+      }
+
+      var cueDiv = cue.displayState;
+
+      if (overrides.color) {
+        cueDiv.firstChild.style.color = overrides.color;
+      }
+      if (overrides.textOpacity) {
+        tryUpdateStyle(cueDiv.firstChild, 'color', constructColor(overrides.color || '#fff', overrides.textOpacity));
+      }
+      if (overrides.backgroundColor) {
+        cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;
+      }
+      if (overrides.backgroundOpacity) {
+        tryUpdateStyle(cueDiv.firstChild, 'backgroundColor', constructColor(overrides.backgroundColor || '#000', overrides.backgroundOpacity));
+      }
+      if (overrides.windowColor) {
+        if (overrides.windowOpacity) {
+          tryUpdateStyle(cueDiv, 'backgroundColor', constructColor(overrides.windowColor, overrides.windowOpacity));
+        } else {
+          cueDiv.style.backgroundColor = overrides.windowColor;
+        }
+      }
+      if (overrides.edgeStyle) {
+        if (overrides.edgeStyle === 'dropshadow') {
+          cueDiv.firstChild.style.textShadow = '2px 2px 3px ' + darkGray + ', 2px 2px 4px ' + darkGray + ', 2px 2px 5px ' + darkGray;
+        } else if (overrides.edgeStyle === 'raised') {
+          cueDiv.firstChild.style.textShadow = '1px 1px ' + darkGray + ', 2px 2px ' + darkGray + ', 3px 3px ' + darkGray;
+        } else if (overrides.edgeStyle === 'depressed') {
+          cueDiv.firstChild.style.textShadow = '1px 1px ' + lightGray + ', 0 1px ' + lightGray + ', -1px -1px ' + darkGray + ', 0 -1px ' + darkGray;
+        } else if (overrides.edgeStyle === 'uniform') {
+          cueDiv.firstChild.style.textShadow = '0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray;
+        }
+      }
+      if (overrides.fontPercent && overrides.fontPercent !== 1) {
+        var fontSize = _window2['default'].parseFloat(cueDiv.style.fontSize);
+
+        cueDiv.style.fontSize = fontSize * overrides.fontPercent + 'px';
+        cueDiv.style.height = 'auto';
+        cueDiv.style.top = 'auto';
+        cueDiv.style.bottom = '2px';
+      }
+      if (overrides.fontFamily && overrides.fontFamily !== 'default') {
+        if (overrides.fontFamily === 'small-caps') {
+          cueDiv.firstChild.style.fontVariant = 'small-caps';
+        } else {
+          cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];
+        }
+      }
+    }
+  };
+
+  return TextTrackDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TextTrackDisplay', TextTrackDisplay);
+exports['default'] = TextTrackDisplay;
+
+},{"../component":5,"../utils/fn.js":82,"global/window":93}],69:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * Utilities for capturing text track state and re-creating tracks
+ * based on a capture.
+ *
+ * @file text-track-list-converter.js
+ */
+
+/**
+ * Examine a single text track and return a JSON-compatible javascript
+ * object that represents the text track's state.
+ * @param track {TextTrackObject} the text track to query
+ * @return {Object} a serializable javascript representation of the
+ * @private
+ */
+var trackToJson_ = function trackToJson_(track) {
+  var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) {
+
+    if (track[prop]) {
+      acc[prop] = track[prop];
+    }
+
+    return acc;
+  }, {
+    cues: track.cues && Array.prototype.map.call(track.cues, function (cue) {
+      return {
+        startTime: cue.startTime,
+        endTime: cue.endTime,
+        text: cue.text,
+        id: cue.id
+      };
+    })
+  });
+
+  return ret;
+};
+
+/**
+ * Examine a tech and return a JSON-compatible javascript array that
+ * represents the state of all text tracks currently configured. The
+ * return array is compatible with `jsonToTextTracks`.
+ * @param tech {tech} the tech object to query
+ * @return {Array} a serializable javascript representation of the
+ * @function textTracksToJson
+ */
+var textTracksToJson = function textTracksToJson(tech) {
+
+  var trackEls = tech.$$('track');
+
+  var trackObjs = Array.prototype.map.call(trackEls, function (t) {
+    return t.track;
+  });
+  var tracks = Array.prototype.map.call(trackEls, function (trackEl) {
+    var json = trackToJson_(trackEl.track);
+
+    if (trackEl.src) {
+      json.src = trackEl.src;
+    }
+    return json;
+  });
+
+  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {
+    return trackObjs.indexOf(track) === -1;
+  }).map(trackToJson_));
+};
+
+/**
+ * Creates a set of remote text tracks on a tech based on an array of
+ * javascript text track representations.
+ * @param json {Array} an array of text track representation objects,
+ * like those that would be produced by `textTracksToJson`
+ * @param tech {tech} the tech to create text tracks on
+ * @function jsonToTextTracks
+ */
+var jsonToTextTracks = function jsonToTextTracks(json, tech) {
+  json.forEach(function (track) {
+    var addedTrack = tech.addRemoteTextTrack(track).track;
+
+    if (!track.src && track.cues) {
+      track.cues.forEach(function (cue) {
+        return addedTrack.addCue(cue);
+      });
+    }
+  });
+
+  return tech.textTracks();
+};
+
+exports['default'] = { textTracksToJson: textTracksToJson, jsonToTextTracks: jsonToTextTracks, trackToJson_: trackToJson_ };
+
+},{}],70:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackList = _dereq_('./track-list');
+
+var _trackList2 = _interopRequireDefault(_trackList);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A list of possible text tracks. All functionality is in the
+ * base class TrackList. The spec for TextTrackList is located at:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist
+ *
+ * interface TextTrackList : EventTarget {
+ *   readonly attribute unsigned long length;
+ *   getter TextTrack (unsigned long index);
+ *   TextTrack? getTrackById(DOMString id);
+ *
+ *   attribute EventHandler onchange;
+ *   attribute EventHandler onaddtrack;
+ *   attribute EventHandler onremovetrack;
+ * };
+ *
+ * @param {TextTrack[]} tracks A list of tracks to initialize the list with
+ * @extends TrackList
+ * @class TextTrackList
+ */
+var TextTrackList = function (_TrackList) {
+  _inherits(TextTrackList, _TrackList);
+
+  function TextTrackList() {
+    var _this, _ret;
+
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, TextTrackList);
+
+    var list = void 0;
+
+    // IE8 forces us to implement inheritance ourselves
+    // as it does not support Object.defineProperty properly
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+      for (var prop in _trackList2['default'].prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = _trackList2['default'].prototype[prop];
+        }
+      }
+      for (var _prop in TextTrackList.prototype) {
+        if (_prop !== 'constructor') {
+          list[_prop] = TextTrackList.prototype[_prop];
+        }
+      }
+    }
+
+    list = (_this = _possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  TextTrackList.prototype.addTrack_ = function addTrack_(track) {
+    _TrackList.prototype.addTrack_.call(this, track);
+    track.addEventListener('modechange', Fn.bind(this, function () {
+      this.trigger('change');
+    }));
+  };
+
+  /**
+   * Remove TextTrack from TextTrackList
+   * NOTE: Be mindful of what is passed in as it may be a HTMLTrackElement
+   *
+   * @param {TextTrack} rtrack
+   * @method removeTrack_
+   * @private
+   */
+
+
+  TextTrackList.prototype.removeTrack_ = function removeTrack_(rtrack) {
+    var track = void 0;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      if (this[i] === rtrack) {
+        track = this[i];
+        if (track.off) {
+          track.off();
+        }
+
+        this.tracks_.splice(i, 1);
+
+        break;
+      }
+    }
+
+    if (!track) {
+      return;
+    }
+
+    this.trigger({
+      track: track,
+      type: 'removetrack'
+    });
+  };
+
+  /**
+   * Get a TextTrack from TextTrackList by a tracks id
+   *
+   * @param {String} id - the id of the track to get
+   * @method getTrackById
+   * @return {TextTrack}
+   * @private
+   */
+
+
+  TextTrackList.prototype.getTrackById = function getTrackById(id) {
+    var result = null;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      var track = this[i];
+
+      if (track.id === id) {
+        result = track;
+        break;
+      }
+    }
+
+    return result;
+  };
+
+  return TextTrackList;
+}(_trackList2['default']);
+
+exports['default'] = TextTrackList;
+
+},{"../utils/browser.js":78,"../utils/fn.js":82,"./track-list":74,"global/document":92}],71:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _events = _dereq_('../utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _tuple = _dereq_('safe-json-parse/tuple');
+
+var _tuple2 = _interopRequireDefault(_tuple);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-settings.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+function captionOptionsMenuTemplate(uniqueId, dialogLabelId, dialogDescriptionId) {
+  var template = '\n    <div role="document">\n      <div role="heading" aria-level="1" id="' + dialogLabelId + '" class="vjs-control-text">Captions Settings Dialog</div>\n      <div id="' + dialogDescriptionId + '" class="vjs-control-text">Beginning of dialog window. Escape will cancel and close the window.</div>\n      <div class="vjs-tracksettings">\n        <div class="vjs-tracksettings-colors">\n          <fieldset class="vjs-fg-color vjs-tracksetting">\n            <legend>Text</legend>\n            <label class="vjs-label" for="captions-foreground-color-' + uniqueId + '">Color</label>\n            <select id="captions-foreground-color-' + uniqueId + '">\n              <option value="#FFF" selected>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              <label class="vjs-label" for="captions-foreground-opacity-' + uniqueId + '">Transparency</label>\n              <select id="captions-foreground-opacity-' + uniqueId + '">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="vjs-bg-color vjs-tracksetting">\n            <legend>Background</legend>\n            <label class="vjs-label" for="captions-background-color-' + uniqueId + '">Color</label>\n            <select id="captions-background-color-' + uniqueId + '">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-background-opacity-' + uniqueId + '">Transparency</label>\n              <select id="captions-background-opacity-' + uniqueId + '">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="0">Transparent</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="window-color vjs-tracksetting">\n            <legend>Window</legend>\n            <label class="vjs-label" for="captions-window-color-' + uniqueId + '">Color</label>\n            <select id="captions-window-color-' + uniqueId + '">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-window-opacity-' + uniqueId + '">Transparency</label>\n              <select id="captions-window-opacity-' + uniqueId + '">\n                <option value="0" selected>Transparent</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="1">Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n        </div> <!-- vjs-tracksettings-colors -->\n        <div class="vjs-tracksettings-font">\n          <div class="vjs-font-percent vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-size-' + uniqueId + '">Font Size</label>\n            <select id="captions-font-size-' + uniqueId + '">\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>\n          <div class="vjs-edge-style vjs-tracksetting">\n            <label class="vjs-label" for="captions-edge-style-' + uniqueId + '">Text Edge Style</label>\n            <select id="captions-edge-style-' + uniqueId + '">\n              <option value="none" selected>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>\n          <div class="vjs-font-family vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-family-' + uniqueId + '">Font Family</label>\n            <select id="captions-font-family-' + uniqueId + '">\n              <option value="proportionalSansSerif" selected>Proportional Sans-Serif</option>\n              <option value="monospaceSansSerif">Monospace Sans-Serif</option>\n              <option value="proportionalSerif">Proportional Serif</option>\n              <option value="monospaceSerif">Monospace 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>\n        </div> <!-- vjs-tracksettings-font -->\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      </div> <!-- vjs-tracksettings -->\n    </div> <!--  role="document" -->\n  ';
+
+  return template;
+}
+
+function getSelectedOptionValue(target) {
+  var selectedOption = void 0;
+
+  // not all browsers support selectedOptions, so, fallback to options
+  if (target.selectedOptions) {
+    selectedOption = target.selectedOptions[0];
+  } else if (target.options) {
+    selectedOption = target.options[target.options.selectedIndex];
+  }
+
+  return selectedOption.value;
+}
+
+function setSelectedOption(target, value) {
+  if (!value) {
+    return;
+  }
+
+  var i = void 0;
+
+  for (i = 0; i < target.options.length; i++) {
+    var option = target.options[i];
+
+    if (option.value === value) {
+      break;
+    }
+  }
+
+  target.selectedIndex = i;
+}
+
+/**
+ * Manipulate settings of texttracks
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends Component
+ * @class TextTrackSettings
+ */
+
+var TextTrackSettings = function (_Component) {
+  _inherits(TextTrackSettings, _Component);
+
+  function TextTrackSettings(player, options) {
+    _classCallCheck(this, TextTrackSettings);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.hide();
+
+    // Grab `persistTextTrackSettings` from the player options if not passed in child options
+    if (options.persistTextTrackSettings === undefined) {
+      _this.options_.persistTextTrackSettings = _this.options_.playerOptions.persistTextTrackSettings;
+    }
+
+    Events.on(_this.$('.vjs-done-button'), 'click', Fn.bind(_this, function () {
+      this.saveSettings();
+      this.hide();
+    }));
+
+    Events.on(_this.$('.vjs-default-button'), 'click', Fn.bind(_this, function () {
+      this.$('.vjs-fg-color > select').selectedIndex = 0;
+      this.$('.vjs-bg-color > select').selectedIndex = 0;
+      this.$('.window-color > select').selectedIndex = 0;
+      this.$('.vjs-text-opacity > select').selectedIndex = 0;
+      this.$('.vjs-bg-opacity > select').selectedIndex = 0;
+      this.$('.vjs-window-opacity > select').selectedIndex = 0;
+      this.$('.vjs-edge-style select').selectedIndex = 0;
+      this.$('.vjs-font-family select').selectedIndex = 0;
+      this.$('.vjs-font-percent select').selectedIndex = 2;
+      this.updateDisplay();
+    }));
+
+    Events.on(_this.$('.vjs-fg-color > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-bg-color > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.window-color > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-text-opacity > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-bg-opacity > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-window-opacity > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-font-percent select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-edge-style select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-font-family select'), 'change', Fn.bind(_this, _this.updateDisplay));
+
+    if (_this.options_.persistTextTrackSettings) {
+      _this.restoreSettings();
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  TextTrackSettings.prototype.createEl = function createEl() {
+    var uniqueId = this.id_;
+    var dialogLabelId = 'TTsettingsDialogLabel-' + uniqueId;
+    var dialogDescriptionId = 'TTsettingsDialogDescription-' + uniqueId;
+
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-caption-settings vjs-modal-overlay',
+      innerHTML: captionOptionsMenuTemplate(uniqueId, dialogLabelId, dialogDescriptionId),
+      tabIndex: -1
+    }, {
+      'role': 'dialog',
+      'aria-labelledby': dialogLabelId,
+      'aria-describedby': dialogDescriptionId
+    });
+  };
+
+  /**
+   * Get texttrack settings
+   * Settings are
+   * .vjs-edge-style
+   * .vjs-font-family
+   * .vjs-fg-color
+   * .vjs-text-opacity
+   * .vjs-bg-color
+   * .vjs-bg-opacity
+   * .window-color
+   * .vjs-window-opacity
+   *
+   * @return {Object}
+   * @method getValues
+   */
+
+
+  TextTrackSettings.prototype.getValues = function getValues() {
+    var textEdge = getSelectedOptionValue(this.$('.vjs-edge-style select'));
+    var fontFamily = getSelectedOptionValue(this.$('.vjs-font-family select'));
+    var fgColor = getSelectedOptionValue(this.$('.vjs-fg-color > select'));
+    var textOpacity = getSelectedOptionValue(this.$('.vjs-text-opacity > select'));
+    var bgColor = getSelectedOptionValue(this.$('.vjs-bg-color > select'));
+    var bgOpacity = getSelectedOptionValue(this.$('.vjs-bg-opacity > select'));
+    var windowColor = getSelectedOptionValue(this.$('.window-color > select'));
+    var windowOpacity = getSelectedOptionValue(this.$('.vjs-window-opacity > select'));
+    var fontPercent = _window2['default'].parseFloat(getSelectedOptionValue(this.$('.vjs-font-percent > select')));
+
+    var result = {
+      fontPercent: fontPercent,
+      fontFamily: fontFamily,
+      textOpacity: textOpacity,
+      windowColor: windowColor,
+      windowOpacity: windowOpacity,
+      backgroundOpacity: bgOpacity,
+      edgeStyle: textEdge,
+      color: fgColor,
+      backgroundColor: bgColor
+    };
+
+    for (var name in result) {
+      if (result[name] === '' || result[name] === 'none' || name === 'fontPercent' && result[name] === 1.00) {
+        delete result[name];
+      }
+    }
+    return result;
+  };
+
+  /**
+   * Set texttrack settings
+   * Settings are
+   * .vjs-edge-style
+   * .vjs-font-family
+   * .vjs-fg-color
+   * .vjs-text-opacity
+   * .vjs-bg-color
+   * .vjs-bg-opacity
+   * .window-color
+   * .vjs-window-opacity
+   *
+   * @param {Object} values Object with texttrack setting values
+   * @method setValues
+   */
+
+
+  TextTrackSettings.prototype.setValues = function setValues(values) {
+    setSelectedOption(this.$('.vjs-edge-style select'), values.edgeStyle);
+    setSelectedOption(this.$('.vjs-font-family select'), values.fontFamily);
+    setSelectedOption(this.$('.vjs-fg-color > select'), values.color);
+    setSelectedOption(this.$('.vjs-text-opacity > select'), values.textOpacity);
+    setSelectedOption(this.$('.vjs-bg-color > select'), values.backgroundColor);
+    setSelectedOption(this.$('.vjs-bg-opacity > select'), values.backgroundOpacity);
+    setSelectedOption(this.$('.window-color > select'), values.windowColor);
+    setSelectedOption(this.$('.vjs-window-opacity > select'), values.windowOpacity);
+
+    var fontPercent = values.fontPercent;
+
+    if (fontPercent) {
+      fontPercent = fontPercent.toFixed(2);
+    }
+
+    setSelectedOption(this.$('.vjs-font-percent > select'), fontPercent);
+  };
+
+  /**
+   * Restore texttrack settings
+   *
+   * @method restoreSettings
+   */
+
+
+  TextTrackSettings.prototype.restoreSettings = function restoreSettings() {
+    var err = void 0;
+    var values = void 0;
+
+    try {
+      var _safeParseTuple = (0, _tuple2['default'])(_window2['default'].localStorage.getItem('vjs-text-track-settings'));
+
+      err = _safeParseTuple[0];
+      values = _safeParseTuple[1];
+
+
+      if (err) {
+        _log2['default'].error(err);
+      }
+    } catch (e) {
+      _log2['default'].warn(e);
+    }
+
+    if (values) {
+      this.setValues(values);
+    }
+  };
+
+  /**
+   * Save texttrack settings to local storage
+   *
+   * @method saveSettings
+   */
+
+
+  TextTrackSettings.prototype.saveSettings = function saveSettings() {
+    if (!this.options_.persistTextTrackSettings) {
+      return;
+    }
+
+    var values = this.getValues();
+
+    try {
+      if (Object.getOwnPropertyNames(values).length > 0) {
+        _window2['default'].localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));
+      } else {
+        _window2['default'].localStorage.removeItem('vjs-text-track-settings');
+      }
+    } catch (e) {
+      _log2['default'].warn(e);
+    }
+  };
+
+  /**
+   * Update display of texttrack settings
+   *
+   * @method updateDisplay
+   */
+
+
+  TextTrackSettings.prototype.updateDisplay = function updateDisplay() {
+    var ttDisplay = this.player_.getChild('textTrackDisplay');
+
+    if (ttDisplay) {
+      ttDisplay.updateDisplay();
+    }
+  };
+
+  return TextTrackSettings;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TextTrackSettings', TextTrackSettings);
+
+exports['default'] = TextTrackSettings;
+
+},{"../component":5,"../utils/events.js":81,"../utils/fn.js":82,"../utils/log.js":85,"global/window":93,"safe-json-parse/tuple":145}],72:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackCueList = _dereq_('./text-track-cue-list');
+
+var _textTrackCueList2 = _interopRequireDefault(_textTrackCueList);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _trackEnums = _dereq_('./track-enums');
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _track = _dereq_('./track.js');
+
+var _track2 = _interopRequireDefault(_track);
+
+var _url = _dereq_('../utils/url.js');
+
+var _xhr = _dereq_('xhr');
+
+var _xhr2 = _interopRequireDefault(_xhr);
+
+var _mergeOptions = _dereq_('../utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * takes a webvtt file contents and parses it into cues
+ *
+ * @param {String} srcContent webVTT file contents
+ * @param {Track} track track to addcues to
+ */
+var parseCues = function parseCues(srcContent, track) {
+  var parser = new _window2['default'].WebVTT.Parser(_window2['default'], _window2['default'].vttjs, _window2['default'].WebVTT.StringDecoder());
+  var errors = [];
+
+  parser.oncue = function (cue) {
+    track.addCue(cue);
+  };
+
+  parser.onparsingerror = function (error) {
+    errors.push(error);
+  };
+
+  parser.onflush = function () {
+    track.trigger({
+      type: 'loadeddata',
+      target: track
+    });
+  };
+
+  parser.parse(srcContent);
+  if (errors.length > 0) {
+    if (_window2['default'].console && _window2['default'].console.groupCollapsed) {
+      _window2['default'].console.groupCollapsed('Text Track parsing errors for ' + track.src);
+    }
+    errors.forEach(function (error) {
+      return _log2['default'].error(error);
+    });
+    if (_window2['default'].console && _window2['default'].console.groupEnd) {
+      _window2['default'].console.groupEnd();
+    }
+  }
+
+  parser.flush();
+};
+
+/**
+ * load a track from a  specifed url
+ *
+ * @param {String} src url to load track from
+ * @param {Track} track track to addcues to
+ */
+var loadTrack = function loadTrack(src, track) {
+  var opts = {
+    uri: src
+  };
+  var crossOrigin = (0, _url.isCrossOrigin)(src);
+
+  if (crossOrigin) {
+    opts.cors = crossOrigin;
+  }
+
+  (0, _xhr2['default'])(opts, Fn.bind(this, function (err, response, responseBody) {
+    if (err) {
+      return _log2['default'].error(err, response);
+    }
+
+    track.loaded_ = true;
+
+    // Make sure that vttjs has loaded, otherwise, wait till it finished loading
+    // NOTE: this is only used for the alt/video.novtt.js build
+    if (typeof _window2['default'].WebVTT !== 'function') {
+      if (track.tech_) {
+        (function () {
+          var loadHandler = function loadHandler() {
+            return parseCues(responseBody, track);
+          };
+
+          track.tech_.on('vttjsloaded', loadHandler);
+          track.tech_.on('vttjserror', function () {
+            _log2['default'].error('vttjs failed to load, stopping trying to process ' + track.src);
+            track.tech_.off('vttjsloaded', loadHandler);
+          });
+        })();
+      }
+    } else {
+      parseCues(responseBody, track);
+    }
+  }));
+};
+
+/**
+ * A single text track as defined in:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack
+ *
+ * interface TextTrack : EventTarget {
+ *   readonly attribute TextTrackKind kind;
+ *   readonly attribute DOMString label;
+ *   readonly attribute DOMString language;
+ *
+ *   readonly attribute DOMString id;
+ *   readonly attribute DOMString inBandMetadataTrackDispatchType;
+ *
+ *   attribute TextTrackMode mode;
+ *
+ *   readonly attribute TextTrackCueList? cues;
+ *   readonly attribute TextTrackCueList? activeCues;
+ *
+ *   void addCue(TextTrackCue cue);
+ *   void removeCue(TextTrackCue cue);
+ *
+ *   attribute EventHandler oncuechange;
+ * };
+ *
+ * @param {Object=} options Object of option names and values
+ * @extends Track
+ * @class TextTrack
+ */
+
+var TextTrack = function (_Track) {
+  _inherits(TextTrack, _Track);
+
+  function TextTrack() {
+    var _this, _ret2;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, TextTrack);
+
+    if (!options.tech) {
+      throw new Error('A tech was not provided.');
+    }
+
+    var settings = (0, _mergeOptions2['default'])(options, {
+      kind: _trackEnums.TextTrackKind[options.kind] || 'subtitles',
+      language: options.language || options.srclang || ''
+    });
+    var mode = _trackEnums.TextTrackMode[settings.mode] || 'disabled';
+    var default_ = settings['default'];
+
+    if (settings.kind === 'metadata' || settings.kind === 'chapters') {
+      mode = 'hidden';
+    }
+    // on IE8 this will be a document element
+    // for every other browser this will be a normal object
+    var tt = (_this = _possibleConstructorReturn(this, _Track.call(this, settings)), _this);
+
+    tt.tech_ = settings.tech;
+
+    if (browser.IS_IE8) {
+      for (var prop in TextTrack.prototype) {
+        if (prop !== 'constructor') {
+          tt[prop] = TextTrack.prototype[prop];
+        }
+      }
+    }
+
+    tt.cues_ = [];
+    tt.activeCues_ = [];
+
+    var cues = new _textTrackCueList2['default'](tt.cues_);
+    var activeCues = new _textTrackCueList2['default'](tt.activeCues_);
+    var changed = false;
+    var timeupdateHandler = Fn.bind(tt, function () {
+
+      // Accessing this.activeCues for the side-effects of updating itself
+      // due to it's nature as a getter function. Do not remove or cues will
+      // stop updating!
+      /* eslint-disable no-unused-expressions */
+      this.activeCues;
+      /* eslint-enable no-unused-expressions */
+      if (changed) {
+        this.trigger('cuechange');
+        changed = false;
+      }
+    });
+
+    if (mode !== 'disabled') {
+      tt.tech_.on('timeupdate', timeupdateHandler);
+    }
+
+    Object.defineProperty(tt, 'default', {
+      get: function get() {
+        return default_;
+      },
+      set: function set() {}
+    });
+
+    Object.defineProperty(tt, 'mode', {
+      get: function get() {
+        return mode;
+      },
+      set: function set(newMode) {
+        if (!_trackEnums.TextTrackMode[newMode]) {
+          return;
+        }
+        mode = newMode;
+        if (mode === 'showing') {
+          this.tech_.on('timeupdate', timeupdateHandler);
+        }
+        this.trigger('modechange');
+      }
+    });
+
+    Object.defineProperty(tt, 'cues', {
+      get: function get() {
+        if (!this.loaded_) {
+          return null;
+        }
+
+        return cues;
+      },
+      set: function set() {}
+    });
+
+    Object.defineProperty(tt, 'activeCues', {
+      get: function get() {
+        if (!this.loaded_) {
+          return null;
+        }
+
+        // nothing to do
+        if (this.cues.length === 0) {
+          return activeCues;
+        }
+
+        var ct = this.tech_.currentTime();
+        var active = [];
+
+        for (var i = 0, l = this.cues.length; i < l; i++) {
+          var cue = this.cues[i];
+
+          if (cue.startTime <= ct && cue.endTime >= ct) {
+            active.push(cue);
+          } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) {
+            active.push(cue);
+          }
+        }
+
+        changed = false;
+
+        if (active.length !== this.activeCues_.length) {
+          changed = true;
+        } else {
+          for (var _i = 0; _i < active.length; _i++) {
+            if (this.activeCues_.indexOf(active[_i]) === -1) {
+              changed = true;
+            }
+          }
+        }
+
+        this.activeCues_ = active;
+        activeCues.setCues_(this.activeCues_);
+
+        return activeCues;
+      },
+      set: function set() {}
+    });
+
+    if (settings.src) {
+      tt.src = settings.src;
+      loadTrack(settings.src, tt);
+    } else {
+      tt.loaded_ = true;
+    }
+
+    return _ret2 = tt, _possibleConstructorReturn(_this, _ret2);
+  }
+
+  /**
+   * add a cue to the internal list of cues
+   *
+   * @param {Object} cue the cue to add to our internal list
+   * @method addCue
+   */
+
+
+  TextTrack.prototype.addCue = function addCue(cue) {
+    var tracks = this.tech_.textTracks();
+
+    if (tracks) {
+      for (var i = 0; i < tracks.length; i++) {
+        if (tracks[i] !== this) {
+          tracks[i].removeCue(cue);
+        }
+      }
+    }
+
+    this.cues_.push(cue);
+    this.cues.setCues_(this.cues_);
+  };
+
+  /**
+   * remvoe a cue from our internal list
+   *
+   * @param {Object} removeCue the cue to remove from our internal list
+   * @method removeCue
+   */
+
+
+  TextTrack.prototype.removeCue = function removeCue(_removeCue) {
+    var removed = false;
+
+    for (var i = 0, l = this.cues_.length; i < l; i++) {
+      var cue = this.cues_[i];
+
+      if (cue === _removeCue) {
+        this.cues_.splice(i, 1);
+        removed = true;
+      }
+    }
+
+    if (removed) {
+      this.cues.setCues_(this.cues_);
+    }
+  };
+
+  return TextTrack;
+}(_track2['default']);
+
+/**
+ * cuechange - One or more cues in the track have become active or stopped being active.
+ */
+
+
+TextTrack.prototype.allowedEvents_ = {
+  cuechange: 'cuechange'
+};
+
+exports['default'] = TextTrack;
+
+},{"../utils/browser.js":78,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options":86,"../utils/url.js":90,"./text-track-cue-list":67,"./track-enums":73,"./track.js":75,"global/window":93,"xhr":147}],73:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * @file track-kinds.js
+ */
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind
+ *
+ * enum VideoTrackKind {
+ *   "alternative",
+ *   "captions",
+ *   "main",
+ *   "sign",
+ *   "subtitles",
+ *   "commentary",
+ *   "",
+ * };
+ */
+var VideoTrackKind = exports.VideoTrackKind = {
+  alternative: 'alternative',
+  captions: 'captions',
+  main: 'main',
+  sign: 'sign',
+  subtitles: 'subtitles',
+  commentary: 'commentary'
+};
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind
+ *
+ * enum AudioTrackKind {
+ *   "alternative",
+ *   "descriptions",
+ *   "main",
+ *   "main-desc",
+ *   "translation",
+ *   "commentary",
+ *   "",
+ * };
+ */
+var AudioTrackKind = exports.AudioTrackKind = {
+  'alternative': 'alternative',
+  'descriptions': 'descriptions',
+  'main': 'main',
+  'main-desc': 'main-desc',
+  'translation': 'translation',
+  'commentary': 'commentary'
+};
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind
+ *
+ * enum TextTrackKind {
+ *   "subtitles",
+ *   "captions",
+ *   "descriptions",
+ *   "chapters",
+ *   "metadata"
+ * };
+ */
+var TextTrackKind = exports.TextTrackKind = {
+  subtitles: 'subtitles',
+  captions: 'captions',
+  descriptions: 'descriptions',
+  chapters: 'chapters',
+  metadata: 'metadata'
+};
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode
+ *
+ * enum TextTrackMode { "disabled",  "hidden",  "showing" };
+ */
+var TextTrackMode = exports.TextTrackMode = {
+  disabled: 'disabled',
+  hidden: 'hidden',
+  showing: 'showing'
+};
+
+},{}],74:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _eventTarget = _dereq_('../event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Common functionaliy between Text, Audio, and Video TrackLists
+ * Interfaces defined in the following spec:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html
+ *
+ * @param {Track[]} tracks A list of tracks to initialize the list with
+ * @param {Object} list the child object with inheritance done manually for ie8
+ * @extends EventTarget
+ * @class TrackList
+ */
+var TrackList = function (_EventTarget) {
+  _inherits(TrackList, _EventTarget);
+
+  function TrackList() {
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    var _ret;
+
+    var list = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+    _classCallCheck(this, TrackList);
+
+    var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
+
+    if (!list) {
+      list = _this; // eslint-disable-line
+      if (browser.IS_IE8) {
+        list = _document2['default'].createElement('custom');
+        for (var prop in TrackList.prototype) {
+          if (prop !== 'constructor') {
+            list[prop] = TrackList.prototype[prop];
+          }
+        }
+      }
+    }
+
+    list.tracks_ = [];
+    Object.defineProperty(list, 'length', {
+      get: function get() {
+        return this.tracks_.length;
+      }
+    });
+
+    for (var i = 0; i < tracks.length; i++) {
+      list.addTrack_(tracks[i]);
+    }
+
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  /**
+   * Add a Track from TrackList
+   *
+   * @param {Mixed} track
+   * @method addTrack_
+   * @private
+   */
+
+
+  TrackList.prototype.addTrack_ = function addTrack_(track) {
+    var index = this.tracks_.length;
+
+    if (!('' + index in this)) {
+      Object.defineProperty(this, index, {
+        get: function get() {
+          return this.tracks_[index];
+        }
+      });
+    }
+
+    // Do not add duplicate tracks
+    if (this.tracks_.indexOf(track) === -1) {
+      this.tracks_.push(track);
+      this.trigger({
+        track: track,
+        type: 'addtrack'
+      });
+    }
+  };
+
+  /**
+   * Remove a Track from TrackList
+   *
+   * @param {Track} rtrack track to be removed
+   * @method removeTrack_
+   * @private
+   */
+
+
+  TrackList.prototype.removeTrack_ = function removeTrack_(rtrack) {
+    var track = void 0;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      if (this[i] === rtrack) {
+        track = this[i];
+        if (track.off) {
+          track.off();
+        }
+
+        this.tracks_.splice(i, 1);
+
+        break;
+      }
+    }
+
+    if (!track) {
+      return;
+    }
+
+    this.trigger({
+      track: track,
+      type: 'removetrack'
+    });
+  };
+
+  /**
+   * Get a Track from the TrackList by a tracks id
+   *
+   * @param {String} id - the id of the track to get
+   * @method getTrackById
+   * @return {Track}
+   * @private
+   */
+
+
+  TrackList.prototype.getTrackById = function getTrackById(id) {
+    var result = null;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      var track = this[i];
+
+      if (track.id === id) {
+        result = track;
+        break;
+      }
+    }
+
+    return result;
+  };
+
+  return TrackList;
+}(_eventTarget2['default']);
+
+/**
+ * change - One or more tracks in the track list have been enabled or disabled.
+ * addtrack - A track has been added to the track list.
+ * removetrack - A track has been removed from the track list.
+ */
+
+
+TrackList.prototype.allowedEvents_ = {
+  change: 'change',
+  addtrack: 'addtrack',
+  removetrack: 'removetrack'
+};
+
+// emulate attribute EventHandler support to allow for feature detection
+for (var event in TrackList.prototype.allowedEvents_) {
+  TrackList.prototype['on' + event] = null;
+}
+
+exports['default'] = TrackList;
+
+},{"../event-target":42,"../utils/browser.js":78,"global/document":92}],75:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _guid = _dereq_('../utils/guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _eventTarget = _dereq_('../event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file track.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * setup the common parts of an audio, video, or text track
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html
+ *
+ * @param {String} type The type of track we are dealing with audio|video|text
+ * @param {Object=} options Object of option names and values
+ * @extends EventTarget
+ * @class Track
+ */
+var Track = function (_EventTarget) {
+  _inherits(Track, _EventTarget);
+
+  function Track() {
+    var _ret;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, Track);
+
+    var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
+
+    var track = _this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      track = _document2['default'].createElement('custom');
+      for (var prop in Track.prototype) {
+        if (prop !== 'constructor') {
+          track[prop] = Track.prototype[prop];
+        }
+      }
+    }
+
+    var trackProps = {
+      id: options.id || 'vjs_track_' + Guid.newGUID(),
+      kind: options.kind || '',
+      label: options.label || '',
+      language: options.language || ''
+    };
+
+    var _loop = function _loop(key) {
+      Object.defineProperty(track, key, {
+        get: function get() {
+          return trackProps[key];
+        },
+        set: function set() {}
+      });
+    };
+
+    for (var key in trackProps) {
+      _loop(key);
+    }
+
+    return _ret = track, _possibleConstructorReturn(_this, _ret);
+  }
+
+  return Track;
+}(_eventTarget2['default']);
+
+exports['default'] = Track;
+
+},{"../event-target":42,"../utils/browser.js":78,"../utils/guid.js":84,"global/document":92}],76:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackList = _dereq_('./track-list');
+
+var _trackList2 = _interopRequireDefault(_trackList);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file video-track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * disable other video tracks before selecting the new one
+ *
+ * @param {Array|VideoTrackList} list list to work on
+ * @param {VideoTrack} track the track to skip
+ */
+var disableOthers = function disableOthers(list, track) {
+  for (var i = 0; i < list.length; i++) {
+    if (track.id === list[i].id) {
+      continue;
+    }
+    // another audio track is enabled, disable it
+    list[i].selected = false;
+  }
+};
+
+/**
+* A list of possiblee video tracks. Most functionality is in the
+ * base class Tracklist and the spec for VideoTrackList is located at:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist
+ *
+ * interface VideoTrackList : EventTarget {
+ *   readonly attribute unsigned long length;
+ *   getter VideoTrack (unsigned long index);
+ *   VideoTrack? getTrackById(DOMString id);
+ *   readonly attribute long selectedIndex;
+ *
+ *   attribute EventHandler onchange;
+ *   attribute EventHandler onaddtrack;
+ *   attribute EventHandler onremovetrack;
+ * };
+ *
+ * @param {VideoTrack[]} tracks a list of video tracks to instantiate the list with
+ # @extends TrackList
+ * @class VideoTrackList
+ */
+
+var VideoTrackList = function (_TrackList) {
+  _inherits(VideoTrackList, _TrackList);
+
+  function VideoTrackList() {
+    var _this, _ret;
+
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, VideoTrackList);
+
+    var list = void 0;
+
+    // make sure only 1 track is enabled
+    // sorted from last index to first index
+    for (var i = tracks.length - 1; i >= 0; i--) {
+      if (tracks[i].selected) {
+        disableOthers(tracks, tracks[i]);
+        break;
+      }
+    }
+
+    // IE8 forces us to implement inheritance ourselves
+    // as it does not support Object.defineProperty properly
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+      for (var prop in _trackList2['default'].prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = _trackList2['default'].prototype[prop];
+        }
+      }
+      for (var _prop in VideoTrackList.prototype) {
+        if (_prop !== 'constructor') {
+          list[_prop] = VideoTrackList.prototype[_prop];
+        }
+      }
+    }
+
+    list = (_this = _possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);
+    list.changing_ = false;
+
+    Object.defineProperty(list, 'selectedIndex', {
+      get: function get() {
+        for (var _i = 0; _i < this.length; _i++) {
+          if (this[_i].selected) {
+            return _i;
+          }
+        }
+        return -1;
+      },
+      set: function set() {}
+    });
+
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  VideoTrackList.prototype.addTrack_ = function addTrack_(track) {
+    var _this2 = this;
+
+    if (track.selected) {
+      disableOthers(this, track);
+    }
+
+    _TrackList.prototype.addTrack_.call(this, track);
+    // native tracks don't have this
+    if (!track.addEventListener) {
+      return;
+    }
+    track.addEventListener('selectedchange', function () {
+      if (_this2.changing_) {
+        return;
+      }
+      _this2.changing_ = true;
+      disableOthers(_this2, track);
+      _this2.changing_ = false;
+      _this2.trigger('change');
+    });
+  };
+
+  VideoTrackList.prototype.addTrack = function addTrack(track) {
+    this.addTrack_(track);
+  };
+
+  VideoTrackList.prototype.removeTrack = function removeTrack(track) {
+    _TrackList.prototype.removeTrack_.call(this, track);
+  };
+
+  return VideoTrackList;
+}(_trackList2['default']);
+
+exports['default'] = VideoTrackList;
+
+},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],77:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackEnums = _dereq_('./track-enums');
+
+var _track = _dereq_('./track');
+
+var _track2 = _interopRequireDefault(_track);
+
+var _mergeOptions = _dereq_('../utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * A single video text track as defined in:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack
+ *
+ * interface VideoTrack {
+ *   readonly attribute DOMString id;
+ *   readonly attribute DOMString kind;
+ *   readonly attribute DOMString label;
+ *   readonly attribute DOMString language;
+ *   attribute boolean selected;
+ * };
+ *
+ * @param {Object=} options Object of option names and values
+ * @class VideoTrack
+ */
+var VideoTrack = function (_Track) {
+  _inherits(VideoTrack, _Track);
+
+  function VideoTrack() {
+    var _this, _ret;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, VideoTrack);
+
+    var settings = (0, _mergeOptions2['default'])(options, {
+      kind: _trackEnums.VideoTrackKind[options.kind] || ''
+    });
+
+    // on IE8 this will be a document element
+    // for every other browser this will be a normal object
+    var track = (_this = _possibleConstructorReturn(this, _Track.call(this, settings)), _this);
+    var selected = false;
+
+    if (browser.IS_IE8) {
+      for (var prop in VideoTrack.prototype) {
+        if (prop !== 'constructor') {
+          track[prop] = VideoTrack.prototype[prop];
+        }
+      }
+    }
+
+    Object.defineProperty(track, 'selected', {
+      get: function get() {
+        return selected;
+      },
+      set: function set(newSelected) {
+        // an invalid or unchanged value
+        if (typeof newSelected !== 'boolean' || newSelected === selected) {
+          return;
+        }
+        selected = newSelected;
+        this.trigger('selectedchange');
+      }
+    });
+
+    // if the user sets this track to selected then
+    // set selected to that true value otherwise
+    // we keep it false
+    if (settings.selected) {
+      track.selected = settings.selected;
+    }
+
+    return _ret = track, _possibleConstructorReturn(_this, _ret);
+  }
+
+  return VideoTrack;
+}(_track2['default']);
+
+exports['default'] = VideoTrack;
+
+},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],78:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.BACKGROUND_SIZE_SUPPORTED = exports.TOUCH_ENABLED = exports.IE_VERSION = exports.IS_IE8 = exports.IS_CHROME = exports.IS_EDGE = exports.IS_FIREFOX = exports.IS_NATIVE_ANDROID = exports.IS_OLD_ANDROID = exports.ANDROID_VERSION = exports.IS_ANDROID = exports.IOS_VERSION = exports.IS_IOS = exports.IS_IPOD = exports.IS_IPHONE = exports.IS_IPAD = undefined;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * @file browser.js
+ */
+var USER_AGENT = _window2['default'].navigator && _window2['default'].navigator.userAgent || '';
+var webkitVersionMap = /AppleWebKit\/([\d.]+)/i.exec(USER_AGENT);
+var appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;
+
+/*
+ * Device is an iPhone
+ *
+ * @type {Boolean}
+ * @constant
+ * @private
+ */
+var IS_IPAD = exports.IS_IPAD = /iPad/i.test(USER_AGENT);
+
+// The Facebook app's UIWebView identifies as both an iPhone and iPad, so
+// to identify iPhones, we need to exclude iPads.
+// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/
+var IS_IPHONE = exports.IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD;
+var IS_IPOD = exports.IS_IPOD = /iPod/i.test(USER_AGENT);
+var IS_IOS = exports.IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;
+
+var IOS_VERSION = exports.IOS_VERSION = function () {
+  var match = USER_AGENT.match(/OS (\d+)_/i);
+
+  if (match && match[1]) {
+    return match[1];
+  }
+  return null;
+}();
+
+var IS_ANDROID = exports.IS_ANDROID = /Android/i.test(USER_AGENT);
+var ANDROID_VERSION = exports.ANDROID_VERSION = function () {
+  // This matches Android Major.Minor.Patch versions
+  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned
+  var match = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);
+
+  if (!match) {
+    return null;
+  }
+
+  var major = match[1] && parseFloat(match[1]);
+  var minor = match[2] && parseFloat(match[2]);
+
+  if (major && minor) {
+    return parseFloat(match[1] + '.' + match[2]);
+  } else if (major) {
+    return major;
+  }
+  return null;
+}();
+
+// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser
+var IS_OLD_ANDROID = exports.IS_OLD_ANDROID = IS_ANDROID && /webkit/i.test(USER_AGENT) && ANDROID_VERSION < 2.3;
+var IS_NATIVE_ANDROID = exports.IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;
+
+var IS_FIREFOX = exports.IS_FIREFOX = /Firefox/i.test(USER_AGENT);
+var IS_EDGE = exports.IS_EDGE = /Edge/i.test(USER_AGENT);
+var IS_CHROME = exports.IS_CHROME = !IS_EDGE && /Chrome/i.test(USER_AGENT);
+var IS_IE8 = exports.IS_IE8 = /MSIE\s8\.0/.test(USER_AGENT);
+var IE_VERSION = exports.IE_VERSION = function (result) {
+  return result && parseFloat(result[1]);
+}(/MSIE\s(\d+)\.\d/.exec(USER_AGENT));
+
+var TOUCH_ENABLED = exports.TOUCH_ENABLED = !!('ontouchstart' in _window2['default'] || _window2['default'].DocumentTouch && _document2['default'] instanceof _window2['default'].DocumentTouch);
+var BACKGROUND_SIZE_SUPPORTED = exports.BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in _document2['default'].createElement('video').style;
+
+},{"global/document":92,"global/window":93}],79:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.bufferedPercent = bufferedPercent;
+
+var _timeRanges = _dereq_('./time-ranges.js');
+
+/**
+ * Compute how much your video has been buffered
+ *
+ * @param  {Object} Buffered object
+ * @param  {Number} Total duration
+ * @return {Number} Percent buffered of the total duration
+ * @private
+ * @function bufferedPercent
+ */
+function bufferedPercent(buffered, duration) {
+  var bufferedDuration = 0;
+  var start = void 0;
+  var end = void 0;
+
+  if (!duration) {
+    return 0;
+  }
+
+  if (!buffered || !buffered.length) {
+    buffered = (0, _timeRanges.createTimeRange)(0, 0);
+  }
+
+  for (var i = 0; i < buffered.length; i++) {
+    start = buffered.start(i);
+    end = buffered.end(i);
+
+    // buffered end can be bigger than duration by a very small fraction
+    if (end > duration) {
+      end = duration;
+    }
+
+    bufferedDuration += end - start;
+  }
+
+  return bufferedDuration / duration;
+} /**
+   * @file buffer.js
+   */
+
+},{"./time-ranges.js":88}],80:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.$$ = exports.$ = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file dom.js
+                                                                                                                                                                                                                                                   */
+
+
+var _templateObject = _taggedTemplateLiteralLoose(['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 ', ' to ', '.'], ['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 ', ' to ', '.']);
+
+exports.isEl = isEl;
+exports.getEl = getEl;
+exports.createEl = createEl;
+exports.textContent = textContent;
+exports.insertElFirst = insertElFirst;
+exports.getElData = getElData;
+exports.hasElData = hasElData;
+exports.removeElData = removeElData;
+exports.hasElClass = hasElClass;
+exports.addElClass = addElClass;
+exports.removeElClass = removeElClass;
+exports.toggleElClass = toggleElClass;
+exports.setElAttributes = setElAttributes;
+exports.getElAttributes = getElAttributes;
+exports.blockTextSelection = blockTextSelection;
+exports.unblockTextSelection = unblockTextSelection;
+exports.findElPosition = findElPosition;
+exports.getPointerPosition = getPointerPosition;
+exports.isTextNode = isTextNode;
+exports.emptyEl = emptyEl;
+exports.normalizeContent = normalizeContent;
+exports.appendContent = appendContent;
+exports.insertContent = insertContent;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _guid = _dereq_('./guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _log = _dereq_('./log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _tsml = _dereq_('tsml');
+
+var _tsml2 = _interopRequireDefault(_tsml);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
+
+/**
+ * Detect if a value is a string with any non-whitespace characters.
+ *
+ * @param  {String} str
+ * @return {Boolean}
+ */
+function isNonBlankString(str) {
+  return typeof str === 'string' && /\S/.test(str);
+}
+
+/**
+ * Throws an error if the passed string has whitespace. This is used by
+ * class methods to be relatively consistent with the classList API.
+ *
+ * @param  {String} str
+ * @return {Boolean}
+ */
+function throwIfWhitespace(str) {
+  if (/\s/.test(str)) {
+    throw new Error('class has illegal whitespace characters');
+  }
+}
+
+/**
+ * Produce a regular expression for matching a class name.
+ *
+ * @param  {String} className
+ * @return {RegExp}
+ */
+function classRegExp(className) {
+  return new RegExp('(^|\\s)' + className + '($|\\s)');
+}
+
+/**
+ * Determines, via duck typing, whether or not a value is a DOM element.
+ *
+ * @function isEl
+ * @param    {Mixed} value
+ * @return   {Boolean}
+ */
+function isEl(value) {
+  return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 1;
+}
+
+/**
+ * Creates functions to query the DOM using a given method.
+ *
+ * @function createQuerier
+ * @private
+ * @param  {String} method
+ * @return {Function}
+ */
+function createQuerier(method) {
+  return function (selector, context) {
+    if (!isNonBlankString(selector)) {
+      return _document2['default'][method](null);
+    }
+    if (isNonBlankString(context)) {
+      context = _document2['default'].querySelector(context);
+    }
+
+    var ctx = isEl(context) ? context : _document2['default'];
+
+    return ctx[method] && ctx[method](selector);
+  };
+}
+
+/**
+ * Shorthand for document.getElementById()
+ * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.
+ *
+ * @param  {String} id  Element ID
+ * @return {Element}    Element with supplied ID
+ * @function getEl
+ */
+function getEl(id) {
+  if (id.indexOf('#') === 0) {
+    id = id.slice(1);
+  }
+
+  return _document2['default'].getElementById(id);
+}
+
+/**
+ * Creates an element and applies properties.
+ *
+ * @param  {String} [tagName='div'] Name of tag to be created.
+ * @param  {Object} [properties={}] Element properties to be applied.
+ * @param  {Object} [attributes={}] Element attributes to be applied.
+ * @return {Element}
+ * @function createEl
+ */
+function createEl() {
+  var tagName = arguments.length <= 0 || arguments[0] === undefined ? 'div' : arguments[0];
+  var properties = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+  var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+  var el = _document2['default'].createElement(tagName);
+
+  Object.getOwnPropertyNames(properties).forEach(function (propName) {
+    var val = properties[propName];
+
+    // See #2176
+    // We originally were accepting both properties and attributes in the
+    // same object, but that doesn't work so well.
+    if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {
+      _log2['default'].warn((0, _tsml2['default'])(_templateObject, propName, val));
+      el.setAttribute(propName, val);
+    } else {
+      el[propName] = val;
+    }
+  });
+
+  Object.getOwnPropertyNames(attributes).forEach(function (attrName) {
+    el.setAttribute(attrName, attributes[attrName]);
+  });
+
+  return el;
+}
+
+/**
+ * Injects text into an element, replacing any existing contents entirely.
+ *
+ * @param  {Element} el
+ * @param  {String} text
+ * @return {Element}
+ * @function textContent
+ */
+function textContent(el, text) {
+  if (typeof el.textContent === 'undefined') {
+    el.innerText = text;
+  } else {
+    el.textContent = text;
+  }
+}
+
+/**
+ * Insert an element as the first child node of another
+ *
+ * @param  {Element} child   Element to insert
+ * @param  {Element} parent Element to insert child into
+ * @private
+ * @function insertElFirst
+ */
+function insertElFirst(child, parent) {
+  if (parent.firstChild) {
+    parent.insertBefore(child, parent.firstChild);
+  } else {
+    parent.appendChild(child);
+  }
+}
+
+/**
+ * Element Data Store. Allows for binding data to an element without putting it directly on the element.
+ * Ex. Event listeners are stored here.
+ * (also from jsninja.com, slightly modified and updated for closure compiler)
+ *
+ * @type {Object}
+ * @private
+ */
+var elData = {};
+
+/*
+ * Unique attribute name to store an element's guid in
+ *
+ * @type {String}
+ * @constant
+ * @private
+ */
+var elIdAttr = 'vdata' + new Date().getTime();
+
+/**
+ * Returns the cache object where data for an element is stored
+ *
+ * @param  {Element} el Element to store data for.
+ * @return {Object}
+ * @function getElData
+ */
+function getElData(el) {
+  var id = el[elIdAttr];
+
+  if (!id) {
+    id = el[elIdAttr] = Guid.newGUID();
+  }
+
+  if (!elData[id]) {
+    elData[id] = {};
+  }
+
+  return elData[id];
+}
+
+/**
+ * Returns whether or not an element has cached data
+ *
+ * @param  {Element} el A dom element
+ * @return {Boolean}
+ * @private
+ * @function hasElData
+ */
+function hasElData(el) {
+  var id = el[elIdAttr];
+
+  if (!id) {
+    return false;
+  }
+
+  return !!Object.getOwnPropertyNames(elData[id]).length;
+}
+
+/**
+ * Delete data for the element from the cache and the guid attr from getElementById
+ *
+ * @param  {Element} el Remove data for an element
+ * @private
+ * @function removeElData
+ */
+function removeElData(el) {
+  var id = el[elIdAttr];
+
+  if (!id) {
+    return;
+  }
+
+  // Remove all stored data
+  delete elData[id];
+
+  // Remove the elIdAttr property from the DOM node
+  try {
+    delete el[elIdAttr];
+  } catch (e) {
+    if (el.removeAttribute) {
+      el.removeAttribute(elIdAttr);
+    } else {
+      // IE doesn't appear to support removeAttribute on the document element
+      el[elIdAttr] = null;
+    }
+  }
+}
+
+/**
+ * Check if an element has a CSS class
+ *
+ * @function hasElClass
+ * @param {Element} element Element to check
+ * @param {String} classToCheck Classname to check
+ */
+function hasElClass(element, classToCheck) {
+  if (element.classList) {
+    return element.classList.contains(classToCheck);
+  }
+  throwIfWhitespace(classToCheck);
+  return classRegExp(classToCheck).test(element.className);
+}
+
+/**
+ * Add a CSS class name to an element
+ *
+ * @function addElClass
+ * @param {Element} element    Element to add class name to
+ * @param {String} classToAdd Classname to add
+ */
+function addElClass(element, classToAdd) {
+  if (element.classList) {
+    element.classList.add(classToAdd);
+
+    // Don't need to `throwIfWhitespace` here because `hasElClass` will do it
+    // in the case of classList not being supported.
+  } else if (!hasElClass(element, classToAdd)) {
+    element.className = (element.className + ' ' + classToAdd).trim();
+  }
+
+  return element;
+}
+
+/**
+ * Remove a CSS class name from an element
+ *
+ * @function removeElClass
+ * @param {Element} element    Element to remove from class name
+ * @param {String} classToRemove Classname to remove
+ */
+function removeElClass(element, classToRemove) {
+  if (element.classList) {
+    element.classList.remove(classToRemove);
+  } else {
+    throwIfWhitespace(classToRemove);
+    element.className = element.className.split(/\s+/).filter(function (c) {
+      return c !== classToRemove;
+    }).join(' ');
+  }
+
+  return element;
+}
+
+/**
+ * Adds or removes a CSS class name on an element depending on an optional
+ * condition or the presence/absence of the class name.
+ *
+ * @function toggleElClass
+ * @param    {Element} element
+ * @param    {String} classToToggle
+ * @param    {Boolean|Function} [predicate]
+ *           Can be a function that returns a Boolean. If `true`, the class
+ *           will be added; if `false`, the class will be removed. If not
+ *           given, the class will be added if not present and vice versa.
+ */
+function toggleElClass(element, classToToggle, predicate) {
+
+  // This CANNOT use `classList` internally because IE does not support the
+  // second parameter to the `classList.toggle()` method! Which is fine because
+  // `classList` will be used by the add/remove functions.
+  var has = hasElClass(element, classToToggle);
+
+  if (typeof predicate === 'function') {
+    predicate = predicate(element, classToToggle);
+  }
+
+  if (typeof predicate !== 'boolean') {
+    predicate = !has;
+  }
+
+  // If the necessary class operation matches the current state of the
+  // element, no action is required.
+  if (predicate === has) {
+    return;
+  }
+
+  if (predicate) {
+    addElClass(element, classToToggle);
+  } else {
+    removeElClass(element, classToToggle);
+  }
+
+  return element;
+}
+
+/**
+ * Apply attributes to an HTML element.
+ *
+ * @param  {Element} el         Target element.
+ * @param  {Object=} attributes Element attributes to be applied.
+ * @private
+ * @function setElAttributes
+ */
+function setElAttributes(el, attributes) {
+  Object.getOwnPropertyNames(attributes).forEach(function (attrName) {
+    var attrValue = attributes[attrName];
+
+    if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {
+      el.removeAttribute(attrName);
+    } else {
+      el.setAttribute(attrName, attrValue === true ? '' : attrValue);
+    }
+  });
+}
+
+/**
+ * Get an element's attribute values, as defined on the HTML tag
+ * Attributes are not the same as properties. They're defined on the tag
+ * or with setAttribute (which shouldn't be used with HTML)
+ * This will return true or false for boolean attributes.
+ *
+ * @param  {Element} tag Element from which to get tag attributes
+ * @return {Object}
+ * @private
+ * @function getElAttributes
+ */
+function getElAttributes(tag) {
+  var obj = {};
+
+  // known boolean attributes
+  // we can check for matching boolean properties, but older browsers
+  // won't know about HTML5 boolean attributes that we still read from
+  var knownBooleans = ',' + 'autoplay,controls,loop,muted,default' + ',';
+
+  if (tag && tag.attributes && tag.attributes.length > 0) {
+    var attrs = tag.attributes;
+
+    for (var i = attrs.length - 1; i >= 0; i--) {
+      var attrName = attrs[i].name;
+      var attrVal = attrs[i].value;
+
+      // check for known booleans
+      // the matching element property will return a value for typeof
+      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) {
+        // the value of an included boolean attribute is typically an empty
+        // string ('') which would equal false if we just check for a false value.
+        // we also don't want support bad code like autoplay='false'
+        attrVal = attrVal !== null ? true : false;
+      }
+
+      obj[attrName] = attrVal;
+    }
+  }
+
+  return obj;
+}
+
+/**
+ * Attempt to block the ability to select text while dragging controls
+ *
+ * @return {Boolean}
+ * @function blockTextSelection
+ */
+function blockTextSelection() {
+  _document2['default'].body.focus();
+  _document2['default'].onselectstart = function () {
+    return false;
+  };
+}
+
+/**
+ * Turn off text selection blocking
+ *
+ * @return {Boolean}
+ * @function unblockTextSelection
+ */
+function unblockTextSelection() {
+  _document2['default'].onselectstart = function () {
+    return true;
+  };
+}
+
+/**
+ * Offset Left
+ * getBoundingClientRect technique from
+ * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/
+ *
+ * @function findElPosition
+ * @param {Element} el Element from which to get offset
+ * @return {Object}
+ */
+function findElPosition(el) {
+  var box = void 0;
+
+  if (el.getBoundingClientRect && el.parentNode) {
+    box = el.getBoundingClientRect();
+  }
+
+  if (!box) {
+    return {
+      left: 0,
+      top: 0
+    };
+  }
+
+  var docEl = _document2['default'].documentElement;
+  var body = _document2['default'].body;
+
+  var clientLeft = docEl.clientLeft || body.clientLeft || 0;
+  var scrollLeft = _window2['default'].pageXOffset || body.scrollLeft;
+  var left = box.left + scrollLeft - clientLeft;
+
+  var clientTop = docEl.clientTop || body.clientTop || 0;
+  var scrollTop = _window2['default'].pageYOffset || body.scrollTop;
+  var top = box.top + scrollTop - clientTop;
+
+  // Android sometimes returns slightly off decimal values, so need to round
+  return {
+    left: Math.round(left),
+    top: Math.round(top)
+  };
+}
+
+/**
+ * Get pointer position in element
+ * Returns an object with x and y coordinates.
+ * The base on the coordinates are the bottom left of the element.
+ *
+ * @function getPointerPosition
+ * @param {Element} el Element on which to get the pointer position on
+ * @param {Event} event Event object
+ * @return {Object} This object will have x and y coordinates corresponding to the mouse position
+ */
+function getPointerPosition(el, event) {
+  var position = {};
+  var box = findElPosition(el);
+  var boxW = el.offsetWidth;
+  var boxH = el.offsetHeight;
+
+  var boxY = box.top;
+  var boxX = box.left;
+  var pageY = event.pageY;
+  var pageX = event.pageX;
+
+  if (event.changedTouches) {
+    pageX = event.changedTouches[0].pageX;
+    pageY = event.changedTouches[0].pageY;
+  }
+
+  position.y = Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH));
+  position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));
+
+  return position;
+}
+
+/**
+ * Determines, via duck typing, whether or not a value is a text node.
+ *
+ * @param  {Mixed} value
+ * @return {Boolean}
+ */
+function isTextNode(value) {
+  return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 3;
+}
+
+/**
+ * Empties the contents of an element.
+ *
+ * @function emptyEl
+ * @param    {Element} el
+ * @return   {Element}
+ */
+function emptyEl(el) {
+  while (el.firstChild) {
+    el.removeChild(el.firstChild);
+  }
+  return el;
+}
+
+/**
+ * Normalizes content for eventual insertion into the DOM.
+ *
+ * This allows a wide range of content definition methods, but protects
+ * from falling into the trap of simply writing to `innerHTML`, which is
+ * an XSS concern.
+ *
+ * The content for an element can be passed in multiple types and
+ * combinations, whose behavior is as follows:
+ *
+ * - String
+ *   Normalized into a text node.
+ *
+ * - Element, TextNode
+ *   Passed through.
+ *
+ * - Array
+ *   A one-dimensional array of strings, elements, nodes, or functions (which
+ *   return single strings, elements, or nodes).
+ *
+ * - Function
+ *   If the sole argument, is expected to produce a string, element,
+ *   node, or array.
+ *
+ * @function normalizeContent
+ * @param    {String|Element|TextNode|Array|Function} content
+ * @return   {Array}
+ */
+function normalizeContent(content) {
+
+  // First, invoke content if it is a function. If it produces an array,
+  // that needs to happen before normalization.
+  if (typeof content === 'function') {
+    content = content();
+  }
+
+  // Next up, normalize to an array, so one or many items can be normalized,
+  // filtered, and returned.
+  return (Array.isArray(content) ? content : [content]).map(function (value) {
+
+    // First, invoke value if it is a function to produce a new value,
+    // which will be subsequently normalized to a Node of some kind.
+    if (typeof value === 'function') {
+      value = value();
+    }
+
+    if (isEl(value) || isTextNode(value)) {
+      return value;
+    }
+
+    if (typeof value === 'string' && /\S/.test(value)) {
+      return _document2['default'].createTextNode(value);
+    }
+  }).filter(function (value) {
+    return value;
+  });
+}
+
+/**
+ * Normalizes and appends content to an element.
+ *
+ * @function appendContent
+ * @param    {Element} el
+ * @param    {String|Element|TextNode|Array|Function} content
+ *           See: `normalizeContent`
+ * @return   {Element}
+ */
+function appendContent(el, content) {
+  normalizeContent(content).forEach(function (node) {
+    return el.appendChild(node);
+  });
+  return el;
+}
+
+/**
+ * Normalizes and inserts content into an element; this is identical to
+ * `appendContent()`, except it empties the element first.
+ *
+ * @function insertContent
+ * @param    {Element} el
+ * @param    {String|Element|TextNode|Array|Function} content
+ *           See: `normalizeContent`
+ * @return   {Element}
+ */
+function insertContent(el, content) {
+  return appendContent(emptyEl(el), content);
+}
+
+/**
+ * Finds a single DOM element matching `selector` within the optional
+ * `context` of another DOM element (defaulting to `document`).
+ *
+ * @function $
+ * @param    {String} selector
+ *           A valid CSS selector, which will be passed to `querySelector`.
+ *
+ * @param    {Element|String} [context=document]
+ *           A DOM element within which to query. Can also be a selector
+ *           string in which case the first matching element will be used
+ *           as context. If missing (or no element matches selector), falls
+ *           back to `document`.
+ *
+ * @return   {Element|null}
+ */
+var $ = exports.$ = createQuerier('querySelector');
+
+/**
+ * Finds a all DOM elements matching `selector` within the optional
+ * `context` of another DOM element (defaulting to `document`).
+ *
+ * @function $$
+ * @param    {String} selector
+ *           A valid CSS selector, which will be passed to `querySelectorAll`.
+ *
+ * @param    {Element|String} [context=document]
+ *           A DOM element within which to query. Can also be a selector
+ *           string in which case the first matching element will be used
+ *           as context. If missing (or no element matches selector), falls
+ *           back to `document`.
+ *
+ * @return   {NodeList}
+ */
+var $$ = exports.$$ = createQuerier('querySelectorAll');
+
+},{"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93,"tsml":146}],81:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.fixEvent = fixEvent;
+exports.on = on;
+exports.off = off;
+exports.trigger = trigger;
+exports.one = one;
+
+var _dom = _dereq_('./dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _guid = _dereq_('./guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _log = _dereq_('./log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+/**
+ * Clean up the listener cache and dispatchers
+*
+ * @param  {Element|Object} elem Element to clean up
+ * @param  {String} type Type of event to clean up
+ * @private
+ * @method _cleanUpEvents
+ */
+function _cleanUpEvents(elem, type) {
+  var data = Dom.getElData(elem);
+
+  // Remove the events of a particular type if there are none left
+  if (data.handlers[type].length === 0) {
+    delete data.handlers[type];
+    // data.handlers[type] = null;
+    // Setting to null was causing an error with data.handlers
+
+    // Remove the meta-handler from the element
+    if (elem.removeEventListener) {
+      elem.removeEventListener(type, data.dispatcher, false);
+    } else if (elem.detachEvent) {
+      elem.detachEvent('on' + type, data.dispatcher);
+    }
+  }
+
+  // Remove the events object if there are no types left
+  if (Object.getOwnPropertyNames(data.handlers).length <= 0) {
+    delete data.handlers;
+    delete data.dispatcher;
+    delete data.disabled;
+  }
+
+  // Finally remove the element data if there is no data left
+  if (Object.getOwnPropertyNames(data).length === 0) {
+    Dom.removeElData(elem);
+  }
+}
+
+/**
+ * Loops through an array of event types and calls the requested method for each type.
+ *
+ * @param  {Function} fn   The event method we want to use.
+ * @param  {Element|Object} elem Element or object to bind listeners to
+ * @param  {String}   type Type of event to bind to.
+ * @param  {Function} callback   Event listener.
+ * @private
+ * @function _handleMultipleEvents
+ */
+/**
+ * @file events.js
+ *
+ * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)
+ * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)
+ * This should work very similarly to jQuery's events, however it's based off the book version which isn't as
+ * robust as jquery's, so there's probably some differences.
+ */
+
+function _handleMultipleEvents(fn, elem, types, callback) {
+  types.forEach(function (type) {
+    // Call the event method for each one of the types
+    fn(elem, type, callback);
+  });
+}
+
+/**
+ * Fix a native event to have standard property values
+ *
+ * @param  {Object} event Event object to fix
+ * @return {Object}
+ * @private
+ * @method fixEvent
+ */
+function fixEvent(event) {
+
+  function returnTrue() {
+    return true;
+  }
+
+  function returnFalse() {
+    return false;
+  }
+
+  // Test if fixing up is needed
+  // Used to check if !event.stopPropagation instead of isPropagationStopped
+  // But native events return true for stopPropagation, but don't have
+  // other expected methods like isPropagationStopped. Seems to be a problem
+  // with the Javascript Ninja code. So we're just overriding all events now.
+  if (!event || !event.isPropagationStopped) {
+    (function () {
+      var old = event || _window2['default'].event;
+
+      event = {};
+      // Clone the old object so that we can modify the values event = {};
+      // IE8 Doesn't like when you mess with native event properties
+      // Firefox returns false for event.hasOwnProperty('type') and other props
+      //  which makes copying more difficult.
+      // TODO: Probably best to create a whitelist of event props
+      for (var key in old) {
+        // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y
+        // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation
+        // and webkitMovementX/Y
+        if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY') {
+          // Chrome 32+ warns if you try to copy deprecated returnValue, but
+          // we still want to if preventDefault isn't supported (IE8).
+          if (!(key === 'returnValue' && old.preventDefault)) {
+            event[key] = old[key];
+          }
+        }
+      }
+
+      // The event occurred on this element
+      if (!event.target) {
+        event.target = event.srcElement || _document2['default'];
+      }
+
+      // Handle which other element the event is related to
+      if (!event.relatedTarget) {
+        event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+      }
+
+      // Stop the default browser action
+      event.preventDefault = function () {
+        if (old.preventDefault) {
+          old.preventDefault();
+        }
+        event.returnValue = false;
+        old.returnValue = false;
+        event.defaultPrevented = true;
+      };
+
+      event.defaultPrevented = false;
+
+      // Stop the event from bubbling
+      event.stopPropagation = function () {
+        if (old.stopPropagation) {
+          old.stopPropagation();
+        }
+        event.cancelBubble = true;
+        old.cancelBubble = true;
+        event.isPropagationStopped = returnTrue;
+      };
+
+      event.isPropagationStopped = returnFalse;
+
+      // Stop the event from bubbling and executing other handlers
+      event.stopImmediatePropagation = function () {
+        if (old.stopImmediatePropagation) {
+          old.stopImmediatePropagation();
+        }
+        event.isImmediatePropagationStopped = returnTrue;
+        event.stopPropagation();
+      };
+
+      event.isImmediatePropagationStopped = returnFalse;
+
+      // Handle mouse position
+      if (event.clientX !== null && event.clientX !== undefined) {
+        var doc = _document2['default'].documentElement;
+        var body = _document2['default'].body;
+
+        event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+        event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+      }
+
+      // Handle key presses
+      event.which = event.charCode || event.keyCode;
+
+      // Fix button for mouse clicks:
+      // 0 == left; 1 == middle; 2 == right
+      if (event.button !== null && event.button !== undefined) {
+
+        // The following is disabled because it does not pass videojs-standard
+        // and... yikes.
+        /* eslint-disable */
+        event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0;
+        /* eslint-enable */
+      }
+    })();
+  }
+
+  // Returns fixed-up instance
+  return event;
+}
+
+/**
+ * Add an event listener to element
+ * It stores the handler function in a separate cache object
+ * and adds a generic handler to the element's event,
+ * along with a unique id (guid) to the element.
+ *
+ * @param  {Element|Object}   elem Element or object to bind listeners to
+ * @param  {String|Array}   type Type of event to bind to.
+ * @param  {Function} fn   Event listener.
+ * @method on
+ */
+function on(elem, type, fn) {
+  if (Array.isArray(type)) {
+    return _handleMultipleEvents(on, elem, type, fn);
+  }
+
+  var data = Dom.getElData(elem);
+
+  // We need a place to store all our handler data
+  if (!data.handlers) {
+    data.handlers = {};
+  }
+
+  if (!data.handlers[type]) {
+    data.handlers[type] = [];
+  }
+
+  if (!fn.guid) {
+    fn.guid = Guid.newGUID();
+  }
+
+  data.handlers[type].push(fn);
+
+  if (!data.dispatcher) {
+    data.disabled = false;
+
+    data.dispatcher = function (event, hash) {
+
+      if (data.disabled) {
+        return;
+      }
+
+      event = fixEvent(event);
+
+      var handlers = data.handlers[event.type];
+
+      if (handlers) {
+        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.
+        var handlersCopy = handlers.slice(0);
+
+        for (var m = 0, n = handlersCopy.length; m < n; m++) {
+          if (event.isImmediatePropagationStopped()) {
+            break;
+          } else {
+            try {
+              handlersCopy[m].call(elem, event, hash);
+            } catch (e) {
+              _log2['default'].error(e);
+            }
+          }
+        }
+      }
+    };
+  }
+
+  if (data.handlers[type].length === 1) {
+    if (elem.addEventListener) {
+      elem.addEventListener(type, data.dispatcher, false);
+    } else if (elem.attachEvent) {
+      elem.attachEvent('on' + type, data.dispatcher);
+    }
+  }
+}
+
+/**
+ * Removes event listeners from an element
+ *
+ * @param  {Element|Object}   elem Object to remove listeners from
+ * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.
+ * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.
+ * @method off
+ */
+function off(elem, type, fn) {
+  // Don't want to add a cache object through getElData if not needed
+  if (!Dom.hasElData(elem)) {
+    return;
+  }
+
+  var data = Dom.getElData(elem);
+
+  // If no events exist, nothing to unbind
+  if (!data.handlers) {
+    return;
+  }
+
+  if (Array.isArray(type)) {
+    return _handleMultipleEvents(off, elem, type, fn);
+  }
+
+  // Utility function
+  var removeType = function removeType(t) {
+    data.handlers[t] = [];
+    _cleanUpEvents(elem, t);
+  };
+
+  // Are we removing all bound events?
+  if (!type) {
+    for (var t in data.handlers) {
+      removeType(t);
+    }
+    return;
+  }
+
+  var handlers = data.handlers[type];
+
+  // If no handlers exist, nothing to unbind
+  if (!handlers) {
+    return;
+  }
+
+  // If no listener was provided, remove all listeners for type
+  if (!fn) {
+    removeType(type);
+    return;
+  }
+
+  // We're only removing a single handler
+  if (fn.guid) {
+    for (var n = 0; n < handlers.length; n++) {
+      if (handlers[n].guid === fn.guid) {
+        handlers.splice(n--, 1);
+      }
+    }
+  }
+
+  _cleanUpEvents(elem, type);
+}
+
+/**
+ * Trigger an event for an element
+ *
+ * @param  {Element|Object}      elem  Element to trigger an event on
+ * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute
+ * @param  {Object} [hash] data hash to pass along with the event
+ * @return {Boolean=} Returned only if default was prevented
+ * @method trigger
+ */
+function trigger(elem, event, hash) {
+  // Fetches element data and a reference to the parent (for bubbling).
+  // Don't want to add a data object to cache for every parent,
+  // so checking hasElData first.
+  var elemData = Dom.hasElData(elem) ? Dom.getElData(elem) : {};
+  var parent = elem.parentNode || elem.ownerDocument;
+  // type = event.type || event,
+  // handler;
+
+  // If an event name was passed as a string, creates an event out of it
+  if (typeof event === 'string') {
+    event = { type: event, target: elem };
+  }
+  // Normalizes the event properties.
+  event = fixEvent(event);
+
+  // If the passed element has a dispatcher, executes the established handlers.
+  if (elemData.dispatcher) {
+    elemData.dispatcher.call(elem, event, hash);
+  }
+
+  // Unless explicitly stopped or the event does not bubble (e.g. media events)
+  // recursively calls this function to bubble the event up the DOM.
+  if (parent && !event.isPropagationStopped() && event.bubbles === true) {
+    trigger.call(null, parent, event, hash);
+
+    // If at the top of the DOM, triggers the default action unless disabled.
+  } else if (!parent && !event.defaultPrevented) {
+    var targetData = Dom.getElData(event.target);
+
+    // Checks if the target has a default action for this event.
+    if (event.target[event.type]) {
+      // Temporarily disables event dispatching on the target as we have already executed the handler.
+      targetData.disabled = true;
+      // Executes the default action.
+      if (typeof event.target[event.type] === 'function') {
+        event.target[event.type]();
+      }
+      // Re-enables event dispatching.
+      targetData.disabled = false;
+    }
+  }
+
+  // Inform the triggerer if the default was prevented by returning false
+  return !event.defaultPrevented;
+}
+
+/**
+ * Trigger a listener only once for an event
+ *
+ * @param  {Element|Object}   elem Element or object to
+ * @param  {String|Array}   type Name/type of event
+ * @param  {Function} fn Event handler function
+ * @method one
+ */
+function one(elem, type, fn) {
+  if (Array.isArray(type)) {
+    return _handleMultipleEvents(one, elem, type, fn);
+  }
+  var func = function func() {
+    off(elem, type, func);
+    fn.apply(this, arguments);
+  };
+
+  // copy the guid to the new function so it can removed using the original function's ID
+  func.guid = fn.guid = fn.guid || Guid.newGUID();
+  on(elem, type, func);
+}
+
+},{"./dom.js":80,"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93}],82:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.bind = undefined;
+
+var _guid = _dereq_('./guid.js');
+
+/**
+ * Bind (a.k.a proxy or Context). A simple method for changing the context of a function
+ * It also stores a unique id on the function so it can be easily removed from events
+ *
+ * @param  {*}   context The object to bind as scope
+ * @param  {Function} fn      The function to be bound to a scope
+ * @param  {Number=}   uid     An optional unique ID for the function to be set
+ * @return {Function}
+ * @private
+ * @method bind
+ */
+var bind = exports.bind = function bind(context, fn, uid) {
+  // Make sure the function has a unique ID
+  if (!fn.guid) {
+    fn.guid = (0, _guid.newGUID)();
+  }
+
+  // Create the new function that changes the context
+  var ret = function ret() {
+    return fn.apply(context, arguments);
+  };
+
+  // Allow for the ability to individualize this function
+  // Needed in the case where multiple objects might share the same prototype
+  // IF both items add an event listener with the same function, then you try to remove just one
+  // it will remove both because they both have the same guid.
+  // when using this, you need to use the bind method when you remove the listener as well.
+  // currently used in text tracks
+  ret.guid = uid ? uid + '_' + fn.guid : fn.guid;
+
+  return ret;
+}; /**
+    * @file fn.js
+    */
+
+},{"./guid.js":84}],83:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * @file format-time.js
+ *
+ * Format seconds as a time string, H:MM:SS or M:SS
+ * Supplying a guide (in seconds) will force a number of leading zeros
+ * to cover the length of the guide
+ *
+ * @param  {Number} seconds Number of seconds to be turned into a string
+ * @param  {Number} guide   Number (in seconds) to model the string after
+ * @return {String}         Time formatted as H:MM:SS or M:SS
+ * @private
+ * @function formatTime
+ */
+function formatTime(seconds) {
+  var guide = arguments.length <= 1 || arguments[1] === undefined ? seconds : arguments[1];
+
+  seconds = seconds < 0 ? 0 : seconds;
+  var s = Math.floor(seconds % 60);
+  var m = Math.floor(seconds / 60 % 60);
+  var h = Math.floor(seconds / 3600);
+  var gm = Math.floor(guide / 60 % 60);
+  var gh = Math.floor(guide / 3600);
+
+  // handle invalid times
+  if (isNaN(seconds) || seconds === Infinity) {
+    // '-' is false for all relational operators (e.g. <, >=) so this setting
+    // will add the minimum number of fields specified by the guide
+    h = m = s = '-';
+  }
+
+  // Check if we need to show hours
+  h = h > 0 || gh > 0 ? h + ':' : '';
+
+  // If hours are showing, we may need to add a leading zero.
+  // Always show at least one digit of minutes.
+  m = ((h || gm >= 10) && m < 10 ? '0' + m : m) + ':';
+
+  // Check if leading zero is need for seconds
+  s = s < 10 ? '0' + s : s;
+
+  return h + m + s;
+}
+
+exports['default'] = formatTime;
+
+},{}],84:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.newGUID = newGUID;
+/**
+ * @file guid.js
+ *
+ * Unique ID for an element or function
+ * @type {Number}
+ * @private
+ */
+var _guid = 1;
+
+/**
+ * Get the next unique ID
+ *
+ * @return {String}
+ * @function newGUID
+ */
+function newGUID() {
+  return _guid++;
+}
+
+},{}],85:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.logByType = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file log.js
+                                                                                                                                                                                                                                                   */
+
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _browser = _dereq_('./browser');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var log = void 0;
+
+/**
+ * Log messages to the console and history based on the type of message
+ *
+ * @param  {String} type
+ *         The name of the console method to use.
+ * @param  {Array} args
+ *         The arguments to be passed to the matching console method.
+ * @param  {Boolean} [stringify]
+ *         By default, only old IEs should get console argument stringification,
+ *         but this is exposed as a parameter to facilitate testing.
+ */
+var logByType = exports.logByType = function logByType(type, args) {
+  var stringify = arguments.length <= 2 || arguments[2] === undefined ? !!_browser.IE_VERSION && _browser.IE_VERSION < 11 : arguments[2];
+
+
+  // If there's no console then don't try to output messages, but they will
+  // still be stored in `log.history`.
+  //
+  // Was setting these once outside of this function, but containing them
+  // in the function makes it easier to test cases where console doesn't exist
+  // when the module is executed.
+  var fn = _window2['default'].console && _window2['default'].console[type] || function () {};
+
+  if (type !== 'log') {
+
+    // add the type to the front of the message when it's not "log"
+    args.unshift(type.toUpperCase() + ':');
+  }
+
+  // add to history
+  log.history.push(args);
+
+  // add console prefix after adding to history
+  args.unshift('VIDEOJS:');
+
+  // IEs previous to 11 log objects uselessly as "[object Object]"; so, JSONify
+  // objects and arrays for those less-capable browsers.
+  if (stringify) {
+    args = args.map(function (a) {
+      if (a && (typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object' || Array.isArray(a)) {
+        try {
+          return JSON.stringify(a);
+        } catch (x) {
+          return String(a);
+        }
+      }
+
+      // Cast to string before joining, so we get null and undefined explicitly
+      // included in output (as we would in a modern console).
+      return String(a);
+    }).join(' ');
+  }
+
+  // Old IE versions do not allow .apply() for console methods (they are
+  // reported as objects rather than functions).
+  if (!fn.apply) {
+    fn(args);
+  } else {
+    fn[Array.isArray(args) ? 'apply' : 'call'](console, args);
+  }
+};
+
+/**
+ * Log plain debug messages
+ *
+ * @function log
+ */
+log = function log() {
+  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  logByType('log', args);
+};
+
+/**
+ * Keep a history of log messages
+ *
+ * @type {Array}
+ */
+log.history = [];
+
+/**
+ * Log error messages
+ *
+ * @method error
+ */
+log.error = function () {
+  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+    args[_key2] = arguments[_key2];
+  }
+
+  return logByType('error', args);
+};
+
+/**
+ * Log warning messages
+ *
+ * @method warn
+ */
+log.warn = function () {
+  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+    args[_key3] = arguments[_key3];
+  }
+
+  return logByType('warn', args);
+};
+
+exports['default'] = log;
+
+},{"./browser":78,"global/window":93}],86:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file merge-options.js
+                                                                                                                                                                                                                                                   */
+
+
+exports['default'] = mergeOptions;
+
+var _merge = _dereq_('lodash-compat/object/merge');
+
+var _merge2 = _interopRequireDefault(_merge);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function isPlain(obj) {
+  return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.toString() === '[object Object]' && obj.constructor === Object;
+}
+
+/**
+ * Merge customizer. video.js simply overwrites non-simple objects
+ * (like arrays) instead of attempting to overlay them.
+ * @see https://lodash.com/docs#merge
+ */
+function customizer(destination, source) {
+  // If we're not working with a plain object, copy the value as is
+  // If source is an array, for instance, it will replace destination
+  if (!isPlain(source)) {
+    return source;
+  }
+
+  // If the new value is a plain object but the first object value is not
+  // we need to create a new object for the first object to merge with.
+  // This makes it consistent with how merge() works by default
+  // and also protects from later changes the to first object affecting
+  // the second object's values.
+  if (!isPlain(destination)) {
+    return mergeOptions(source);
+  }
+}
+
+/**
+ * Merge one or more options objects, recursively merging **only**
+ * plain object properties.  Previously `deepMerge`.
+ *
+ * @param  {...Object} source One or more objects to merge
+ * @returns {Object}          a new object that is the union of all
+ * provided objects
+ * @function mergeOptions
+ */
+function mergeOptions() {
+  // contruct the call dynamically to handle the variable number of
+  // objects to merge
+  var args = Array.prototype.slice.call(arguments);
+
+  // unshift an empty object into the front of the call as the target
+  // of the merge
+  args.unshift({});
+
+  // customize conflict resolution to match our historical merge behavior
+  args.push(customizer);
+
+  _merge2['default'].apply(null, args);
+
+  // return the mutated result object
+  return args[0];
+}
+
+},{"lodash-compat/object/merge":131}],87:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.setTextContent = exports.createStyleElement = undefined;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var createStyleElement = exports.createStyleElement = function createStyleElement(className) {
+  var style = _document2['default'].createElement('style');
+
+  style.className = className;
+
+  return style;
+};
+
+var setTextContent = exports.setTextContent = function setTextContent(el, content) {
+  if (el.styleSheet) {
+    el.styleSheet.cssText = content;
+  } else {
+    el.textContent = content;
+  }
+};
+
+},{"global/document":92}],88:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.createTimeRange = undefined;
+exports.createTimeRanges = createTimeRanges;
+
+var _log = _dereq_('./log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function rangeCheck(fnName, index, maxIndex) {
+  if (index < 0 || index > maxIndex) {
+    throw new Error('Failed to execute \'' + fnName + '\' on \'TimeRanges\': The index provided (' + index + ') is greater than or equal to the maximum bound (' + maxIndex + ').');
+  }
+}
+
+function getRange(fnName, valueIndex, ranges, rangeIndex) {
+  if (rangeIndex === undefined) {
+    _log2['default'].warn('DEPRECATED: Function \'' + fnName + '\' on \'TimeRanges\' called without an index argument.');
+    rangeIndex = 0;
+  }
+  rangeCheck(fnName, rangeIndex, ranges.length - 1);
+  return ranges[rangeIndex][valueIndex];
+}
+
+function createTimeRangesObj(ranges) {
+  if (ranges === undefined || ranges.length === 0) {
+    return {
+      length: 0,
+      start: function start() {
+        throw new Error('This TimeRanges object is empty');
+      },
+      end: function end() {
+        throw new Error('This TimeRanges object is empty');
+      }
+    };
+  }
+  return {
+    length: ranges.length,
+    start: getRange.bind(null, 'start', 0, ranges),
+    end: getRange.bind(null, 'end', 1, ranges)
+  };
+}
+
+/**
+ * @file time-ranges.js
+ *
+ * Should create a fake TimeRange object
+ * Mimics an HTML5 time range instance, which has functions that
+ * return the start and end times for a range
+ * TimeRanges are returned by the buffered() method
+ *
+ * @param  {(Number|Array)} Start of a single range or an array of ranges
+ * @param  {Number} End of a single range
+ * @private
+ * @method createTimeRanges
+ */
+function createTimeRanges(start, end) {
+  if (Array.isArray(start)) {
+    return createTimeRangesObj(start);
+  } else if (start === undefined || end === undefined) {
+    return createTimeRangesObj();
+  }
+  return createTimeRangesObj([[start, end]]);
+}
+
+exports.createTimeRange = createTimeRanges;
+
+},{"./log.js":85}],89:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+/**
+ * @file to-title-case.js
+ *
+ * Uppercase the first letter of a string
+ *
+ * @param  {String} string String to be uppercased
+ * @return {String}
+ * @private
+ * @method toTitleCase
+ */
+function toTitleCase(string) {
+  return string.charAt(0).toUpperCase() + string.slice(1);
+}
+
+exports["default"] = toTitleCase;
+
+},{}],90:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.isCrossOrigin = exports.getFileExtension = exports.getAbsoluteURL = exports.parseUrl = undefined;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Resolve and parse the elements of a URL
+ *
+ * @param  {String} url The url to parse
+ * @return {Object}     An object of url details
+ * @method parseUrl
+ */
+/**
+ * @file url.js
+ */
+var parseUrl = exports.parseUrl = function parseUrl(url) {
+  var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];
+
+  // add the url to an anchor and let the browser parse the URL
+  var a = _document2['default'].createElement('a');
+
+  a.href = url;
+
+  // IE8 (and 9?) Fix
+  // ie8 doesn't parse the URL correctly until the anchor is actually
+  // added to the body, and an innerHTML is needed to trigger the parsing
+  var addToBody = a.host === '' && a.protocol !== 'file:';
+  var div = void 0;
+
+  if (addToBody) {
+    div = _document2['default'].createElement('div');
+    div.innerHTML = '<a href="' + url + '"></a>';
+    a = div.firstChild;
+    // prevent the div from affecting layout
+    div.setAttribute('style', 'display:none; position:absolute;');
+    _document2['default'].body.appendChild(div);
+  }
+
+  // Copy the specific URL properties to a new object
+  // This is also needed for IE8 because the anchor loses its
+  // properties when it's removed from the dom
+  var details = {};
+
+  for (var i = 0; i < props.length; i++) {
+    details[props[i]] = a[props[i]];
+  }
+
+  // IE9 adds the port to the host property unlike everyone else. If
+  // a port identifier is added for standard ports, strip it.
+  if (details.protocol === 'http:') {
+    details.host = details.host.replace(/:80$/, '');
+  }
+
+  if (details.protocol === 'https:') {
+    details.host = details.host.replace(/:443$/, '');
+  }
+
+  if (addToBody) {
+    _document2['default'].body.removeChild(div);
+  }
+
+  return details;
+};
+
+/**
+ * Get absolute version of relative URL. Used to tell flash correct URL.
+ * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
+ *
+ * @param  {String} url URL to make absolute
+ * @return {String}     Absolute URL
+ * @private
+ * @method getAbsoluteURL
+ */
+var getAbsoluteURL = exports.getAbsoluteURL = function getAbsoluteURL(url) {
+  // Check if absolute URL
+  if (!url.match(/^https?:\/\//)) {
+    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.
+    var div = _document2['default'].createElement('div');
+
+    div.innerHTML = '<a href="' + url + '">x</a>';
+    url = div.firstChild.href;
+  }
+
+  return url;
+};
+
+/**
+ * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path
+ *
+ * @param {String}    path    The fileName path like '/path/to/file.mp4'
+ * @returns {String}          The extension in lower case or an empty string if no extension could be found.
+ * @method getFileExtension
+ */
+var getFileExtension = exports.getFileExtension = function getFileExtension(path) {
+  if (typeof path === 'string') {
+    var splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i;
+    var pathParts = splitPathRe.exec(path);
+
+    if (pathParts) {
+      return pathParts.pop().toLowerCase();
+    }
+  }
+
+  return '';
+};
+
+/**
+ * Returns whether the url passed is a cross domain request or not.
+ *
+ * @param {String} url The url to check
+ * @return {Boolean}   Whether it is a cross domain request or not
+ * @method isCrossOrigin
+ */
+var isCrossOrigin = exports.isCrossOrigin = function isCrossOrigin(url) {
+  var winLoc = _window2['default'].location;
+  var urlInfo = parseUrl(url);
+
+  // IE8 protocol relative urls will return ':' for protocol
+  var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;
+
+  // Check if url is for another domain/origin
+  // IE8 doesn't know location.origin, so we won't rely on it here
+  var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host;
+
+  return crossOrigin;
+};
+
+},{"global/document":92,"global/window":93}],91:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file video.js
+                                                                                                                                                                                                                                                   */
+
+/* global define */
+
+// Include the built-in techs
+
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _setup = _dereq_('./setup');
+
+var setup = _interopRequireWildcard(_setup);
+
+var _stylesheet = _dereq_('./utils/stylesheet.js');
+
+var stylesheet = _interopRequireWildcard(_stylesheet);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _eventTarget = _dereq_('./event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _player = _dereq_('./player');
+
+var _player2 = _interopRequireDefault(_player);
+
+var _plugins = _dereq_('./plugins.js');
+
+var _plugins2 = _interopRequireDefault(_plugins);
+
+var _mergeOptions = _dereq_('./utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _textTrack = _dereq_('./tracks/text-track.js');
+
+var _textTrack2 = _interopRequireDefault(_textTrack);
+
+var _audioTrack = _dereq_('./tracks/audio-track.js');
+
+var _audioTrack2 = _interopRequireDefault(_audioTrack);
+
+var _videoTrack = _dereq_('./tracks/video-track.js');
+
+var _videoTrack2 = _interopRequireDefault(_videoTrack);
+
+var _timeRanges = _dereq_('./utils/time-ranges.js');
+
+var _formatTime = _dereq_('./utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _browser = _dereq_('./utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _url = _dereq_('./utils/url.js');
+
+var Url = _interopRequireWildcard(_url);
+
+var _extend = _dereq_('./extend.js');
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _merge2 = _dereq_('lodash-compat/object/merge');
+
+var _merge3 = _interopRequireDefault(_merge2);
+
+var _xhr = _dereq_('xhr');
+
+var _xhr2 = _interopRequireDefault(_xhr);
+
+var _tech = _dereq_('./tech/tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+// HTML5 Element Shim for IE8
+if (typeof HTMLVideoElement === 'undefined') {
+  _document2['default'].createElement('video');
+  _document2['default'].createElement('audio');
+  _document2['default'].createElement('track');
+}
+
+/**
+ * Doubles as the main function for users to create a player instance and also
+ * the main library object.
+ * The `videojs` function can be used to initialize or retrieve a player.
+ * ```js
+ *     var myPlayer = videojs('my_video_id');
+ * ```
+ *
+ * @param  {String|Element} id      Video element or video element ID
+ * @param  {Object=} options        Optional options object for config/settings
+ * @param  {Function=} ready        Optional ready callback
+ * @return {Player}                 A player instance
+ * @mixes videojs
+ * @method videojs
+ */
+function videojs(id, options, ready) {
+  var tag = void 0;
+
+  // Allow for element or ID to be passed in
+  // String ID
+  if (typeof id === 'string') {
+
+    // Adjust for jQuery ID syntax
+    if (id.indexOf('#') === 0) {
+      id = id.slice(1);
+    }
+
+    // If a player instance has already been created for this ID return it.
+    if (videojs.getPlayers()[id]) {
+
+      // If options or ready funtion are passed, warn
+      if (options) {
+        _log2['default'].warn('Player "' + id + '" is already initialised. Options will not be applied.');
+      }
+
+      if (ready) {
+        videojs.getPlayers()[id].ready(ready);
+      }
+
+      return videojs.getPlayers()[id];
+    }
+
+    // Otherwise get element for ID
+    tag = Dom.getEl(id);
+
+    // ID is a media element
+  } else {
+    tag = id;
+  }
+
+  // Check for a useable element
+  // re: nodeName, could be a box div also
+  if (!tag || !tag.nodeName) {
+    throw new TypeError('The element or ID supplied is not valid. (videojs)');
+  }
+
+  // Element may have a player attr referring to an already created player instance.
+  // If not, set up a new player and return the instance.
+  return tag.player || _player2['default'].players[tag.playerId] || new _player2['default'](tag, options, ready);
+}
+
+// Add default styles
+if (_window2['default'].VIDEOJS_NO_DYNAMIC_STYLE !== true) {
+  var style = Dom.$('.vjs-styles-defaults');
+
+  if (!style) {
+    style = stylesheet.createStyleElement('vjs-styles-defaults');
+    var head = Dom.$('head');
+
+    if (head) {
+      head.insertBefore(style, head.firstChild);
+    }
+    stylesheet.setTextContent(style, '\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    ');
+  }
+}
+
+// Run Auto-load players
+// 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)
+setup.autoSetupTimeout(1, videojs);
+
+/*
+ * Current software version (semver)
+ *
+ * @type {String}
+ */
+videojs.VERSION = '5.12.1';
+
+/**
+ * The global options object. These are the settings that take effect
+ * if no overrides are specified when the player is created.
+ *
+ * ```js
+ *     videojs.options.autoplay = true
+ *     // -> all players will autoplay by default
+ * ```
+ *
+ * @type {Object}
+ */
+videojs.options = _player2['default'].prototype.options_;
+
+/**
+ * Get an object with the currently created players, keyed by player ID
+ *
+ * @return {Object} The created players
+ * @mixes videojs
+ * @method getPlayers
+ */
+videojs.getPlayers = function () {
+  return _player2['default'].players;
+};
+
+/**
+ * Expose players object.
+ *
+ * @memberOf videojs
+ * @property {Object} players
+ */
+videojs.players = _player2['default'].players;
+
+/**
+ * Get a component class object by name
+ * ```js
+ *     var VjsButton = videojs.getComponent('Button');
+ *     // Create a new instance of the component
+ *     var myButton = new VjsButton(myPlayer);
+ * ```
+ *
+ * @return {Component} Component identified by name
+ * @mixes videojs
+ * @method getComponent
+ */
+videojs.getComponent = _component2['default'].getComponent;
+
+/**
+ * Register a component so it can referred to by name
+ * Used when adding to other
+ * components, either through addChild
+ * `component.addChild('myComponent')`
+ * or through default children options
+ * `{ children: ['myComponent'] }`.
+ * ```js
+ *     // Get a component to subclass
+ *     var VjsButton = videojs.getComponent('Button');
+ *     // Subclass the component (see 'extend' doc for more info)
+ *     var MySpecialButton = videojs.extend(VjsButton, {});
+ *     // Register the new component
+ *     VjsButton.registerComponent('MySepcialButton', MySepcialButton);
+ *     // (optionally) add the new component as a default player child
+ *     myPlayer.addChild('MySepcialButton');
+ * ```
+ * NOTE: You could also just initialize the component before adding.
+ * `component.addChild(new MyComponent());`
+ *
+ * @param {String} The class name of the component
+ * @param {Component} The component class
+ * @return {Component} The newly registered component
+ * @mixes videojs
+ * @method registerComponent
+ */
+videojs.registerComponent = function (name, comp) {
+  if (_tech2['default'].isTech(comp)) {
+    _log2['default'].warn('The ' + name + ' tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)');
+  }
+
+  _component2['default'].registerComponent.call(_component2['default'], name, comp);
+};
+
+/**
+ * Get a Tech class object by name
+ * ```js
+ *     var Html5 = videojs.getTech('Html5');
+ *     // Create a new instance of the component
+ *     var html5 = new Html5(options);
+ * ```
+ *
+ * @return {Tech} Tech identified by name
+ * @mixes videojs
+ * @method getComponent
+ */
+videojs.getTech = _tech2['default'].getTech;
+
+/**
+ * Register a Tech so it can referred to by name.
+ * This is used in the tech order for the player.
+ *
+ * ```js
+ *     // get the Html5 Tech
+ *     var Html5 = videojs.getTech('Html5');
+ *     var MyTech = videojs.extend(Html5, {});
+ *     // Register the new Tech
+ *     VjsButton.registerTech('Tech', MyTech);
+ *     var player = videojs('myplayer', {
+ *       techOrder: ['myTech', 'html5']
+ *     });
+ * ```
+ *
+ * @param {String} The class name of the tech
+ * @param {Tech} The tech class
+ * @return {Tech} The newly registered Tech
+ * @mixes videojs
+ * @method registerTech
+ */
+videojs.registerTech = _tech2['default'].registerTech;
+
+/**
+ * A suite of browser and device tests
+ *
+ * @type {Object}
+ * @private
+ */
+videojs.browser = browser;
+
+/**
+ * Whether or not the browser supports touch events. Included for backward
+ * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`
+ * instead going forward.
+ *
+ * @deprecated
+ * @type {Boolean}
+ */
+videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;
+
+/**
+ * Subclass an existing class
+ * Mimics ES6 subclassing with the `extend` keyword
+ * ```js
+ *     // Create a basic javascript 'class'
+ *     function MyClass(name) {
+ *       // Set a property at initialization
+ *       this.myName = name;
+ *     }
+ *     // Create an instance method
+ *     MyClass.prototype.sayMyName = function() {
+ *       alert(this.myName);
+ *     };
+ *     // Subclass the exisitng class and change the name
+ *     // when initializing
+ *     var MySubClass = videojs.extend(MyClass, {
+ *       constructor: function(name) {
+ *         // Call the super class constructor for the subclass
+ *         MyClass.call(this, name)
+ *       }
+ *     });
+ *     // Create an instance of the new sub class
+ *     var myInstance = new MySubClass('John');
+ *     myInstance.sayMyName(); // -> should alert "John"
+ * ```
+ *
+ * @param {Function} The Class to subclass
+ * @param {Object} An object including instace methods for the new class
+ *                   Optionally including a `constructor` function
+ * @return {Function} The newly created subclass
+ * @mixes videojs
+ * @method extend
+ */
+videojs.extend = _extend2['default'];
+
+/**
+ * Merge two options objects recursively
+ * Performs a deep merge like lodash.merge but **only merges plain objects**
+ * (not arrays, elements, anything else)
+ * Other values will be copied directly from the second object.
+ * ```js
+ *     var defaultOptions = {
+ *       foo: true,
+ *       bar: {
+ *         a: true,
+ *         b: [1,2,3]
+ *       }
+ *     };
+ *     var newOptions = {
+ *       foo: false,
+ *       bar: {
+ *         b: [4,5,6]
+ *       }
+ *     };
+ *     var result = videojs.mergeOptions(defaultOptions, newOptions);
+ *     // result.foo = false;
+ *     // result.bar.a = true;
+ *     // result.bar.b = [4,5,6];
+ * ```
+ *
+ * @param {Object} defaults  The options object whose values will be overriden
+ * @param {Object} overrides The options object with values to override the first
+ * @param {Object} etc       Any number of additional options objects
+ *
+ * @return {Object} a new object with the merged values
+ * @mixes videojs
+ * @method mergeOptions
+ */
+videojs.mergeOptions = _mergeOptions2['default'];
+
+/**
+ * Change the context (this) of a function
+ *
+ *     videojs.bind(newContext, function() {
+ *       this === newContext
+ *     });
+ *
+ * NOTE: as of v5.0 we require an ES5 shim, so you should use the native
+ * `function() {}.bind(newContext);` instead of this.
+ *
+ * @param  {*}        context The object to bind as scope
+ * @param  {Function} fn      The function to be bound to a scope
+ * @param  {Number=}  uid     An optional unique ID for the function to be set
+ * @return {Function}
+ */
+videojs.bind = Fn.bind;
+
+/**
+ * Create a Video.js player plugin
+ * Plugins are only initialized when options for the plugin are included
+ * in the player options, or the plugin function on the player instance is
+ * called.
+ * **See the plugin guide in the docs for a more detailed example**
+ * ```js
+ *     // Make a plugin that alerts when the player plays
+ *     videojs.plugin('myPlugin', function(myPluginOptions) {
+ *       myPluginOptions = myPluginOptions || {};
+ *
+ *       var player = this;
+ *       var alertText = myPluginOptions.text || 'Player is playing!'
+ *
+ *       player.on('play', function() {
+ *         alert(alertText);
+ *       });
+ *     });
+ *     // USAGE EXAMPLES
+ *     // EXAMPLE 1: New player with plugin options, call plugin immediately
+ *     var player1 = videojs('idOne', {
+ *       myPlugin: {
+ *         text: 'Custom text!'
+ *       }
+ *     });
+ *     // Click play
+ *     // --> Should alert 'Custom text!'
+ *     // EXAMPLE 3: New player, initialize plugin later
+ *     var player3 = videojs('idThree');
+ *     // Click play
+ *     // --> NO ALERT
+ *     // Click pause
+ *     // Initialize plugin using the plugin function on the player instance
+ *     player3.myPlugin({
+ *       text: 'Plugin added later!'
+ *     });
+ *     // Click play
+ *     // --> Should alert 'Plugin added later!'
+ * ```
+ *
+ * @param {String} name The plugin name
+ * @param {Function} fn The plugin function that will be called with options
+ * @mixes videojs
+ * @method plugin
+ */
+videojs.plugin = _plugins2['default'];
+
+/**
+ * Adding languages so that they're available to all players.
+ * ```js
+ *     videojs.addLanguage('es', { 'Hello': 'Hola' });
+ * ```
+ *
+ * @param  {String} code The language code or dictionary property
+ * @param  {Object} data The data values to be translated
+ * @return {Object} The resulting language dictionary object
+ * @mixes videojs
+ * @method addLanguage
+ */
+videojs.addLanguage = function (code, data) {
+  var _merge;
+
+  code = ('' + code).toLowerCase();
+  return (0, _merge3['default'])(videojs.options.languages, (_merge = {}, _merge[code] = data, _merge))[code];
+};
+
+/**
+ * Log debug messages.
+ *
+ * @param {...Object} messages One or more messages to log
+ */
+videojs.log = _log2['default'];
+
+/**
+ * Creates an emulated TimeRange object.
+ *
+ * @param  {Number|Array} start Start time in seconds or an array of ranges
+ * @param  {Number} end   End time in seconds
+ * @return {Object}       Fake TimeRange object
+ * @method createTimeRange
+ */
+videojs.createTimeRange = videojs.createTimeRanges = _timeRanges.createTimeRanges;
+
+/**
+ * Format seconds as a time string, H:MM:SS or M:SS
+ * Supplying a guide (in seconds) will force a number of leading zeros
+ * to cover the length of the guide
+ *
+ * @param  {Number} seconds Number of seconds to be turned into a string
+ * @param  {Number} guide   Number (in seconds) to model the string after
+ * @return {String}         Time formatted as H:MM:SS or M:SS
+ * @method formatTime
+ */
+videojs.formatTime = _formatTime2['default'];
+
+/**
+ * Resolve and parse the elements of a URL
+ *
+ * @param  {String} url The url to parse
+ * @return {Object}     An object of url details
+ * @method parseUrl
+ */
+videojs.parseUrl = Url.parseUrl;
+
+/**
+ * Returns whether the url passed is a cross domain request or not.
+ *
+ * @param {String} url The url to check
+ * @return {Boolean}   Whether it is a cross domain request or not
+ * @method isCrossOrigin
+ */
+videojs.isCrossOrigin = Url.isCrossOrigin;
+
+/**
+ * Event target class.
+ *
+ * @type {Function}
+ */
+videojs.EventTarget = _eventTarget2['default'];
+
+/**
+ * Add an event listener to element
+ * It stores the handler function in a separate cache object
+ * and adds a generic handler to the element's event,
+ * along with a unique id (guid) to the element.
+ *
+ * @param  {Element|Object}   elem Element or object to bind listeners to
+ * @param  {String|Array}   type Type of event to bind to.
+ * @param  {Function} fn   Event listener.
+ * @method on
+ */
+videojs.on = Events.on;
+
+/**
+ * Trigger a listener only once for an event
+ *
+ * @param  {Element|Object}   elem Element or object to
+ * @param  {String|Array}   type Name/type of event
+ * @param  {Function} fn Event handler function
+ * @method one
+ */
+videojs.one = Events.one;
+
+/**
+ * Removes event listeners from an element
+ *
+ * @param  {Element|Object}   elem Object to remove listeners from
+ * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.
+ * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.
+ * @method off
+ */
+videojs.off = Events.off;
+
+/**
+ * Trigger an event for an element
+ *
+ * @param  {Element|Object}      elem  Element to trigger an event on
+ * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute
+ * @param  {Object} [hash] data hash to pass along with the event
+ * @return {Boolean=} Returned only if default was prevented
+ * @method trigger
+ */
+videojs.trigger = Events.trigger;
+
+/**
+ * A cross-browser XMLHttpRequest wrapper. Here's a simple example:
+ *
+ *     videojs.xhr({
+ *       body: someJSONString,
+ *       uri: "/foo",
+ *       headers: {
+ *         "Content-Type": "application/json"
+ *       }
+ *     }, function (err, resp, body) {
+ *       // check resp.statusCode
+ *     });
+ *
+ * Check out the [full
+ * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)
+ * for more options.
+ *
+ * @param {Object} options settings for the request.
+ * @return {XMLHttpRequest|XDomainRequest} the request object.
+ * @see https://github.com/Raynos/xhr
+ */
+videojs.xhr = _xhr2['default'];
+
+/**
+ * TextTrack class
+ *
+ * @type {Function}
+ */
+videojs.TextTrack = _textTrack2['default'];
+
+/**
+ * export the AudioTrack class so that source handlers can create
+ * AudioTracks and then add them to the players AudioTrackList
+ *
+ * @type {Function}
+ */
+videojs.AudioTrack = _audioTrack2['default'];
+
+/**
+ * export the VideoTrack class so that source handlers can create
+ * VideoTracks and then add them to the players VideoTrackList
+ *
+ * @type {Function}
+ */
+videojs.VideoTrack = _videoTrack2['default'];
+
+/**
+ * Determines, via duck typing, whether or not a value is a DOM element.
+ *
+ * @method isEl
+ * @param  {Mixed} value
+ * @return {Boolean}
+ */
+videojs.isEl = Dom.isEl;
+
+/**
+ * Determines, via duck typing, whether or not a value is a text node.
+ *
+ * @method isTextNode
+ * @param  {Mixed} value
+ * @return {Boolean}
+ */
+videojs.isTextNode = Dom.isTextNode;
+
+/**
+ * Creates an element and applies properties.
+ *
+ * @method createEl
+ * @param  {String} [tagName='div'] Name of tag to be created.
+ * @param  {Object} [properties={}] Element properties to be applied.
+ * @param  {Object} [attributes={}] Element attributes to be applied.
+ * @return {Element}
+ */
+videojs.createEl = Dom.createEl;
+
+/**
+ * Check if an element has a CSS class
+ *
+ * @method hasClass
+ * @param {Element} element Element to check
+ * @param {String} classToCheck Classname to check
+ */
+videojs.hasClass = Dom.hasElClass;
+
+/**
+ * Add a CSS class name to an element
+ *
+ * @method addClass
+ * @param {Element} element    Element to add class name to
+ * @param {String} classToAdd Classname to add
+ */
+videojs.addClass = Dom.addElClass;
+
+/**
+ * Remove a CSS class name from an element
+ *
+ * @method removeClass
+ * @param {Element} element    Element to remove from class name
+ * @param {String} classToRemove Classname to remove
+ */
+videojs.removeClass = Dom.removeElClass;
+
+/**
+ * Adds or removes a CSS class name on an element depending on an optional
+ * condition or the presence/absence of the class name.
+ *
+ * @method toggleElClass
+ * @param  {Element} element
+ * @param  {String} classToToggle
+ * @param  {Boolean|Function} [predicate]
+ *         Can be a function that returns a Boolean. If `true`, the class
+ *         will be added; if `false`, the class will be removed. If not
+ *         given, the class will be added if not present and vice versa.
+ */
+videojs.toggleClass = Dom.toggleElClass;
+
+/**
+ * Apply attributes to an HTML element.
+ *
+ * @method setAttributes
+ * @param  {Element} el         Target element.
+ * @param  {Object=} attributes Element attributes to be applied.
+ */
+videojs.setAttributes = Dom.setElAttributes;
+
+/**
+ * Get an element's attribute values, as defined on the HTML tag
+ * Attributes are not the same as properties. They're defined on the tag
+ * or with setAttribute (which shouldn't be used with HTML)
+ * This will return true or false for boolean attributes.
+ *
+ * @method getAttributes
+ * @param  {Element} tag Element from which to get tag attributes
+ * @return {Object}
+ */
+videojs.getAttributes = Dom.getElAttributes;
+
+/**
+ * Empties the contents of an element.
+ *
+ * @method emptyEl
+ * @param  {Element} el
+ * @return {Element}
+ */
+videojs.emptyEl = Dom.emptyEl;
+
+/**
+ * Normalizes and appends content to an element.
+ *
+ * The content for an element can be passed in multiple types and
+ * combinations, whose behavior is as follows:
+ *
+ * - String
+ *   Normalized into a text node.
+ *
+ * - Element, TextNode
+ *   Passed through.
+ *
+ * - Array
+ *   A one-dimensional array of strings, elements, nodes, or functions (which
+ *   return single strings, elements, or nodes).
+ *
+ * - Function
+ *   If the sole argument, is expected to produce a string, element,
+ *   node, or array.
+ *
+ * @method appendContent
+ * @param  {Element} el
+ * @param  {String|Element|TextNode|Array|Function} content
+ * @return {Element}
+ */
+videojs.appendContent = Dom.appendContent;
+
+/**
+ * Normalizes and inserts content into an element; this is identical to
+ * `appendContent()`, except it empties the element first.
+ *
+ * The content for an element can be passed in multiple types and
+ * combinations, whose behavior is as follows:
+ *
+ * - String
+ *   Normalized into a text node.
+ *
+ * - Element, TextNode
+ *   Passed through.
+ *
+ * - Array
+ *   A one-dimensional array of strings, elements, nodes, or functions (which
+ *   return single strings, elements, or nodes).
+ *
+ * - Function
+ *   If the sole argument, is expected to produce a string, element,
+ *   node, or array.
+ *
+ * @method insertContent
+ * @param  {Element} el
+ * @param  {String|Element|TextNode|Array|Function} content
+ * @return {Element}
+ */
+videojs.insertContent = Dom.insertContent;
+
+/*
+ * Custom Universal Module Definition (UMD)
+ *
+ * Video.js will never be a non-browser lib so we can simplify UMD a bunch and
+ * still support requirejs and browserify. This also needs to be closure
+ * compiler compatible, so string keys are used.
+ */
+if (typeof define === 'function' && define.amd) {
+  define('videojs', [], function () {
+    return videojs;
+  });
+
+  // checking that module is an object too because of umdjs/umd#35
+} else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && (typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') {
+  module.exports = videojs;
+}
+
+exports['default'] = videojs;
+
+},{"./component":5,"./event-target":42,"./extend.js":43,"./player":51,"./plugins.js":52,"./setup":56,"./tech/tech.js":62,"./tracks/audio-track.js":64,"./tracks/text-track.js":72,"./tracks/video-track.js":77,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/format-time.js":83,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/url.js":90,"global/document":92,"global/window":93,"lodash-compat/object/merge":131,"xhr":147}],92:[function(_dereq_,module,exports){
+(function (global){
+var topLevel = typeof global !== 'undefined' ? global :
+    typeof window !== 'undefined' ? window : {}
+var minDoc = _dereq_('min-document');
+
+if (typeof document !== 'undefined') {
+    module.exports = document;
+} else {
+    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
+
+    if (!doccy) {
+        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
+    }
+
+    module.exports = doccy;
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"min-document":94}],93:[function(_dereq_,module,exports){
+(function (global){
+if (typeof window !== "undefined") {
+    module.exports = window;
+} else if (typeof global !== "undefined") {
+    module.exports = global;
+} else if (typeof self !== "undefined"){
+    module.exports = self;
+} else {
+    module.exports = {};
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],94:[function(_dereq_,module,exports){
+
+},{}],95:[function(_dereq_,module,exports){
+var getNative = _dereq_('../internal/getNative');
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeNow = getNative(Date, 'now');
+
+/**
+ * Gets the number of milliseconds that have elapsed since the Unix epoch
+ * (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @category Date
+ * @example
+ *
+ * _.defer(function(stamp) {
+ *   console.log(_.now() - stamp);
+ * }, _.now());
+ * // => logs the number of milliseconds it took for the deferred function to be invoked
+ */
+var now = nativeNow || function() {
+  return new Date().getTime();
+};
+
+module.exports = now;
+
+},{"../internal/getNative":111}],96:[function(_dereq_,module,exports){
+var isObject = _dereq_('../lang/isObject'),
+    now = _dereq_('../date/now');
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed invocations. Provide an options object to indicate that `func`
+ * should be invoked on the leading and/or trailing edge of the `wait` timeout.
+ * Subsequent calls to the debounced function return the result of the last
+ * `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the debounced function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=false] Specify invoking on the leading
+ *  edge of the timeout.
+ * @param {number} [options.maxWait] The maximum time `func` is allowed to be
+ *  delayed before it's invoked.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ *  edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // avoid costly calculations while the window size is in flux
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
+ * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
+ *   'leading': true,
+ *   'trailing': false
+ * }));
+ *
+ * // ensure `batchLog` is invoked once after 1 second of debounced calls
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', _.debounce(batchLog, 250, {
+ *   'maxWait': 1000
+ * }));
+ *
+ * // cancel a debounced call
+ * var todoChanges = _.debounce(batchLog, 1000);
+ * Object.observe(models.todo, todoChanges);
+ *
+ * Object.observe(models, function(changes) {
+ *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
+ *     todoChanges.cancel();
+ *   }
+ * }, ['delete']);
+ *
+ * // ...at some point `models.todo` is changed
+ * models.todo.completed = true;
+ *
+ * // ...before 1 second has passed `models.todo` is deleted
+ * // which cancels the debounced `todoChanges` call
+ * delete models.todo;
+ */
+function debounce(func, wait, options) {
+  var args,
+      maxTimeoutId,
+      result,
+      stamp,
+      thisArg,
+      timeoutId,
+      trailingCall,
+      lastCalled = 0,
+      maxWait = false,
+      trailing = true;
+
+  if (typeof func != 'function') {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  wait = wait < 0 ? 0 : (+wait || 0);
+  if (options === true) {
+    var leading = true;
+    trailing = false;
+  } else if (isObject(options)) {
+    leading = !!options.leading;
+    maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
+    trailing = 'trailing' in options ? !!options.trailing : trailing;
+  }
+
+  function cancel() {
+    if (timeoutId) {
+      clearTimeout(timeoutId);
+    }
+    if (maxTimeoutId) {
+      clearTimeout(maxTimeoutId);
+    }
+    lastCalled = 0;
+    maxTimeoutId = timeoutId = trailingCall = undefined;
+  }
+
+  function complete(isCalled, id) {
+    if (id) {
+      clearTimeout(id);
+    }
+    maxTimeoutId = timeoutId = trailingCall = undefined;
+    if (isCalled) {
+      lastCalled = now();
+      result = func.apply(thisArg, args);
+      if (!timeoutId && !maxTimeoutId) {
+        args = thisArg = undefined;
+      }
+    }
+  }
+
+  function delayed() {
+    var remaining = wait - (now() - stamp);
+    if (remaining <= 0 || remaining > wait) {
+      complete(trailingCall, maxTimeoutId);
+    } else {
+      timeoutId = setTimeout(delayed, remaining);
+    }
+  }
+
+  function maxDelayed() {
+    complete(trailing, timeoutId);
+  }
+
+  function debounced() {
+    args = arguments;
+    stamp = now();
+    thisArg = this;
+    trailingCall = trailing && (timeoutId || !leading);
+
+    if (maxWait === false) {
+      var leadingCall = leading && !timeoutId;
+    } else {
+      if (!maxTimeoutId && !leading) {
+        lastCalled = stamp;
+      }
+      var remaining = maxWait - (stamp - lastCalled),
+          isCalled = remaining <= 0 || remaining > maxWait;
+
+      if (isCalled) {
+        if (maxTimeoutId) {
+          maxTimeoutId = clearTimeout(maxTimeoutId);
+        }
+        lastCalled = stamp;
+        result = func.apply(thisArg, args);
+      }
+      else if (!maxTimeoutId) {
+        maxTimeoutId = setTimeout(maxDelayed, remaining);
+      }
+    }
+    if (isCalled && timeoutId) {
+      timeoutId = clearTimeout(timeoutId);
+    }
+    else if (!timeoutId && wait !== maxWait) {
+      timeoutId = setTimeout(delayed, wait);
+    }
+    if (leadingCall) {
+      isCalled = true;
+      result = func.apply(thisArg, args);
+    }
+    if (isCalled && !timeoutId && !maxTimeoutId) {
+      args = thisArg = undefined;
+    }
+    return result;
+  }
+  debounced.cancel = cancel;
+  return debounced;
+}
+
+module.exports = debounce;
+
+},{"../date/now":95,"../lang/isObject":124}],97:[function(_dereq_,module,exports){
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ *   return what + ' ' + _.initial(names).join(', ') +
+ *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+function restParam(func, start) {
+  if (typeof func != 'function') {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+  return function() {
+    var args = arguments,
+        index = -1,
+        length = nativeMax(args.length - start, 0),
+        rest = Array(length);
+
+    while (++index < length) {
+      rest[index] = args[start + index];
+    }
+    switch (start) {
+      case 0: return func.call(this, rest);
+      case 1: return func.call(this, args[0], rest);
+      case 2: return func.call(this, args[0], args[1], rest);
+    }
+    var otherArgs = Array(start + 1);
+    index = -1;
+    while (++index < start) {
+      otherArgs[index] = args[index];
+    }
+    otherArgs[start] = rest;
+    return func.apply(this, otherArgs);
+  };
+}
+
+module.exports = restParam;
+
+},{}],98:[function(_dereq_,module,exports){
+var debounce = _dereq_('./debounce'),
+    isObject = _dereq_('../lang/isObject');
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed invocations. Provide an options object to indicate
+ * that `func` should be invoked on the leading and/or trailing edge of the
+ * `wait` timeout. Subsequent calls to the throttled function return the
+ * result of the last `func` call.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the throttled function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=true] Specify invoking on the leading
+ *  edge of the timeout.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ *  edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // avoid excessively updating the position while scrolling
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
+ * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
+ *   'trailing': false
+ * }));
+ *
+ * // cancel a trailing throttled call
+ * jQuery(window).on('popstate', throttled.cancel);
+ */
+function throttle(func, wait, options) {
+  var leading = true,
+      trailing = true;
+
+  if (typeof func != 'function') {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  if (options === false) {
+    leading = false;
+  } else if (isObject(options)) {
+    leading = 'leading' in options ? !!options.leading : leading;
+    trailing = 'trailing' in options ? !!options.trailing : trailing;
+  }
+  return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
+}
+
+module.exports = throttle;
+
+},{"../lang/isObject":124,"./debounce":96}],99:[function(_dereq_,module,exports){
+/**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+function arrayCopy(source, array) {
+  var index = -1,
+      length = source.length;
+
+  array || (array = Array(length));
+  while (++index < length) {
+    array[index] = source[index];
+  }
+  return array;
+}
+
+module.exports = arrayCopy;
+
+},{}],100:[function(_dereq_,module,exports){
+/**
+ * A specialized version of `_.forEach` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+function arrayEach(array, iteratee) {
+  var index = -1,
+      length = array.length;
+
+  while (++index < length) {
+    if (iteratee(array[index], index, array) === false) {
+      break;
+    }
+  }
+  return array;
+}
+
+module.exports = arrayEach;
+
+},{}],101:[function(_dereq_,module,exports){
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+function baseCopy(source, props, object) {
+  object || (object = {});
+
+  var index = -1,
+      length = props.length;
+
+  while (++index < length) {
+    var key = props[index];
+    object[key] = source[key];
+  }
+  return object;
+}
+
+module.exports = baseCopy;
+
+},{}],102:[function(_dereq_,module,exports){
+var createBaseFor = _dereq_('./createBaseFor');
+
+/**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+var baseFor = createBaseFor();
+
+module.exports = baseFor;
+
+},{"./createBaseFor":109}],103:[function(_dereq_,module,exports){
+var baseFor = _dereq_('./baseFor'),
+    keysIn = _dereq_('../object/keysIn');
+
+/**
+ * The base implementation of `_.forIn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+function baseForIn(object, iteratee) {
+  return baseFor(object, iteratee, keysIn);
+}
+
+module.exports = baseForIn;
+
+},{"../object/keysIn":130,"./baseFor":102}],104:[function(_dereq_,module,exports){
+var arrayEach = _dereq_('./arrayEach'),
+    baseMergeDeep = _dereq_('./baseMergeDeep'),
+    isArray = _dereq_('../lang/isArray'),
+    isArrayLike = _dereq_('./isArrayLike'),
+    isObject = _dereq_('../lang/isObject'),
+    isObjectLike = _dereq_('./isObjectLike'),
+    isTypedArray = _dereq_('../lang/isTypedArray'),
+    keys = _dereq_('../object/keys');
+
+/**
+ * The base implementation of `_.merge` without support for argument juggling,
+ * multiple sources, and `this` binding `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {Object} Returns `object`.
+ */
+function baseMerge(object, source, customizer, stackA, stackB) {
+  if (!isObject(object)) {
+    return object;
+  }
+  var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
+      props = isSrcArr ? undefined : keys(source);
+
+  arrayEach(props || source, function(srcValue, key) {
+    if (props) {
+      key = srcValue;
+      srcValue = source[key];
+    }
+    if (isObjectLike(srcValue)) {
+      stackA || (stackA = []);
+      stackB || (stackB = []);
+      baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
+    }
+    else {
+      var value = object[key],
+          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+          isCommon = result === undefined;
+
+      if (isCommon) {
+        result = srcValue;
+      }
+      if ((result !== undefined || (isSrcArr && !(key in object))) &&
+          (isCommon || (result === result ? (result !== value) : (value === value)))) {
+        object[key] = result;
+      }
+    }
+  });
+  return object;
+}
+
+module.exports = baseMerge;
+
+},{"../lang/isArray":121,"../lang/isObject":124,"../lang/isTypedArray":127,"../object/keys":129,"./arrayEach":100,"./baseMergeDeep":105,"./isArrayLike":112,"./isObjectLike":117}],105:[function(_dereq_,module,exports){
+var arrayCopy = _dereq_('./arrayCopy'),
+    isArguments = _dereq_('../lang/isArguments'),
+    isArray = _dereq_('../lang/isArray'),
+    isArrayLike = _dereq_('./isArrayLike'),
+    isPlainObject = _dereq_('../lang/isPlainObject'),
+    isTypedArray = _dereq_('../lang/isTypedArray'),
+    toPlainObject = _dereq_('../lang/toPlainObject');
+
+/**
+ * A specialized version of `baseMerge` for arrays and objects which performs
+ * deep merges and tracks traversed objects enabling objects with circular
+ * references to be merged.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {string} key The key of the value to merge.
+ * @param {Function} mergeFunc The function to merge values.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
+  var length = stackA.length,
+      srcValue = source[key];
+
+  while (length--) {
+    if (stackA[length] == srcValue) {
+      object[key] = stackB[length];
+      return;
+    }
+  }
+  var value = object[key],
+      result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+      isCommon = result === undefined;
+
+  if (isCommon) {
+    result = srcValue;
+    if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
+      result = isArray(value)
+        ? value
+        : (isArrayLike(value) ? arrayCopy(value) : []);
+    }
+    else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+      result = isArguments(value)
+        ? toPlainObject(value)
+        : (isPlainObject(value) ? value : {});
+    }
+    else {
+      isCommon = false;
+    }
+  }
+  // Add the source value to the stack of traversed objects and associate
+  // it with its merged value.
+  stackA.push(srcValue);
+  stackB.push(result);
+
+  if (isCommon) {
+    // Recursively merge objects and arrays (susceptible to call stack limits).
+    object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
+  } else if (result === result ? (result !== value) : (value === value)) {
+    object[key] = result;
+  }
+}
+
+module.exports = baseMergeDeep;
+
+},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isPlainObject":125,"../lang/isTypedArray":127,"../lang/toPlainObject":128,"./arrayCopy":99,"./isArrayLike":112}],106:[function(_dereq_,module,exports){
+var toObject = _dereq_('./toObject');
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+function baseProperty(key) {
+  return function(object) {
+    return object == null ? undefined : toObject(object)[key];
+  };
+}
+
+module.exports = baseProperty;
+
+},{"./toObject":119}],107:[function(_dereq_,module,exports){
+var identity = _dereq_('../utility/identity');
+
+/**
+ * A specialized version of `baseCallback` which only supports `this` binding
+ * and specifying the number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+function bindCallback(func, thisArg, argCount) {
+  if (typeof func != 'function') {
+    return identity;
+  }
+  if (thisArg === undefined) {
+    return func;
+  }
+  switch (argCount) {
+    case 1: return function(value) {
+      return func.call(thisArg, value);
+    };
+    case 3: return function(value, index, collection) {
+      return func.call(thisArg, value, index, collection);
+    };
+    case 4: return function(accumulator, value, index, collection) {
+      return func.call(thisArg, accumulator, value, index, collection);
+    };
+    case 5: return function(value, other, key, object, source) {
+      return func.call(thisArg, value, other, key, object, source);
+    };
+  }
+  return function() {
+    return func.apply(thisArg, arguments);
+  };
+}
+
+module.exports = bindCallback;
+
+},{"../utility/identity":133}],108:[function(_dereq_,module,exports){
+var bindCallback = _dereq_('./bindCallback'),
+    isIterateeCall = _dereq_('./isIterateeCall'),
+    restParam = _dereq_('../function/restParam');
+
+/**
+ * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+function createAssigner(assigner) {
+  return restParam(function(object, sources) {
+    var index = -1,
+        length = object == null ? 0 : sources.length,
+        customizer = length > 2 ? sources[length - 2] : undefined,
+        guard = length > 2 ? sources[2] : undefined,
+        thisArg = length > 1 ? sources[length - 1] : undefined;
+
+    if (typeof customizer == 'function') {
+      customizer = bindCallback(customizer, thisArg, 5);
+      length -= 2;
+    } else {
+      customizer = typeof thisArg == 'function' ? thisArg : undefined;
+      length -= (customizer ? 1 : 0);
+    }
+    if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+      customizer = length < 3 ? undefined : customizer;
+      length = 1;
+    }
+    while (++index < length) {
+      var source = sources[index];
+      if (source) {
+        assigner(object, source, customizer);
+      }
+    }
+    return object;
+  });
+}
+
+module.exports = createAssigner;
+
+},{"../function/restParam":97,"./bindCallback":107,"./isIterateeCall":115}],109:[function(_dereq_,module,exports){
+var toObject = _dereq_('./toObject');
+
+/**
+ * Creates a base function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+function createBaseFor(fromRight) {
+  return function(object, iteratee, keysFunc) {
+    var iterable = toObject(object),
+        props = keysFunc(object),
+        length = props.length,
+        index = fromRight ? length : -1;
+
+    while ((fromRight ? index-- : ++index < length)) {
+      var key = props[index];
+      if (iteratee(iterable[key], key, iterable) === false) {
+        break;
+      }
+    }
+    return object;
+  };
+}
+
+module.exports = createBaseFor;
+
+},{"./toObject":119}],110:[function(_dereq_,module,exports){
+var baseProperty = _dereq_('./baseProperty');
+
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+var getLength = baseProperty('length');
+
+module.exports = getLength;
+
+},{"./baseProperty":106}],111:[function(_dereq_,module,exports){
+var isNative = _dereq_('../lang/isNative');
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+  var value = object == null ? undefined : object[key];
+  return isNative(value) ? value : undefined;
+}
+
+module.exports = getNative;
+
+},{"../lang/isNative":123}],112:[function(_dereq_,module,exports){
+var getLength = _dereq_('./getLength'),
+    isLength = _dereq_('./isLength');
+
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+function isArrayLike(value) {
+  return value != null && isLength(getLength(value));
+}
+
+module.exports = isArrayLike;
+
+},{"./getLength":110,"./isLength":116}],113:[function(_dereq_,module,exports){
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+var isHostObject = (function() {
+  try {
+    Object({ 'toString': 0 } + '');
+  } catch(e) {
+    return function() { return false; };
+  }
+  return function(value) {
+    // IE < 9 presents many host objects as `Object` objects that can coerce
+    // to strings despite having improperly defined `toString` methods.
+    return typeof value.toString != 'function' && typeof (value + '') == 'string';
+  };
+}());
+
+module.exports = isHostObject;
+
+},{}],114:[function(_dereq_,module,exports){
+/** Used to detect unsigned integer values. */
+var reIsUint = /^\d+$/;
+
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+  length = length == null ? MAX_SAFE_INTEGER : length;
+  return value > -1 && value % 1 == 0 && value < length;
+}
+
+module.exports = isIndex;
+
+},{}],115:[function(_dereq_,module,exports){
+var isArrayLike = _dereq_('./isArrayLike'),
+    isIndex = _dereq_('./isIndex'),
+    isObject = _dereq_('../lang/isObject');
+
+/**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */
+function isIterateeCall(value, index, object) {
+  if (!isObject(object)) {
+    return false;
+  }
+  var type = typeof index;
+  if (type == 'number'
+      ? (isArrayLike(object) && isIndex(index, object.length))
+      : (type == 'string' && index in object)) {
+    var other = object[index];
+    return value === value ? (value === other) : (other !== other);
+  }
+  return false;
+}
+
+module.exports = isIterateeCall;
+
+},{"../lang/isObject":124,"./isArrayLike":112,"./isIndex":114}],116:[function(_dereq_,module,exports){
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+module.exports = isLength;
+
+},{}],117:[function(_dereq_,module,exports){
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+  return !!value && typeof value == 'object';
+}
+
+module.exports = isObjectLike;
+
+},{}],118:[function(_dereq_,module,exports){
+var isArguments = _dereq_('../lang/isArguments'),
+    isArray = _dereq_('../lang/isArray'),
+    isIndex = _dereq_('./isIndex'),
+    isLength = _dereq_('./isLength'),
+    isString = _dereq_('../lang/isString'),
+    keysIn = _dereq_('../object/keysIn');
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function shimKeys(object) {
+  var props = keysIn(object),
+      propsLength = props.length,
+      length = propsLength && object.length;
+
+  var allowIndexes = !!length && isLength(length) &&
+    (isArray(object) || isArguments(object) || isString(object));
+
+  var index = -1,
+      result = [];
+
+  while (++index < propsLength) {
+    var key = props[index];
+    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+      result.push(key);
+    }
+  }
+  return result;
+}
+
+module.exports = shimKeys;
+
+},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isString":126,"../object/keysIn":130,"./isIndex":114,"./isLength":116}],119:[function(_dereq_,module,exports){
+var isObject = _dereq_('../lang/isObject'),
+    isString = _dereq_('../lang/isString'),
+    support = _dereq_('../support');
+
+/**
+ * Converts `value` to an object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Object} Returns the object.
+ */
+function toObject(value) {
+  if (support.unindexedChars && isString(value)) {
+    var index = -1,
+        length = value.length,
+        result = Object(value);
+
+    while (++index < length) {
+      result[index] = value.charAt(index);
+    }
+    return result;
+  }
+  return isObject(value) ? value : Object(value);
+}
+
+module.exports = toObject;
+
+},{"../lang/isObject":124,"../lang/isString":126,"../support":132}],120:[function(_dereq_,module,exports){
+var isArrayLike = _dereq_('../internal/isArrayLike'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/** Native method references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/**
+ * Checks if `value` is classified as an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+  return isObjectLike(value) && isArrayLike(value) &&
+    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+}
+
+module.exports = isArguments;
+
+},{"../internal/isArrayLike":112,"../internal/isObjectLike":117}],121:[function(_dereq_,module,exports){
+var getNative = _dereq_('../internal/getNative'),
+    isLength = _dereq_('../internal/isLength'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** `Object#toString` result references. */
+var arrayTag = '[object Array]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsArray = getNative(Array, 'isArray');
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+var isArray = nativeIsArray || function(value) {
+  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+};
+
+module.exports = isArray;
+
+},{"../internal/getNative":111,"../internal/isLength":116,"../internal/isObjectLike":117}],122:[function(_dereq_,module,exports){
+var isObject = _dereq_('./isObject');
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+  // The use of `Object#toString` avoids issues with the `typeof` operator
+  // in older versions of Chrome and Safari which return 'function' for regexes
+  // and Safari 8 which returns 'object' for typed array constructors.
+  return isObject(value) && objToString.call(value) == funcTag;
+}
+
+module.exports = isFunction;
+
+},{"./isObject":124}],123:[function(_dereq_,module,exports){
+var isFunction = _dereq_('./isFunction'),
+    isHostObject = _dereq_('../internal/isHostObject'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var fnToString = Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+  fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+  if (value == null) {
+    return false;
+  }
+  if (isFunction(value)) {
+    return reIsNative.test(fnToString.call(value));
+  }
+  return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+module.exports = isNative;
+
+},{"../internal/isHostObject":113,"../internal/isObjectLike":117,"./isFunction":122}],124:[function(_dereq_,module,exports){
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+  // Avoid a V8 JIT bug in Chrome 19-20.
+  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+  var type = typeof value;
+  return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = isObject;
+
+},{}],125:[function(_dereq_,module,exports){
+var baseForIn = _dereq_('../internal/baseForIn'),
+    isArguments = _dereq_('./isArguments'),
+    isHostObject = _dereq_('../internal/isHostObject'),
+    isObjectLike = _dereq_('../internal/isObjectLike'),
+    support = _dereq_('../support');
+
+/** `Object#toString` result references. */
+var objectTag = '[object Object]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * **Note:** This method assumes objects created by the `Object` constructor
+ * have no inherited enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+function isPlainObject(value) {
+  var Ctor;
+
+  // Exit early for non `Object` objects.
+  if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||
+      (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
+    return false;
+  }
+  // IE < 9 iterates inherited properties before own properties. If the first
+  // iterated property is an object's own property then there are no inherited
+  // enumerable properties.
+  var result;
+  if (support.ownLast) {
+    baseForIn(value, function(subValue, key, object) {
+      result = hasOwnProperty.call(object, key);
+      return false;
+    });
+    return result !== false;
+  }
+  // In most environments an object's own properties are iterated before
+  // its inherited properties. If the last iterated property is an object's
+  // own property then there are no inherited enumerable properties.
+  baseForIn(value, function(subValue, key) {
+    result = key;
+  });
+  return result === undefined || hasOwnProperty.call(value, result);
+}
+
+module.exports = isPlainObject;
+
+},{"../internal/baseForIn":103,"../internal/isHostObject":113,"../internal/isObjectLike":117,"../support":132,"./isArguments":120}],126:[function(_dereq_,module,exports){
+var isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** `Object#toString` result references. */
+var stringTag = '[object String]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+function isString(value) {
+  return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
+}
+
+module.exports = isString;
+
+},{"../internal/isObjectLike":117}],127:[function(_dereq_,module,exports){
+var isLength = _dereq_('../internal/isLength'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+    arrayTag = '[object Array]',
+    boolTag = '[object Boolean]',
+    dateTag = '[object Date]',
+    errorTag = '[object Error]',
+    funcTag = '[object Function]',
+    mapTag = '[object Map]',
+    numberTag = '[object Number]',
+    objectTag = '[object Object]',
+    regexpTag = '[object RegExp]',
+    setTag = '[object Set]',
+    stringTag = '[object String]',
+    weakMapTag = '[object WeakMap]';
+
+var arrayBufferTag = '[object ArrayBuffer]',
+    float32Tag = '[object Float32Array]',
+    float64Tag = '[object Float64Array]',
+    int8Tag = '[object Int8Array]',
+    int16Tag = '[object Int16Array]',
+    int32Tag = '[object Int32Array]',
+    uint8Tag = '[object Uint8Array]',
+    uint8ClampedTag = '[object Uint8ClampedArray]',
+    uint16Tag = '[object Uint16Array]',
+    uint32Tag = '[object Uint32Array]';
+
+/** Used to identify `toStringTag` values of typed arrays. */
+var typedArrayTags = {};
+typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+typedArrayTags[uint32Tag] = true;
+typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+typedArrayTags[dateTag] = typedArrayTags[errorTag] =
+typedArrayTags[funcTag] = typedArrayTags[mapTag] =
+typedArrayTags[numberTag] = typedArrayTags[objectTag] =
+typedArrayTags[regexpTag] = typedArrayTags[setTag] =
+typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+function isTypedArray(value) {
+  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
+}
+
+module.exports = isTypedArray;
+
+},{"../internal/isLength":116,"../internal/isObjectLike":117}],128:[function(_dereq_,module,exports){
+var baseCopy = _dereq_('../internal/baseCopy'),
+    keysIn = _dereq_('../object/keysIn');
+
+/**
+ * Converts `value` to a plain object flattening inherited enumerable
+ * properties of `value` to own properties of the plain object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Object} Returns the converted plain object.
+ * @example
+ *
+ * function Foo() {
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.assign({ 'a': 1 }, new Foo);
+ * // => { 'a': 1, 'b': 2 }
+ *
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
+ */
+function toPlainObject(value) {
+  return baseCopy(value, keysIn(value));
+}
+
+module.exports = toPlainObject;
+
+},{"../internal/baseCopy":101,"../object/keysIn":130}],129:[function(_dereq_,module,exports){
+var getNative = _dereq_('../internal/getNative'),
+    isArrayLike = _dereq_('../internal/isArrayLike'),
+    isObject = _dereq_('../lang/isObject'),
+    shimKeys = _dereq_('../internal/shimKeys'),
+    support = _dereq_('../support');
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeKeys = getNative(Object, 'keys');
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+var keys = !nativeKeys ? shimKeys : function(object) {
+  var Ctor = object == null ? undefined : object.constructor;
+  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+      (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {
+    return shimKeys(object);
+  }
+  return isObject(object) ? nativeKeys(object) : [];
+};
+
+module.exports = keys;
+
+},{"../internal/getNative":111,"../internal/isArrayLike":112,"../internal/shimKeys":118,"../lang/isObject":124,"../support":132}],130:[function(_dereq_,module,exports){
+var arrayEach = _dereq_('../internal/arrayEach'),
+    isArguments = _dereq_('../lang/isArguments'),
+    isArray = _dereq_('../lang/isArray'),
+    isFunction = _dereq_('../lang/isFunction'),
+    isIndex = _dereq_('../internal/isIndex'),
+    isLength = _dereq_('../internal/isLength'),
+    isObject = _dereq_('../lang/isObject'),
+    isString = _dereq_('../lang/isString'),
+    support = _dereq_('../support');
+
+/** `Object#toString` result references. */
+var arrayTag = '[object Array]',
+    boolTag = '[object Boolean]',
+    dateTag = '[object Date]',
+    errorTag = '[object Error]',
+    funcTag = '[object Function]',
+    numberTag = '[object Number]',
+    objectTag = '[object Object]',
+    regexpTag = '[object RegExp]',
+    stringTag = '[object String]';
+
+/** Used to fix the JScript `[[DontEnum]]` bug. */
+var shadowProps = [
+  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
+  'toLocaleString', 'toString', 'valueOf'
+];
+
+/** Used for native method references. */
+var errorProto = Error.prototype,
+    objectProto = Object.prototype,
+    stringProto = String.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/** Used to avoid iterating over non-enumerable properties in IE < 9. */
+var nonEnumProps = {};
+nonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
+nonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };
+nonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };
+nonEnumProps[objectTag] = { 'constructor': true };
+
+arrayEach(shadowProps, function(key) {
+  for (var tag in nonEnumProps) {
+    if (hasOwnProperty.call(nonEnumProps, tag)) {
+      var props = nonEnumProps[tag];
+      props[key] = hasOwnProperty.call(props, key);
+    }
+  }
+});
+
+/**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+function keysIn(object) {
+  if (object == null) {
+    return [];
+  }
+  if (!isObject(object)) {
+    object = Object(object);
+  }
+  var length = object.length;
+
+  length = (length && isLength(length) &&
+    (isArray(object) || isArguments(object) || isString(object)) && length) || 0;
+
+  var Ctor = object.constructor,
+      index = -1,
+      proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,
+      isProto = proto === object,
+      result = Array(length),
+      skipIndexes = length > 0,
+      skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),
+      skipProto = support.enumPrototypes && isFunction(object);
+
+  while (++index < length) {
+    result[index] = (index + '');
+  }
+  // lodash skips the `constructor` property when it infers it's iterating
+  // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`
+  // attribute of an existing property and the `constructor` property of a
+  // prototype defaults to non-enumerable.
+  for (var key in object) {
+    if (!(skipProto && key == 'prototype') &&
+        !(skipErrorProps && (key == 'message' || key == 'name')) &&
+        !(skipIndexes && isIndex(key, length)) &&
+        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+      result.push(key);
+    }
+  }
+  if (support.nonEnumShadows && object !== objectProto) {
+    var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),
+        nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];
+
+    if (tag == objectTag) {
+      proto = objectProto;
+    }
+    length = shadowProps.length;
+    while (length--) {
+      key = shadowProps[length];
+      var nonEnum = nonEnums[key];
+      if (!(isProto && nonEnum) &&
+          (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {
+        result.push(key);
+      }
+    }
+  }
+  return result;
+}
+
+module.exports = keysIn;
+
+},{"../internal/arrayEach":100,"../internal/isIndex":114,"../internal/isLength":116,"../lang/isArguments":120,"../lang/isArray":121,"../lang/isFunction":122,"../lang/isObject":124,"../lang/isString":126,"../support":132}],131:[function(_dereq_,module,exports){
+var baseMerge = _dereq_('../internal/baseMerge'),
+    createAssigner = _dereq_('../internal/createAssigner');
+
+/**
+ * Recursively merges own enumerable properties of the source object(s), that
+ * don't resolve to `undefined` into the destination object. Subsequent sources
+ * overwrite property assignments of previous sources. If `customizer` is
+ * provided it's invoked to produce the merged values of the destination and
+ * source properties. If `customizer` returns `undefined` merging is handled
+ * by the method instead. The `customizer` is bound to `thisArg` and invoked
+ * with five arguments: (objectValue, sourceValue, key, object, source).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var users = {
+ *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
+ * };
+ *
+ * var ages = {
+ *   'data': [{ 'age': 36 }, { 'age': 40 }]
+ * };
+ *
+ * _.merge(users, ages);
+ * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
+ *
+ * // using a customizer callback
+ * var object = {
+ *   'fruits': ['apple'],
+ *   'vegetables': ['beet']
+ * };
+ *
+ * var other = {
+ *   'fruits': ['banana'],
+ *   'vegetables': ['carrot']
+ * };
+ *
+ * _.merge(object, other, function(a, b) {
+ *   if (_.isArray(a)) {
+ *     return a.concat(b);
+ *   }
+ * });
+ * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
+ */
+var merge = createAssigner(baseMerge);
+
+module.exports = merge;
+
+},{"../internal/baseMerge":104,"../internal/createAssigner":108}],132:[function(_dereq_,module,exports){
+/** Used for native method references. */
+var arrayProto = Array.prototype,
+    errorProto = Error.prototype,
+    objectProto = Object.prototype;
+
+/** Native method references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable,
+    splice = arrayProto.splice;
+
+/**
+ * An object environment feature flags.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+var support = {};
+
+(function(x) {
+  var Ctor = function() { this.x = x; },
+      object = { '0': x, 'length': x },
+      props = [];
+
+  Ctor.prototype = { 'valueOf': x, 'y': x };
+  for (var key in new Ctor) { props.push(key); }
+
+  /**
+   * Detect if `name` or `message` properties of `Error.prototype` are
+   * enumerable by default (IE < 9, Safari < 5.1).
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||
+    propertyIsEnumerable.call(errorProto, 'name');
+
+  /**
+   * Detect if `prototype` properties are enumerable by default.
+   *
+   * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
+   * (if the prototype or a property on the prototype has been set)
+   * incorrectly set the `[[Enumerable]]` value of a function's `prototype`
+   * property to `true`.
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');
+
+  /**
+   * Detect if properties shadowing those on `Object.prototype` are non-enumerable.
+   *
+   * In IE < 9 an object's own properties, shadowing non-enumerable ones,
+   * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.nonEnumShadows = !/valueOf/.test(props);
+
+  /**
+   * Detect if own properties are iterated after inherited properties (IE < 9).
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.ownLast = props[0] != 'x';
+
+  /**
+   * Detect if `Array#shift` and `Array#splice` augment array-like objects
+   * correctly.
+   *
+   * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array
+   * `shift()` and `splice()` functions that fail to remove the last element,
+   * `value[0]`, of array-like objects even though the "length" property is
+   * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,
+   * while `splice()` is buggy regardless of mode in IE < 9.
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.spliceObjects = (splice.call(object, 0, 1), !object[0]);
+
+  /**
+   * Detect lack of support for accessing string characters by index.
+   *
+   * IE < 8 can't access characters by index. IE 8 can only access characters
+   * by index on string literals, not string objects.
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';
+}(1, 0));
+
+module.exports = support;
+
+},{}],133:[function(_dereq_,module,exports){
+/**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */
+function identity(value) {
+  return value;
+}
+
+module.exports = identity;
+
+},{}],134:[function(_dereq_,module,exports){
+'use strict';
+
+var keys = _dereq_('object-keys');
+
+module.exports = function hasSymbols() {
+	if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
+	if (typeof Symbol.iterator === 'symbol') { return true; }
+
+	var obj = {};
+	var sym = Symbol('test');
+	if (typeof sym === 'string') { return false; }
+
+	// temp disabled per https://github.com/ljharb/object.assign/issues/17
+	// if (sym instanceof Symbol) { return false; }
+	// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
+	// if (!(Object(sym) instanceof Symbol)) { return false; }
+
+	var symVal = 42;
+	obj[sym] = symVal;
+	for (sym in obj) { return false; }
+	if (keys(obj).length !== 0) { return false; }
+	if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
+
+	if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
+
+	var syms = Object.getOwnPropertySymbols(obj);
+	if (syms.length !== 1 || syms[0] !== sym) { return false; }
+
+	if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
+
+	if (typeof Object.getOwnPropertyDescriptor === 'function') {
+		var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
+		if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
+	}
+
+	return true;
+};
+
+},{"object-keys":141}],135:[function(_dereq_,module,exports){
+'use strict';
+
+// modified from https://github.com/es-shims/es6-shim
+var keys = _dereq_('object-keys');
+var bind = _dereq_('function-bind');
+var canBeObject = function (obj) {
+	return typeof obj !== 'undefined' && obj !== null;
+};
+var hasSymbols = _dereq_('./hasSymbols')();
+var toObject = Object;
+var push = bind.call(Function.call, Array.prototype.push);
+var propIsEnumerable = bind.call(Function.call, Object.prototype.propertyIsEnumerable);
+
+module.exports = function assign(target, source1) {
+	if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
+	var objTarget = toObject(target);
+	var s, source, i, props, syms, value, key;
+	for (s = 1; s < arguments.length; ++s) {
+		source = toObject(arguments[s]);
+		props = keys(source);
+		if (hasSymbols && Object.getOwnPropertySymbols) {
+			syms = Object.getOwnPropertySymbols(source);
+			for (i = 0; i < syms.length; ++i) {
+				key = syms[i];
+				if (propIsEnumerable(source, key)) {
+					push(props, key);
+				}
+			}
+		}
+		for (i = 0; i < props.length; ++i) {
+			key = props[i];
+			value = source[key];
+			if (propIsEnumerable(source, key)) {
+				objTarget[key] = value;
+			}
+		}
+	}
+	return objTarget;
+};
+
+},{"./hasSymbols":134,"function-bind":140,"object-keys":141}],136:[function(_dereq_,module,exports){
+'use strict';
+
+var defineProperties = _dereq_('define-properties');
+
+var implementation = _dereq_('./implementation');
+var getPolyfill = _dereq_('./polyfill');
+var shim = _dereq_('./shim');
+
+defineProperties(implementation, {
+	implementation: implementation,
+	getPolyfill: getPolyfill,
+	shim: shim
+});
+
+module.exports = implementation;
+
+},{"./implementation":135,"./polyfill":143,"./shim":144,"define-properties":137}],137:[function(_dereq_,module,exports){
+'use strict';
+
+var keys = _dereq_('object-keys');
+var foreach = _dereq_('foreach');
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';
+
+var toStr = Object.prototype.toString;
+
+var isFunction = function (fn) {
+	return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
+};
+
+var arePropertyDescriptorsSupported = function () {
+	var obj = {};
+	try {
+		Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+        /* eslint-disable no-unused-vars, no-restricted-syntax */
+        for (var _ in obj) { return false; }
+        /* eslint-enable no-unused-vars, no-restricted-syntax */
+		return obj.x === obj;
+	} catch (e) { /* this is IE 8. */
+		return false;
+	}
+};
+var supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();
+
+var defineProperty = function (object, name, value, predicate) {
+	if (name in object && (!isFunction(predicate) || !predicate())) {
+		return;
+	}
+	if (supportsDescriptors) {
+		Object.defineProperty(object, name, {
+			configurable: true,
+			enumerable: false,
+			value: value,
+			writable: true
+		});
+	} else {
+		object[name] = value;
+	}
+};
+
+var defineProperties = function (object, map) {
+	var predicates = arguments.length > 2 ? arguments[2] : {};
+	var props = keys(map);
+	if (hasSymbols) {
+		props = props.concat(Object.getOwnPropertySymbols(map));
+	}
+	foreach(props, function (name) {
+		defineProperty(object, name, map[name], predicates[name]);
+	});
+};
+
+defineProperties.supportsDescriptors = !!supportsDescriptors;
+
+module.exports = defineProperties;
+
+},{"foreach":138,"object-keys":141}],138:[function(_dereq_,module,exports){
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toString = Object.prototype.toString;
+
+module.exports = function forEach (obj, fn, ctx) {
+    if (toString.call(fn) !== '[object Function]') {
+        throw new TypeError('iterator must be a function');
+    }
+    var l = obj.length;
+    if (l === +l) {
+        for (var i = 0; i < l; i++) {
+            fn.call(ctx, obj[i], i, obj);
+        }
+    } else {
+        for (var k in obj) {
+            if (hasOwn.call(obj, k)) {
+                fn.call(ctx, obj[k], k, obj);
+            }
+        }
+    }
+};
+
+
+},{}],139:[function(_dereq_,module,exports){
+var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
+var slice = Array.prototype.slice;
+var toStr = Object.prototype.toString;
+var funcType = '[object Function]';
+
+module.exports = function bind(that) {
+    var target = this;
+    if (typeof target !== 'function' || toStr.call(target) !== funcType) {
+        throw new TypeError(ERROR_MESSAGE + target);
+    }
+    var args = slice.call(arguments, 1);
+
+    var bound;
+    var binder = function () {
+        if (this instanceof bound) {
+            var result = target.apply(
+                this,
+                args.concat(slice.call(arguments))
+            );
+            if (Object(result) === result) {
+                return result;
+            }
+            return this;
+        } else {
+            return target.apply(
+                that,
+                args.concat(slice.call(arguments))
+            );
+        }
+    };
+
+    var boundLength = Math.max(0, target.length - args.length);
+    var boundArgs = [];
+    for (var i = 0; i < boundLength; i++) {
+        boundArgs.push('$' + i);
+    }
+
+    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
+
+    if (target.prototype) {
+        var Empty = function Empty() {};
+        Empty.prototype = target.prototype;
+        bound.prototype = new Empty();
+        Empty.prototype = null;
+    }
+
+    return bound;
+};
+
+},{}],140:[function(_dereq_,module,exports){
+var implementation = _dereq_('./implementation');
+
+module.exports = Function.prototype.bind || implementation;
+
+},{"./implementation":139}],141:[function(_dereq_,module,exports){
+'use strict';
+
+// modified from https://github.com/es-shims/es5-shim
+var has = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+var slice = Array.prototype.slice;
+var isArgs = _dereq_('./isArguments');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
+var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
+var dontEnums = [
+	'toString',
+	'toLocaleString',
+	'valueOf',
+	'hasOwnProperty',
+	'isPrototypeOf',
+	'propertyIsEnumerable',
+	'constructor'
+];
+var equalsConstructorPrototype = function (o) {
+	var ctor = o.constructor;
+	return ctor && ctor.prototype === o;
+};
+var excludedKeys = {
+	$console: true,
+	$external: true,
+	$frame: true,
+	$frameElement: true,
+	$frames: true,
+	$innerHeight: true,
+	$innerWidth: true,
+	$outerHeight: true,
+	$outerWidth: true,
+	$pageXOffset: true,
+	$pageYOffset: true,
+	$parent: true,
+	$scrollLeft: true,
+	$scrollTop: true,
+	$scrollX: true,
+	$scrollY: true,
+	$self: true,
+	$webkitIndexedDB: true,
+	$webkitStorageInfo: true,
+	$window: true
+};
+var hasAutomationEqualityBug = (function () {
+	/* global window */
+	if (typeof window === 'undefined') { return false; }
+	for (var k in window) {
+		try {
+			if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
+				try {
+					equalsConstructorPrototype(window[k]);
+				} catch (e) {
+					return true;
+				}
+			}
+		} catch (e) {
+			return true;
+		}
+	}
+	return false;
+}());
+var equalsConstructorPrototypeIfNotBuggy = function (o) {
+	/* global window */
+	if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
+		return equalsConstructorPrototype(o);
+	}
+	try {
+		return equalsConstructorPrototype(o);
+	} catch (e) {
+		return false;
+	}
+};
+
+var keysShim = function keys(object) {
+	var isObject = object !== null && typeof object === 'object';
+	var isFunction = toStr.call(object) === '[object Function]';
+	var isArguments = isArgs(object);
+	var isString = isObject && toStr.call(object) === '[object String]';
+	var theKeys = [];
+
+	if (!isObject && !isFunction && !isArguments) {
+		throw new TypeError('Object.keys called on a non-object');
+	}
+
+	var skipProto = hasProtoEnumBug && isFunction;
+	if (isString && object.length > 0 && !has.call(object, 0)) {
+		for (var i = 0; i < object.length; ++i) {
+			theKeys.push(String(i));
+		}
+	}
+
+	if (isArguments && object.length > 0) {
+		for (var j = 0; j < object.length; ++j) {
+			theKeys.push(String(j));
+		}
+	} else {
+		for (var name in object) {
+			if (!(skipProto && name === 'prototype') && has.call(object, name)) {
+				theKeys.push(String(name));
+			}
+		}
+	}
+
+	if (hasDontEnumBug) {
+		var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+
+		for (var k = 0; k < dontEnums.length; ++k) {
+			if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
+				theKeys.push(dontEnums[k]);
+			}
+		}
+	}
+	return theKeys;
+};
+
+keysShim.shim = function shimObjectKeys() {
+	if (Object.keys) {
+		var keysWorksWithArguments = (function () {
+			// Safari 5.0 bug
+			return (Object.keys(arguments) || '').length === 2;
+		}(1, 2));
+		if (!keysWorksWithArguments) {
+			var originalKeys = Object.keys;
+			Object.keys = function keys(object) {
+				if (isArgs(object)) {
+					return originalKeys(slice.call(object));
+				} else {
+					return originalKeys(object);
+				}
+			};
+		}
+	} else {
+		Object.keys = keysShim;
+	}
+	return Object.keys || keysShim;
+};
+
+module.exports = keysShim;
+
+},{"./isArguments":142}],142:[function(_dereq_,module,exports){
+'use strict';
+
+var toStr = Object.prototype.toString;
+
+module.exports = function isArguments(value) {
+	var str = toStr.call(value);
+	var isArgs = str === '[object Arguments]';
+	if (!isArgs) {
+		isArgs = str !== '[object Array]' &&
+			value !== null &&
+			typeof value === 'object' &&
+			typeof value.length === 'number' &&
+			value.length >= 0 &&
+			toStr.call(value.callee) === '[object Function]';
+	}
+	return isArgs;
+};
+
+},{}],143:[function(_dereq_,module,exports){
+'use strict';
+
+var implementation = _dereq_('./implementation');
+
+var lacksProperEnumerationOrder = function () {
+	if (!Object.assign) {
+		return false;
+	}
+	// v8, specifically in node 4.x, has a bug with incorrect property enumeration order
+	// note: this does not detect the bug unless there's 20 characters
+	var str = 'abcdefghijklmnopqrst';
+	var letters = str.split('');
+	var map = {};
+	for (var i = 0; i < letters.length; ++i) {
+		map[letters[i]] = letters[i];
+	}
+	var obj = Object.assign({}, map);
+	var actual = '';
+	for (var k in obj) {
+		actual += k;
+	}
+	return str !== actual;
+};
+
+var assignHasPendingExceptions = function () {
+	if (!Object.assign || !Object.preventExtensions) {
+		return false;
+	}
+	// Firefox 37 still has "pending exception" logic in its Object.assign implementation,
+	// which is 72% slower than our shim, and Firefox 40's native implementation.
+	var thrower = Object.preventExtensions({ 1: 2 });
+	try {
+		Object.assign(thrower, 'xy');
+	} catch (e) {
+		return thrower[1] === 'y';
+	}
+};
+
+module.exports = function getPolyfill() {
+	if (!Object.assign) {
+		return implementation;
+	}
+	if (lacksProperEnumerationOrder()) {
+		return implementation;
+	}
+	if (assignHasPendingExceptions()) {
+		return implementation;
+	}
+	return Object.assign;
+};
+
+},{"./implementation":135}],144:[function(_dereq_,module,exports){
+'use strict';
+
+var define = _dereq_('define-properties');
+var getPolyfill = _dereq_('./polyfill');
+
+module.exports = function shimAssign() {
+	var polyfill = getPolyfill();
+	define(
+		Object,
+		{ assign: polyfill },
+		{ assign: function () { return Object.assign !== polyfill; } }
+	);
+	return polyfill;
+};
+
+},{"./polyfill":143,"define-properties":137}],145:[function(_dereq_,module,exports){
+module.exports = SafeParseTuple
+
+function SafeParseTuple(obj, reviver) {
+    var json
+    var error = null
+
+    try {
+        json = JSON.parse(obj, reviver)
+    } catch (err) {
+        error = err
+    }
+
+    return [error, json]
+}
+
+},{}],146:[function(_dereq_,module,exports){
+function clean (s) {
+  return s.replace(/\n\r?\s*/g, '')
+}
+
+
+module.exports = function tsml (sa) {
+  var s = ''
+    , i = 0
+
+  for (; i < arguments.length; i++)
+    s += clean(sa[i]) + (arguments[i + 1] || '')
+
+  return s
+}
+},{}],147:[function(_dereq_,module,exports){
+"use strict";
+var window = _dereq_("global/window")
+var once = _dereq_("once")
+var isFunction = _dereq_("is-function")
+var parseHeaders = _dereq_("parse-headers")
+var xtend = _dereq_("xtend")
+
+module.exports = createXHR
+createXHR.XMLHttpRequest = window.XMLHttpRequest || noop
+createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest
+
+forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) {
+    createXHR[method === "delete" ? "del" : method] = function(uri, options, callback) {
+        options = initParams(uri, options, callback)
+        options.method = method.toUpperCase()
+        return _createXHR(options)
+    }
+})
+
+function forEachArray(array, iterator) {
+    for (var i = 0; i < array.length; i++) {
+        iterator(array[i])
+    }
+}
+
+function isEmpty(obj){
+    for(var i in obj){
+        if(obj.hasOwnProperty(i)) return false
+    }
+    return true
+}
+
+function initParams(uri, options, callback) {
+    var params = uri
+
+    if (isFunction(options)) {
+        callback = options
+        if (typeof uri === "string") {
+            params = {uri:uri}
+        }
+    } else {
+        params = xtend(options, {uri: uri})
+    }
+
+    params.callback = callback
+    return params
+}
+
+function createXHR(uri, options, callback) {
+    options = initParams(uri, options, callback)
+    return _createXHR(options)
+}
+
+function _createXHR(options) {
+    var callback = options.callback
+    if(typeof callback === "undefined"){
+        throw new Error("callback argument missing")
+    }
+    callback = once(callback)
+
+    function readystatechange() {
+        if (xhr.readyState === 4) {
+            loadFunc()
+        }
+    }
+
+    function getBody() {
+        // Chrome with requestType=blob throws errors arround when even testing access to responseText
+        var body = undefined
+
+        if (xhr.response) {
+            body = xhr.response
+        } else if (xhr.responseType === "text" || !xhr.responseType) {
+            body = xhr.responseText || xhr.responseXML
+        }
+
+        if (isJson) {
+            try {
+                body = JSON.parse(body)
+            } catch (e) {}
+        }
+
+        return body
+    }
+
+    var failureResponse = {
+                body: undefined,
+                headers: {},
+                statusCode: 0,
+                method: method,
+                url: uri,
+                rawRequest: xhr
+            }
+
+    function errorFunc(evt) {
+        clearTimeout(timeoutTimer)
+        if(!(evt instanceof Error)){
+            evt = new Error("" + (evt || "Unknown XMLHttpRequest Error") )
+        }
+        evt.statusCode = 0
+        callback(evt, failureResponse)
+    }
+
+    // will load the data & process the response in a special response object
+    function loadFunc() {
+        if (aborted) return
+        var status
+        clearTimeout(timeoutTimer)
+        if(options.useXDR && xhr.status===undefined) {
+            //IE8 CORS GET successful response doesn't have a status field, but body is fine
+            status = 200
+        } else {
+            status = (xhr.status === 1223 ? 204 : xhr.status)
+        }
+        var response = failureResponse
+        var err = null
+
+        if (status !== 0){
+            response = {
+                body: getBody(),
+                statusCode: status,
+                method: method,
+                headers: {},
+                url: uri,
+                rawRequest: xhr
+            }
+            if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE
+                response.headers = parseHeaders(xhr.getAllResponseHeaders())
+            }
+        } else {
+            err = new Error("Internal XMLHttpRequest Error")
+        }
+        callback(err, response, response.body)
+
+    }
+
+    var xhr = options.xhr || null
+
+    if (!xhr) {
+        if (options.cors || options.useXDR) {
+            xhr = new createXHR.XDomainRequest()
+        }else{
+            xhr = new createXHR.XMLHttpRequest()
+        }
+    }
+
+    var key
+    var aborted
+    var uri = xhr.url = options.uri || options.url
+    var method = xhr.method = options.method || "GET"
+    var body = options.body || options.data || null
+    var headers = xhr.headers = options.headers || {}
+    var sync = !!options.sync
+    var isJson = false
+    var timeoutTimer
+
+    if ("json" in options) {
+        isJson = true
+        headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json") //Don't override existing accept header declared by user
+        if (method !== "GET" && method !== "HEAD") {
+            headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json") //Don't override existing accept header declared by user
+            body = JSON.stringify(options.json)
+        }
+    }
+
+    xhr.onreadystatechange = readystatechange
+    xhr.onload = loadFunc
+    xhr.onerror = errorFunc
+    // IE9 must have onprogress be set to a unique function.
+    xhr.onprogress = function () {
+        // IE must die
+    }
+    xhr.ontimeout = errorFunc
+    xhr.open(method, uri, !sync, options.username, options.password)
+    //has to be after open
+    if(!sync) {
+        xhr.withCredentials = !!options.withCredentials
+    }
+    // Cannot set timeout with sync request
+    // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly
+    // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent
+    if (!sync && options.timeout > 0 ) {
+        timeoutTimer = setTimeout(function(){
+            aborted=true//IE9 may still call readystatechange
+            xhr.abort("timeout")
+            var e = new Error("XMLHttpRequest timeout")
+            e.code = "ETIMEDOUT"
+            errorFunc(e)
+        }, options.timeout )
+    }
+
+    if (xhr.setRequestHeader) {
+        for(key in headers){
+            if(headers.hasOwnProperty(key)){
+                xhr.setRequestHeader(key, headers[key])
+            }
+        }
+    } else if (options.headers && !isEmpty(options.headers)) {
+        throw new Error("Headers cannot be set on an XDomainRequest object")
+    }
+
+    if ("responseType" in options) {
+        xhr.responseType = options.responseType
+    }
+
+    if ("beforeSend" in options &&
+        typeof options.beforeSend === "function"
+    ) {
+        options.beforeSend(xhr)
+    }
+
+    xhr.send(body)
+
+    return xhr
+
+
+}
+
+function noop() {}
+
+},{"global/window":93,"is-function":148,"once":149,"parse-headers":152,"xtend":153}],148:[function(_dereq_,module,exports){
+module.exports = isFunction
+
+var toString = Object.prototype.toString
+
+function isFunction (fn) {
+  var string = toString.call(fn)
+  return string === '[object Function]' ||
+    (typeof fn === 'function' && string !== '[object RegExp]') ||
+    (typeof window !== 'undefined' &&
+     // IE8 and below
+     (fn === window.setTimeout ||
+      fn === window.alert ||
+      fn === window.confirm ||
+      fn === window.prompt))
+};
+
+},{}],149:[function(_dereq_,module,exports){
+module.exports = once
+
+once.proto = once(function () {
+  Object.defineProperty(Function.prototype, 'once', {
+    value: function () {
+      return once(this)
+    },
+    configurable: true
+  })
+})
+
+function once (fn) {
+  var called = false
+  return function () {
+    if (called) return
+    called = true
+    return fn.apply(this, arguments)
+  }
+}
+
+},{}],150:[function(_dereq_,module,exports){
+var isFunction = _dereq_('is-function')
+
+module.exports = forEach
+
+var toString = Object.prototype.toString
+var hasOwnProperty = Object.prototype.hasOwnProperty
+
+function forEach(list, iterator, context) {
+    if (!isFunction(iterator)) {
+        throw new TypeError('iterator must be a function')
+    }
+
+    if (arguments.length < 3) {
+        context = this
+    }
+    
+    if (toString.call(list) === '[object Array]')
+        forEachArray(list, iterator, context)
+    else if (typeof list === 'string')
+        forEachString(list, iterator, context)
+    else
+        forEachObject(list, iterator, context)
+}
+
+function forEachArray(array, iterator, context) {
+    for (var i = 0, len = array.length; i < len; i++) {
+        if (hasOwnProperty.call(array, i)) {
+            iterator.call(context, array[i], i, array)
+        }
+    }
+}
+
+function forEachString(string, iterator, context) {
+    for (var i = 0, len = string.length; i < len; i++) {
+        // no such thing as a sparse string.
+        iterator.call(context, string.charAt(i), i, string)
+    }
+}
+
+function forEachObject(object, iterator, context) {
+    for (var k in object) {
+        if (hasOwnProperty.call(object, k)) {
+            iterator.call(context, object[k], k, object)
+        }
+    }
+}
+
+},{"is-function":148}],151:[function(_dereq_,module,exports){
+
+exports = module.exports = trim;
+
+function trim(str){
+  return str.replace(/^\s*|\s*$/g, '');
+}
+
+exports.left = function(str){
+  return str.replace(/^\s*/, '');
+};
+
+exports.right = function(str){
+  return str.replace(/\s*$/, '');
+};
+
+},{}],152:[function(_dereq_,module,exports){
+var trim = _dereq_('trim')
+  , forEach = _dereq_('for-each')
+  , isArray = function(arg) {
+      return Object.prototype.toString.call(arg) === '[object Array]';
+    }
+
+module.exports = function (headers) {
+  if (!headers)
+    return {}
+
+  var result = {}
+
+  forEach(
+      trim(headers).split('\n')
+    , function (row) {
+        var index = row.indexOf(':')
+          , key = trim(row.slice(0, index)).toLowerCase()
+          , value = trim(row.slice(index + 1))
+
+        if (typeof(result[key]) === 'undefined') {
+          result[key] = value
+        } else if (isArray(result[key])) {
+          result[key].push(value)
+        } else {
+          result[key] = [ result[key], value ]
+        }
+      }
+  )
+
+  return result
+}
+},{"for-each":150,"trim":151}],153:[function(_dereq_,module,exports){
+module.exports = extend
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+function extend() {
+    var target = {}
+
+    for (var i = 0; i < arguments.length; i++) {
+        var source = arguments[i]
+
+        for (var key in source) {
+            if (hasOwnProperty.call(source, key)) {
+                target[key] = source[key]
+            }
+        }
+    }
+
+    return target
+}
+
+},{}]},{},[91])(91)
+});
\ No newline at end of file
diff --git a/static/videojs/alt/video.novtt.min.js b/static/videojs/alt/video.novtt.min.js
new file mode 100644
index 0000000..69450ae
--- /dev/null
+++ b/static/videojs/alt/video.novtt.min.js
@@ -0,0 +1,20 @@
+/**
+ * @license
+ * Video.js 5.12.1 <http://videojs.com/>
+ * Copyright Brightcove, Inc. <https://www.brightcove.com/>
+ * Available under Apache License Version 2.0
+ * <https://github.com/videojs/video.js/blob/master/LICENSE>
+ */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.videojs=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./button.js"),i=d(h),j=a("./component.js"),k=d(j),l=function(a){function b(c,d){return e(this,b),f(this,a.call(this,c,d))}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(i["default"]);l.prototype.controlText_="Play Video",k["default"].registerComponent("BigPlayButton",l),c["default"]=l},{"./button.js":2,"./component.js":5}],2:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./clickable-component.js"),i=d(h),j=a("./component"),k=d(j),l=a("./utils/log.js"),m=d(l),n=a("object.assign"),o=d(n),p=function(a){function b(c,d){return e(this,b),f(this,a.call(this,c,d))}return g(b,a),b.prototype.createEl=function(){var a=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];b=o["default"]({className:this.buildCSSClass()},b),"button"!==a&&(m["default"].warn("Creating a Button with an HTML element of "+a+" is deprecated; use ClickableComponent instead."),b=o["default"]({tabIndex:0},b),c=o["default"]({role:"button"},c)),c=o["default"]({type:"button","aria-live":"polite"},c);var d=k["default"].prototype.createEl.call(this,a,b,c);return this.createControlTextEl(d),d},b.prototype.addChild=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=this.constructor.name;return m["default"].warn("Adding an actionable (user controllable) child to a Button ("+c+") is not supported; use a ClickableComponent instead."),k["default"].prototype.addChild.call(this,a,b)},b.prototype.handleKeyPress=function(b){32!==b.which&&13!==b.which&&a.prototype.handleKeyPress.call(this,b)},b}(i["default"]);k["default"].registerComponent("Button",p),c["default"]=p},{"./clickable-component.js":3,"./component":5,"./utils/log.js":85,"object.assign":136}],3:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./component"),j=e(i),k=a("./utils/dom.js"),l=d(k),m=a("./utils/events.js"),n=d(m),o=a("./utils/fn.js"),p=d(o),q=a("./utils/log.js"),r=e(q),s=a("global/document"),t=e(s),u=a("object.assign"),v=e(u),w=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.emitTapEvents(),e.on("tap",e.handleClick),e.on("click",e.handleClick),e.on("focus",e.handleFocus),e.on("blur",e.handleBlur),e}return h(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];c=v["default"]({className:this.buildCSSClass(),tabIndex:0},c),"button"===b&&r["default"].error("Creating a ClickableComponent with an HTML element of "+b+" is not supported; use a Button instead."),d=v["default"]({role:"button","aria-live":"polite"},d);var e=a.prototype.createEl.call(this,b,c,d);return this.createControlTextEl(e),e},b.prototype.createControlTextEl=function(a){return this.controlTextEl_=l.createEl("span",{className:"vjs-control-text"}),a&&a.appendChild(this.controlTextEl_),this.controlText(this.controlText_,a),this.controlTextEl_},b.prototype.controlText=function(a){var b=arguments.length<=1||void 0===arguments[1]?this.el():arguments[1];if(!a)return this.controlText_||"Need Text";var c=this.localize(a);return this.controlText_=a,this.controlTextEl_.innerHTML=c,b.setAttribute("title",c),this},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.addChild=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return a.prototype.addChild.call(this,b,c)},b.prototype.enable=function(){return this.removeClass("vjs-disabled"),this.el_.setAttribute("aria-disabled","false"),this},b.prototype.disable=function(){return this.addClass("vjs-disabled"),this.el_.setAttribute("aria-disabled","true"),this},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){n.on(t["default"],"keydown",p.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(b){32===b.which||13===b.which?(b.preventDefault(),this.handleClick(b)):a.prototype.handleKeyPress&&a.prototype.handleKeyPress.call(this,b)},b.prototype.handleBlur=function(){n.off(t["default"],"keydown",p.bind(this,this.handleKeyPress))},b}(j["default"]);j["default"].registerComponent("ClickableComponent",w),c["default"]=w},{"./component":5,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/log.js":85,"global/document":92,"object.assign":136}],4:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./button"),i=d(h),j=a("./component"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.controlText(d&&d.controlText||g.localize("Close")),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-close-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.trigger({type:"close",bubbles:!1})},b}(i["default"]);k["default"].registerComponent("CloseButton",l),c["default"]=l},{"./button":2,"./component":5}],5:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("global/window"),h=e(g),i=a("./utils/dom.js"),j=d(i),k=a("./utils/fn.js"),l=d(k),m=a("./utils/guid.js"),n=d(m),o=a("./utils/events.js"),p=d(o),q=a("./utils/log.js"),r=e(q),s=a("./utils/to-title-case.js"),t=e(s),u=a("./utils/merge-options.js"),v=e(u),w=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=v["default"]({},this.options_),c=this.options_=v["default"](this.options_,c),this.id_=c.id||c.el&&c.el.id,!this.id_){var e=b&&b.id&&b.id()||"no_player";this.id_=e+"_component_"+n.newGUID()}this.name_=c.name||null,c.el?this.el_=c.el:c.createEl!==!1&&(this.el_=this.createEl()),this.children_=[],this.childIndex_={},this.childNameIndex_={},c.initChildren!==!1&&this.initChildren(),this.ready(d),c.reportTouchActivity!==!1&&this.enableTouchActivity()}return a.prototype.dispose=function(){if(this.trigger({type:"dispose",bubbles:!1}),this.children_)for(var a=this.children_.length-1;a>=0;a--)this.children_[a].dispose&&this.children_[a].dispose();this.children_=null,this.childIndex_=null,this.childNameIndex_=null,this.off(),this.el_.parentNode&&this.el_.parentNode.removeChild(this.el_),j.removeElData(this.el_),this.el_=null},a.prototype.player=function(){return this.player_},a.prototype.options=function(a){return r["default"].warn("this.options() has been deprecated and will be moved to the constructor in 6.0"),a?(this.options_=v["default"](this.options_,a),this.options_):this.options_},a.prototype.el=function(){return this.el_},a.prototype.createEl=function(a,b,c){return j.createEl(a,b,c)},a.prototype.localize=function(a){var b=this.player_.language&&this.player_.language(),c=this.player_.languages&&this.player_.languages();if(!b||!c)return a;var d=c[b];if(d&&d[a])return d[a];var e=b.split("-")[0],f=c[e];return f&&f[a]?f[a]:a},a.prototype.contentEl=function(){return this.contentEl_||this.el_},a.prototype.id=function(){return this.id_},a.prototype.name=function(){return this.name_},a.prototype.children=function(){return this.children_},a.prototype.getChildById=function(a){return this.childIndex_[a]},a.prototype.getChild=function(a){return this.childNameIndex_[a]},a.prototype.addChild=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?this.children_.length:arguments[2],e=void 0,f=void 0;if("string"==typeof b){f=b,c||(c={}),c===!0&&(r["default"].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`."),c={});var g=c.componentClass||t["default"](f);c.name=f;var h=a.getComponent(g);if(!h)throw new Error("Component "+g+" does not exist");if("function"!=typeof h)return null;e=new h(this.player_||this,c)}else e=b;if(this.children_.splice(d,0,e),"function"==typeof e.id&&(this.childIndex_[e.id()]=e),f=f||e.name&&e.name(),f&&(this.childNameIndex_[f]=e),"function"==typeof e.el&&e.el()){var i=this.contentEl().children,j=i[d]||null;this.contentEl().insertBefore(e.el(),j)}return e},a.prototype.removeChild=function(a){if("string"==typeof a&&(a=this.getChild(a)),a&&this.children_){for(var b=!1,c=this.children_.length-1;c>=0;c--)if(this.children_[c]===a){b=!0,this.children_.splice(c,1);break}if(b){this.childIndex_[a.id()]=null,this.childNameIndex_[a.name()]=null;var d=a.el();d&&d.parentNode===this.contentEl()&&this.contentEl().removeChild(a.el())}}},a.prototype.initChildren=function(){var b=this,c=this.options_.children;c&&!function(){var d=b.options_,e=function(a){var c=a.name,e=a.opts;if(void 0!==d[c]&&(e=d[c]),e!==!1){e===!0&&(e={}),e.playerOptions=b.options_.playerOptions;var f=b.addChild(c,e);f&&(b[c]=f)}},f=void 0,g=a.getComponent("Tech");f=Array.isArray(c)?c:Object.keys(c),f.concat(Object.keys(b.options_).filter(function(a){return!f.some(function(b){return"string"==typeof b?a===b:a===b.name})})).map(function(a){var d=void 0,e=void 0;return"string"==typeof a?(d=a,e=c[d]||b.options_[d]||{}):(d=a.name,e=a),{name:d,opts:e}}).filter(function(b){var c=a.getComponent(b.opts.componentClass||t["default"](b.name));return c&&!g.isTech(c)}).forEach(e)}()},a.prototype.buildCSSClass=function(){return""},a.prototype.on=function(a,b,c){var d=this;return"string"==typeof a||Array.isArray(a)?p.on(this.el_,a,l.bind(this,b)):!function(){var e=a,f=b,g=l.bind(d,c),h=function(){return d.off(e,f,g)};h.guid=g.guid,d.on("dispose",h);var i=function(){return d.off("dispose",h)};i.guid=g.guid,a.nodeName?(p.on(e,f,g),p.on(e,"dispose",i)):"function"==typeof a.on&&(e.on(f,g),e.on("dispose",i))}(),this},a.prototype.off=function(a,b,c){if(!a||"string"==typeof a||Array.isArray(a))p.off(this.el_,a,b);else{var d=a,e=b,f=l.bind(this,c);this.off("dispose",f),a.nodeName?(p.off(d,e,f),p.off(d,"dispose",f)):(d.off(e,f),d.off("dispose",f))}return this},a.prototype.one=function(a,b,c){var d=this,e=arguments;return"string"==typeof a||Array.isArray(a)?p.one(this.el_,a,l.bind(this,b)):!function(){var f=a,g=b,h=l.bind(d,c),i=function j(){d.off(f,g,j),h.apply(null,e)};i.guid=h.guid,d.on(f,g,i)}(),this},a.prototype.trigger=function(a,b){return p.trigger(this.el_,a,b),this},a.prototype.ready=function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];return a&&(this.isReady_?b?a.call(this):this.setTimeout(a,1):(this.readyQueue_=this.readyQueue_||[],this.readyQueue_.push(a))),this},a.prototype.triggerReady=function(){this.isReady_=!0,this.setTimeout(function(){var a=this.readyQueue_;this.readyQueue_=[],a&&a.length>0&&a.forEach(function(a){a.call(this)},this),this.trigger("ready")},1)},a.prototype.$=function(a,b){return j.$(a,b||this.contentEl())},a.prototype.$$=function(a,b){return j.$$(a,b||this.contentEl())},a.prototype.hasClass=function(a){return j.hasElClass(this.el_,a)},a.prototype.addClass=function(a){return j.addElClass(this.el_,a),this},a.prototype.removeClass=function(a){return j.removeElClass(this.el_,a),this},a.prototype.toggleClass=function(a,b){return j.toggleElClass(this.el_,a,b),this},a.prototype.show=function(){return this.removeClass("vjs-hidden"),this},a.prototype.hide=function(){return this.addClass("vjs-hidden"),this},a.prototype.lockShowing=function(){return this.addClass("vjs-lock-showing"),this},a.prototype.unlockShowing=function(){return this.removeClass("vjs-lock-showing"),this},a.prototype.width=function(a,b){return this.dimension("width",a,b)},a.prototype.height=function(a,b){return this.dimension("height",a,b)},a.prototype.dimensions=function(a,b){return this.width(a,!0).height(b)},a.prototype.dimension=function(a,b,c){if(void 0!==b)return(null===b||b!==b)&&(b=0),this.el_.style[a]=-1!==(""+b).indexOf("%")||-1!==(""+b).indexOf("px")?b:"auto"===b?"":b+"px",c||this.trigger("resize"),this;if(!this.el_)return 0;var d=this.el_.style[a],e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(this.el_["offset"+t["default"](a)],10)},a.prototype.currentDimension=function(a){var b=0;if("width"!==a&&"height"!==a)throw new Error("currentDimension only accepts width or height value");if("function"==typeof h["default"].getComputedStyle){var c=h["default"].getComputedStyle(this.el_);b=c.getPropertyValue(a)||c[a]}else if(this.el_.currentStyle){var d="offset"+t["default"](a);b=this.el_[d]}return b=parseFloat(b)},a.prototype.currentDimensions=function(){return{width:this.currentDimension("width"),height:this.currentDimension("height")}},a.prototype.currentWidth=function(){return this.currentDimension("width")},a.prototype.currentHeight=function(){return this.currentDimension("height")},a.prototype.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b={pageX:c.touches[0].pageX,pageY:c.touches[0].pageY},a=(new Date).getTime(),e=!0)}),this.on("touchmove",function(a){if(a.touches.length>1)e=!1;else if(b){var d=a.touches[0].pageX-b.pageX,f=a.touches[0].pageY-b.pageY,g=Math.sqrt(d*d+f*f);g>c&&(e=!1)}});var f=function(){e=!1};this.on("touchleave",f),this.on("touchcancel",f),this.on("touchend",function(c){if(b=null,e===!0){var f=(new Date).getTime()-a;d>f&&(c.preventDefault(),this.trigger("tap"))}})},a.prototype.enableTouchActivity=function(){if(this.player()&&this.player().reportUserActivity){var a=l.bind(this.player(),this.player().reportUserActivity),b=void 0;this.on("touchstart",function(){a(),this.clearInterval(b),b=this.setInterval(a,250)});var c=function(){a(),this.clearInterval(b)};this.on("touchmove",a),this.on("touchend",c),this.on("touchcancel",c)}},a.prototype.setTimeout=function(a,b){a=l.bind(this,a);var c=h["default"].setTimeout(a,b),d=function(){this.clearTimeout(c)};return d.guid="vjs-timeout-"+c,this.on("dispose",d),c},a.prototype.clearTimeout=function(a){h["default"].clearTimeout(a);var b=function(){};return b.guid="vjs-timeout-"+a,this.off("dispose",b),a},a.prototype.setInterval=function(a,b){a=l.bind(this,a);var c=h["default"].setInterval(a,b),d=function(){this.clearInterval(c)};return d.guid="vjs-interval-"+c,this.on("dispose",d),c},a.prototype.clearInterval=function(a){h["default"].clearInterval(a);var b=function(){};return b.guid="vjs-interval-"+a,this.off("dispose",b),a},a.registerComponent=function(b,c){return a.components_||(a.components_={}),a.components_[b]=c,c},a.getComponent=function(b){return a.components_&&a.components_[b]?a.components_[b]:h["default"]&&h["default"].videojs&&h["default"].videojs[b]?(r["default"].warn("The "+b+" component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)"),h["default"].videojs[b]):void 0},a.extend=function(b){b=b||{},r["default"].warn("Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead");var c=b.init||b.init||this.prototype.init||this.prototype.init||function(){},d=function(){c.apply(this,arguments)};d.prototype=Object.create(this.prototype),d.prototype.constructor=d,d.extend=a.extend;for(var e in b)b.hasOwnProperty(e)&&(d.prototype[e]=b[e]);return d},a}();w.registerComponent("Component",w),c["default"]=w},{"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/to-title-case.js":89,"global/window":93}],6:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=a("./audio-track-menu-item.js"),m=d(l),n=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b),d.tracks=c.audioTracks&&c.audioTracks();var g=f(this,a.call(this,c,d));return g.el_.setAttribute("aria-label","Audio Menu"),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-audio-button "+a.prototype.buildCSSClass.call(this)},b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],b=this.player_.audioTracks&&this.player_.audioTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];a.push(new m["default"](this.player_,{track:d,selectable:!0}))}return a},b}(i["default"]);n.prototype.controlText_="Audio Track",k["default"].registerComponent("AudioTrackButton",n),c["default"]=n},{"../../component.js":5,"../track-button.js":36,"./audio-track-menu-item.js":7}],7:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../menu/menu-item.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=d.track,h=c.audioTracks();d.label=e.label||e.language||"Unknown",d.selected=e.enabled;var i=g(this,a.call(this,c,d));return i.track=e,h&&!function(){var a=n.bind(i,i.handleTracksChange);h.addEventListener("change",a),i.on("dispose",function(){h.removeEventListener("change",a)})}(),i}return h(b,a),b.prototype.handleClick=function(b){var c=this.player_.audioTracks();if(a.prototype.handleClick.call(this,b),c)for(var d=0;d<c.length;d++){var e=c[d];e.enabled=e===this.track}},b.prototype.handleTracksChange=function(){this.selected(this.track.enabled)},b}(j["default"]);l["default"].registerComponent("AudioTrackMenuItem",o),c["default"]=o},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],8:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component.js"),i=d(h);a("./play-toggle.js"),a("./time-controls/current-time-display.js"),a("./time-controls/duration-display.js"),a("./time-controls/time-divider.js"),a("./time-controls/remaining-time-display.js"),a("./live-display.js"),a("./progress-control/progress-control.js"),a("./fullscreen-toggle.js"),a("./volume-control/volume-control.js"),a("./volume-menu-button.js"),a("./mute-toggle.js"),a("./text-track-controls/chapters-button.js"),a("./text-track-controls/descriptions-button.js"),a("./text-track-controls/subtitles-button.js"),a("./text-track-controls/captions-button.js"),a("./audio-track-controls/audio-track-button.js"),a("./playback-rate-menu/playback-rate-menu-button.js"),a("./spacer-controls/custom-control-spacer.js");var j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar",dir:"ltr"},{role:"group"})},b}(i["default"]);j.prototype.options_={children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","chaptersButton","descriptionsButton","subtitlesButton","captionsButton","audioTrackButton","fullscreenToggle"]},i["default"].registerComponent("ControlBar",j),c["default"]=j},{"../component.js":5,"./audio-track-controls/audio-track-button.js":6,"./fullscreen-toggle.js":9,"./live-display.js":10,"./mute-toggle.js":11,"./play-toggle.js":12,"./playback-rate-menu/playback-rate-menu-button.js":13,"./progress-control/progress-control.js":18,"./spacer-controls/custom-control-spacer.js":21,"./text-track-controls/captions-button.js":24,"./text-track-controls/chapters-button.js":25,"./text-track-controls/descriptions-button.js":27,"./text-track-controls/subtitles-button.js":29,"./time-controls/current-time-display.js":32,"./time-controls/duration-display.js":33,"./time-controls/remaining-time-display.js":34,"./time-controls/time-divider.js":35,"./volume-control/volume-control.js":38,"./volume-menu-button.js":40}],9:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button.js"),i=d(h),j=a("../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.on(c,"fullscreenchange",g.handleFullscreenChange),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleFullscreenChange=function(){this.controlText(this.player_.isFullscreen()?"Non-Fullscreen":"Fullscreen")},b.prototype.handleClick=function(){this.player_.isFullscreen()?this.player_.exitFullscreen():this.player_.requestFullscreen()},b}(i["default"]);l.prototype.controlText_="Fullscreen",k["default"].registerComponent("FullscreenToggle",l),c["default"]=l},{"../button.js":2,"../component.js":5}],10:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateShowing(),e.on(e.player(),"durationchange",e.updateShowing),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Stream Type")+"</span>"+this.localize("LIVE")},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateShowing=function(){this.player().duration()===1/0?this.show():this.hide()},b}(j["default"]);j["default"].registerComponent("LiveDisplay",m),c["default"]=m},{"../component":5,"../utils/dom.js":80}],11:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../button"),j=e(i),k=a("../component"),l=e(k),m=a("../utils/dom.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"volumechange",e.update),c.tech_&&c.tech_.featuresVolumeControl===!1&&e.addClass("vjs-hidden"),e.on(c,"loadstart",function(){this.update(),c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}),e}return h(b,a),b.prototype.buildCSSClass=function(){return"vjs-mute-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.muted(this.player_.muted()?!1:!0)},b.prototype.update=function(){var a=this.player_.volume(),b=3;0===a||this.player_.muted()?b=0:.33>a?b=1:.67>a&&(b=2);var c=this.player_.muted()?"Unmute":"Mute";this.controlText()!==c&&this.controlText(c);for(var d=0;4>d;d++)n.removeElClass(this.el_,"vjs-vol-"+d);n.addElClass(this.el_,"vjs-vol-"+b)},b}(j["default"]);o.prototype.controlText_="Mute",l["default"].registerComponent("MuteToggle",o),c["default"]=o},{"../button":2,"../component":5,"../utils/dom.js":80}],12:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button.js"),i=d(h),j=a("../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.on(c,"play",g.handlePlay),g.on(c,"pause",g.handlePause),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-play-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},b.prototype.handlePlay=function(){this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.controlText("Pause")},b.prototype.handlePause=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.controlText("Play")},b}(i["default"]);l.prototype.controlText_="Play",k["default"].registerComponent("PlayToggle",l),c["default"]=l},{"../button.js":2,"../component.js":5}],13:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+
+return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../menu/menu-button.js"),j=e(i),k=a("../../menu/menu.js"),l=e(k),m=a("./playback-rate-menu-item.js"),n=e(m),o=a("../../component.js"),p=e(o),q=a("../../utils/dom.js"),r=d(q),s=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateVisibility(),e.updateLabel(),e.on(c,"loadstart",e.updateVisibility),e.on(c,"ratechange",e.updateLabel),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=r.createEl("div",{className:"vjs-playback-rate-value",innerHTML:1}),b.appendChild(this.labelEl_),b},b.prototype.buildCSSClass=function(){return"vjs-playback-rate "+a.prototype.buildCSSClass.call(this)},b.prototype.createMenu=function(){var a=new l["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new n["default"](this.player(),{rate:b[c]+"x"}));return a},b.prototype.updateARIAAttributes=function(){this.el().setAttribute("aria-valuenow",this.player().playbackRate())},b.prototype.handleClick=function(){for(var a=this.player().playbackRate(),b=this.playbackRates(),c=b[0],d=0;d<b.length;d++)if(b[d]>a){c=b[d];break}this.player().playbackRate(c)},b.prototype.playbackRates=function(){return this.options_.playbackRates||this.options_.playerOptions&&this.options_.playerOptions.playbackRates},b.prototype.playbackRateSupported=function(){return this.player().tech_&&this.player().tech_.featuresPlaybackRate&&this.playbackRates()&&this.playbackRates().length>0},b.prototype.updateVisibility=function(){this.playbackRateSupported()?this.removeClass("vjs-hidden"):this.addClass("vjs-hidden")},b.prototype.updateLabel=function(){this.playbackRateSupported()&&(this.labelEl_.innerHTML=this.player().playbackRate()+"x")},b}(j["default"]);s.prototype.controlText_="Playback Rate",p["default"].registerComponent("PlaybackRateMenuButton",s),c["default"]=s},{"../../component.js":5,"../../menu/menu-button.js":47,"../../menu/menu.js":49,"../../utils/dom.js":80,"./playback-rate-menu-item.js":14}],14:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../menu/menu-item.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=d.rate,h=parseFloat(g,10);d.label=g,d.selected=1===h;var i=f(this,a.call(this,c,d));return i.label=g,i.rate=h,i.on(c,"ratechange",i.update),i}return g(b,a),b.prototype.handleClick=function(){a.prototype.handleClick.call(this),this.player().playbackRate(this.rate)},b.prototype.update=function(){this.selected(this.player().playbackRate()===this.rate)},b}(i["default"]);l.prototype.contentElType="button",k["default"].registerComponent("PlaybackRateMenuItem",l),c["default"]=l},{"../../component.js":5,"../../menu/menu-item.js":48}],15:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"progress",e.update),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Loaded")+"</span>: 0%</span>"})},b.prototype.update=function(){var a=this.player_.buffered(),b=this.player_.duration(),c=this.player_.bufferedEnd(),d=this.el_.children,e=function(a,b){var c=a/b||0;return 100*(c>=1?1:c)+"%"};this.el_.style.width=e(c,b);for(var f=0;f<a.length;f++){var g=a.start(f),h=a.end(f),i=d[f];i||(i=this.el_.appendChild(l.createEl())),i.style.left=e(g,c),i.style.width=e(h-g,c)}for(var j=d.length;j>a.length;j--)this.el_.removeChild(d[j-1])},b}(j["default"]);j["default"].registerComponent("LoadProgressBar",m),c["default"]=m},{"../../component.js":5,"../../utils/dom.js":80}],16:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("global/window"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/dom.js"),n=d(m),o=a("../../utils/fn.js"),p=d(o),q=a("../../utils/format-time.js"),r=e(q),s=a("lodash-compat/function/throttle"),t=e(s),u=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return d.playerOptions&&d.playerOptions.controlBar&&d.playerOptions.controlBar.progressControl&&d.playerOptions.controlBar.progressControl.keepTooltipsInside&&(e.keepTooltipsInside=d.playerOptions.controlBar.progressControl.keepTooltipsInside),e.keepTooltipsInside&&(e.tooltip=n.createEl("div",{className:"vjs-time-tooltip"}),e.el().appendChild(e.tooltip),e.addClass("vjs-keep-tooltips-inside")),e.update(0,0),c.on("ready",function(){e.on(c.controlBar.progressControl.el(),"mousemove",t["default"](p.bind(e,e.handleMouseMove),25))}),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},b.prototype.handleMouseMove=function(a){var b=this.player_.duration(),c=this.calculateDistance(a)*b,d=a.pageX-n.findElPosition(this.el().parentNode).left;this.update(c,d)},b.prototype.update=function(a,b){var c=r["default"](a,this.player_.duration());if(this.el().style.left=b+"px",this.el().setAttribute("data-current-time",c),this.keepTooltipsInside){var d=this.clampPosition_(b),e=b-d+1,f=parseFloat(j["default"].getComputedStyle(this.tooltip).width),g=f/2;this.tooltip.innerHTML=c,this.tooltip.style.right="-"+(g-e)+"px"}},b.prototype.calculateDistance=function(a){return n.getPointerPosition(this.el().parentNode,a).x},b.prototype.clampPosition_=function(a){if(!this.keepTooltipsInside)return a;var b=parseFloat(j["default"].getComputedStyle(this.player().el()).width),c=parseFloat(j["default"].getComputedStyle(this.tooltip).width),d=c/2,e=a;return d>a?e=Math.ceil(d):a>b-d&&(e=Math.floor(b-d)),e},b}(l["default"]);l["default"].registerComponent("MouseTimeDisplay",u),c["default"]=u},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/fn.js":82,"../../utils/format-time.js":83,"global/window":93,"lodash-compat/function/throttle":98}],17:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/fn.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateDataAttr(),e.on(c,"timeupdate",e.updateDataAttr),c.ready(l.bind(e,e.updateDataAttr)),d.playerOptions&&d.playerOptions.controlBar&&d.playerOptions.controlBar.progressControl&&d.playerOptions.controlBar.progressControl.keepTooltipsInside&&(e.keepTooltipsInside=d.playerOptions.controlBar.progressControl.keepTooltipsInside),e.keepTooltipsInside&&e.addClass("vjs-keep-tooltips-inside"),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Progress")+"</span>: 0%</span>"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",n["default"](a,this.player_.duration()))},b}(j["default"]);j["default"].registerComponent("PlayProgressBar",o),c["default"]=o},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],18:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h);a("./seek-bar.js"),a("./mouse-time-display.js");var j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(i["default"]);j.prototype.options_={children:["seekBar"]},i["default"].registerComponent("ProgressControl",j),c["default"]=j},{"../../component.js":5,"./mouse-time-display.js":16,"./seek-bar.js":19}],19:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("global/window"),j=e(i),k=a("../../slider/slider.js"),l=e(k),m=a("../../component.js"),n=e(m),o=a("../../utils/fn.js"),p=d(o),q=a("../../utils/format-time.js"),r=e(q);a("./load-progress-bar.js"),a("./play-progress-bar.js"),a("./tooltip-progress-bar.js");var s=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"timeupdate",e.updateProgress),e.on(c,"ended",e.updateProgress),c.ready(p.bind(e,e.updateProgress)),d.playerOptions&&d.playerOptions.controlBar&&d.playerOptions.controlBar.progressControl&&d.playerOptions.controlBar.progressControl.keepTooltipsInside&&(e.keepTooltipsInside=d.playerOptions.controlBar.progressControl.keepTooltipsInside),e.keepTooltipsInside&&(e.tooltipProgressBar=e.addChild("TooltipProgressBar")),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":"progress bar"})},b.prototype.updateProgress=function(){if(this.updateAriaAttributes(this.el_),this.keepTooltipsInside){this.updateAriaAttributes(this.tooltipProgressBar.el_),this.tooltipProgressBar.el_.style.width=this.bar.el_.style.width;var a=parseFloat(j["default"].getComputedStyle(this.player().el()).width),b=parseFloat(j["default"].getComputedStyle(this.tooltipProgressBar.tooltip).width),c=this.tooltipProgressBar.el().style;c.maxWidth=Math.floor(a-b/2)+"px",c.minWidth=Math.ceil(b/2)+"px",c.right="-"+b/2+"px"}},b.prototype.updateAriaAttributes=function(a){var b=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();a.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),a.setAttribute("aria-valuetext",r["default"](b,this.player_.duration()))},b.prototype.getPercent=function(){var a=this.player_.currentTime()/this.player_.duration();return a>=1?1:a},b.prototype.handleMouseDown=function(b){a.prototype.handleMouseDown.call(this,b),this.player_.scrubbing(!0),this.videoWasPlaying=!this.player_.paused(),this.player_.pause()},b.prototype.handleMouseMove=function(a){var b=this.calculateDistance(a)*this.player_.duration();b===this.player_.duration()&&(b-=.1),this.player_.currentTime(b)},b.prototype.handleMouseUp=function(b){a.prototype.handleMouseUp.call(this,b),this.player_.scrubbing(!1),this.videoWasPlaying&&this.player_.play()},b.prototype.stepForward=function(){this.player_.currentTime(this.player_.currentTime()+5)},b.prototype.stepBack=function(){this.player_.currentTime(this.player_.currentTime()-5)},b}(l["default"]);s.prototype.options_={children:["loadProgressBar","mouseTimeDisplay","playProgressBar"],barName:"playProgressBar"},s.prototype.playerEvent="timeupdate",n["default"].registerComponent("SeekBar",s),c["default"]=s},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"../../utils/format-time.js":83,"./load-progress-bar.js":15,"./play-progress-bar.js":17,"./tooltip-progress-bar.js":20,"global/window":93}],20:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/fn.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateDataAttr(),e.on(c,"timeupdate",e.updateDataAttr),c.ready(l.bind(e,e.updateDataAttr)),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-tooltip-progress-bar vjs-slider-bar",innerHTML:'<div class="vjs-time-tooltip"></div>\n        <span class="vjs-control-text"><span>'+this.localize("Progress")+"</span>: 0%</span>"});return this.tooltip=b.querySelector(".vjs-time-tooltip"),b},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),b=n["default"](a,this.player_.duration());this.el_.setAttribute("data-current-time",b),this.tooltip.innerHTML=b},b}(j["default"]);j["default"].registerComponent("TooltipProgressBar",o),c["default"]=o},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],21:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./spacer.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-custom-control-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,{className:this.buildCSSClass()});return b.innerHTML="&nbsp;",b},b}(i["default"]);k["default"].registerComponent("CustomControlSpacer",l),c["default"]=l},{"../../component.js":5,"./spacer.js":22}],22:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b}(i["default"]);i["default"].registerComponent("Spacer",j),c["default"]=j},{"../../component.js":5}],23:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-menu-item.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b),d.track={player:c,kind:d.kind,label:d.kind+" settings",selectable:!1,"default":!1,mode:"disabled"},d.selectable=!1;var g=f(this,a.call(this,c,d));return g.addClass("vjs-texttrack-settings"),g.controlText(", opens "+d.kind+" settings dialog"),g}return g(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show(),this.player().getChild("textTrackSettings").el_.focus()},b}(i["default"]);k["default"].registerComponent("CaptionSettingsMenuItem",l),c["default"]=l},{"../../component.js":5,"./text-track-menu-item.js":31}],24:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=a("./caption-settings-menu-item.js"),m=d(l),n=function(a){function b(c,d,g){e(this,b);var h=f(this,a.call(this,c,d,g));return h.el_.setAttribute("aria-label","Captions Menu"),h}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-captions-button "+a.prototype.buildCSSClass.call(this)},b.prototype.update=function(){var b=2;a.prototype.update.call(this),this.player().tech_&&this.player().tech_.featuresNativeTextTracks&&(b=1),this.items&&this.items.length>b?this.show():this.hide()},b.prototype.createItems=function(){var b=[];return this.player().tech_&&this.player().tech_.featuresNativeTextTracks||b.push(new m["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(i["default"]);n.prototype.kind_="captions",n.prototype.controlText_="Captions",k["default"].registerComponent("CaptionsButton",n),c["default"]=n},{"../../component.js":5,"./caption-settings-menu-item.js":23,"./text-track-button.js":30}],25:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./text-track-button.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("./text-track-menu-item.js"),n=e(m),o=a("./chapters-track-menu-item.js"),p=e(o),q=a("../../menu/menu.js"),r=e(q),s=a("../../utils/dom.js"),t=d(s),u=a("../../utils/to-title-case.js"),v=e(u),w=function(a){function b(c,d,e){f(this,b);var h=g(this,a.call(this,c,d,e));return h.el_.setAttribute("aria-label","Chapters Menu"),h}return h(b,a),b.prototype.buildCSSClass=function(){return"vjs-chapters-button "+a.prototype.buildCSSClass.call(this)},b.prototype.createItems=function(){var a=[],b=this.player_.textTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];d.kind===this.kind_&&a.push(new n["default"](this.player_,{track:d}))}return a},b.prototype.createMenu=function(){for(var a=this,b=this.player_.textTracks()||[],c=void 0,d=this.items||[],e=b.length-1;e>=0;e--){var f=b[e];if(f.kind===this.kind_){c=f;break}}var g=this.menu;if(void 0===g){g=new r["default"](this.player_);var h=t.createEl("li",{className:"vjs-menu-title",innerHTML:v["default"](this.kind_),tabIndex:-1});g.children_.unshift(h),t.insertElFirst(h,g.contentEl())}else d.forEach(function(a){return g.removeChild(a)}),d=[];if(c&&(null===c.cues||void 0===c.cues)){c.mode="hidden";var i=this.player_.remoteTextTrackEls().getTrackElementByTrack_(c);i&&i.addEventListener("load",function(){return a.update()})}if(c&&c.cues&&c.cues.length>0)for(var j=c.cues,k=0,l=j.length;l>k;k++){var m=j[k],n=new p["default"](this.player_,{cue:m,track:c});d.push(n),g.addChild(n)}return d.length>0&&this.show(),this.items=d,g},b}(j["default"]);w.prototype.kind_="chapters",w.prototype.controlText_="Chapters",l["default"].registerComponent("ChaptersButton",w),c["default"]=w},{"../../component.js":5,"../../menu/menu.js":49,"../../utils/dom.js":80,"../../utils/to-title-case.js":89,"./chapters-track-menu-item.js":26,"./text-track-button.js":30,"./text-track-menu-item.js":31}],26:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../menu/menu-item.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=d.track,h=d.cue,i=c.currentTime();d.label=h.text,d.selected=h.startTime<=i&&i<h.endTime;var j=g(this,a.call(this,c,d));return j.track=e,j.cue=h,e.addEventListener("cuechange",n.bind(j,j.update)),j}return h(b,a),b.prototype.handleClick=function(){a.prototype.handleClick.call(this),this.player_.currentTime(this.cue.startTime),this.update(this.cue.startTime)},b.prototype.update=function(){var a=this.cue,b=this.player_.currentTime();this.selected(a.startTime<=b&&b<a.endTime)},b}(j["default"]);l["default"].registerComponent("ChaptersTrackMenuItem",o),c["default"]=o},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],27:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./text-track-button.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m),o=function(a){function b(c,d,e){f(this,b);var h=g(this,a.call(this,c,d,e));h.el_.setAttribute("aria-label","Descriptions Menu");var i=c.textTracks();return i&&!function(){var a=n.bind(h,h.handleTracksChange);i.addEventListener("change",a),h.on("dispose",function(){i.removeEventListener("change",a)})}(),h}return h(b,a),b.prototype.handleTracksChange=function(){for(var a=this.player().textTracks(),b=!1,c=0,d=a.length;d>c;c++){var e=a[c];if(e.kind!==this.kind_&&"showing"===e.mode){b=!0;break}}b?this.disable():this.enable()},b.prototype.buildCSSClass=function(){return"vjs-descriptions-button "+a.prototype.buildCSSClass.call(this)},b}(j["default"]);o.prototype.kind_="descriptions",o.prototype.controlText_="Descriptions",l["default"].registerComponent("DescriptionsButton",o),c["default"]=o},{"../../component.js":5,"../../utils/fn.js":82,"./text-track-button.js":30}],28:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-menu-item.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b),d.track={player:c,kind:d.kind,label:d.kind+" off","default":!1,mode:"disabled"},d.selectable=!0;var g=f(this,a.call(this,c,d));return g.selected(!0),g}return g(b,a),b.prototype.handleTracksChange=function(){for(var a=this.player().textTracks(),b=!0,c=0,d=a.length;d>c;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(i["default"]);k["default"].registerComponent("OffTextTrackMenuItem",l),c["default"]=l},{"../../component.js":5,"./text-track-menu-item.js":31}],29:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d,g){e(this,b);var h=f(this,a.call(this,c,d,g));return h.el_.setAttribute("aria-label","Subtitles Menu"),h}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(i["default"]);l.prototype.kind_="subtitles",l.prototype.controlText_="Subtitles",k["default"].registerComponent("SubtitlesButton",l),c["default"]=l},{"../../component.js":5,"./text-track-button.js":30}],30:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=a("./text-track-menu-item.js"),m=d(l),n=a("./off-text-track-menu-item.js"),o=d(n),p=function(a){
+function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return e(this,b),d.tracks=c.textTracks(),f(this,a.call(this,c,d))}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new o["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];d.kind===this.kind_&&a.push(new m["default"](this.player_,{track:d,selectable:!0}))}return a},b}(i["default"]);k["default"].registerComponent("TextTrackButton",p),c["default"]=p},{"../../component.js":5,"../track-button.js":36,"./off-text-track-menu-item.js":28,"./text-track-menu-item.js":31}],31:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},j=a("../../menu/menu-item.js"),k=e(j),l=a("../../component.js"),m=e(l),n=a("../../utils/fn.js"),o=d(n),p=a("global/window"),q=e(p),r=a("global/document"),s=e(r),t=function(a){function b(c,d){f(this,b);var e=d.track,h=c.textTracks();d.label=e.label||e.language||"Unknown",d.selected=e["default"]||"showing"===e.mode;var j=g(this,a.call(this,c,d));return j.track=e,h&&!function(){var a=o.bind(j,j.handleTracksChange);h.addEventListener("change",a),j.on("dispose",function(){h.removeEventListener("change",a)})}(),h&&void 0===h.onchange&&!function(){var a=void 0;j.on(["tap","click"],function(){if("object"!==i(q["default"].Event))try{a=new q["default"].Event("change")}catch(b){}a||(a=s["default"].createEvent("Event"),a.initEvent("change",!0,!0)),h.dispatchEvent(a)})}(),j}return h(b,a),b.prototype.handleClick=function(b){var c=this.track.kind,d=this.player_.textTracks();if(a.prototype.handleClick.call(this,b),d)for(var e=0;e<d.length;e++){var f=d[e];f.kind===c&&(f.mode=f===this.track?"showing":"disabled")}},b.prototype.handleTracksChange=function(){this.selected("showing"===this.track.mode)},b}(k["default"]);m["default"].registerComponent("TextTrackMenuItem",t),c["default"]=t},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82,"global/document":92,"global/window":93}],32:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"timeupdate",e.updateContent),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-current-time vjs-time-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00'},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),b=this.localize("Current Time"),c=n["default"](a,this.player_.duration());c!==this.formattedTime_&&(this.formattedTime_=c,this.contentEl_.innerHTML='<span class="vjs-control-text">'+b+"</span> "+c)},b}(j["default"]);j["default"].registerComponent("CurrentTimeDisplay",o),c["default"]=o},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],33:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"durationchange",e.updateContent),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-duration vjs-time-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Duration Time")+"</span> 0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a&&this.duration_!==a){this.duration_=a;var b=this.localize("Duration Time"),c=n["default"](a);this.contentEl_.innerHTML='<span class="vjs-control-text">'+b+"</span> "+c}},b}(j["default"]);j["default"].registerComponent("DurationDisplay",o),c["default"]=o},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],34:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"timeupdate",e.updateContent),e.on(c,"durationchange",e.updateContent),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-remaining-time vjs-time-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Remaining Time")+"</span> -0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){if(this.player_.duration()){var a=this.localize("Remaining Time"),b=n["default"](this.player_.remainingTime());b!==this.formattedTime_&&(this.formattedTime_=b,this.contentEl_.innerHTML='<span class="vjs-control-text">'+a+"</span> -"+b)}},b}(j["default"]);j["default"].registerComponent("RemainingTimeDisplay",o),c["default"]=o},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],35:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"<div><span>/</span></div>"})},b}(i["default"]);i["default"].registerComponent("TimeDivider",j),c["default"]=j},{"../../component.js":5}],36:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../menu/menu-button.js"),j=e(i),k=a("../component.js"),l=e(k),m=a("../utils/fn.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=d.tracks,h=g(this,a.call(this,c,d));if(h.items.length<=1&&h.hide(),!e)return g(h);var i=n.bind(h,h.update);return e.addEventListener("removetrack",i),e.addEventListener("addtrack",i),h.player_.on("dispose",function(){e.removeEventListener("removetrack",i),e.removeEventListener("addtrack",i)}),h}return h(b,a),b}(j["default"]);l["default"].registerComponent("TrackButton",o),c["default"]=o},{"../component.js":5,"../menu/menu-button.js":47,"../utils/fn.js":82}],37:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../slider/slider.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m);a("./volume-level.js");var o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"volumechange",e.updateARIAAttributes),c.ready(n.bind(e,e.updateARIAAttributes)),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":"volume level"})},b.prototype.handleMouseMove=function(a){this.checkMuted(),this.player_.volume(this.calculateDistance(a))},b.prototype.checkMuted=function(){this.player_.muted()&&this.player_.muted(!1)},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.checkMuted(),this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){this.checkMuted(),this.player_.volume(this.player_.volume()-.1)},b.prototype.updateARIAAttributes=function(){var a=(100*this.player_.volume()).toFixed(2);this.el_.setAttribute("aria-valuenow",a),this.el_.setAttribute("aria-valuetext",a+"%")},b}(j["default"]);o.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},o.prototype.playerEvent="volumechange",l["default"].registerComponent("VolumeBar",o),c["default"]=o},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"./volume-level.js":39}],38:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h);a("./volume-bar.js");var j=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return c.tech_&&c.tech_.featuresVolumeControl===!1&&g.addClass("vjs-hidden"),g.on(c,"loadstart",function(){c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}),g}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(i["default"]);j.prototype.options_={children:["volumeBar"]},i["default"].registerComponent("VolumeControl",j),c["default"]=j},{"../../component.js":5,"./volume-bar.js":37}],39:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})},b}(i["default"]);i["default"].registerComponent("VolumeLevel",j),c["default"]=j},{"../../component.js":5}],40:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../utils/fn.js"),j=e(i),k=a("../component.js"),l=d(k),m=a("../popup/popup.js"),n=d(m),o=a("../popup/popup-button.js"),p=d(o),q=a("./mute-toggle.js"),r=d(q),s=a("./volume-control/volume-bar.js"),t=d(s),u=function(a){function b(c){function d(){c.tech_&&c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];f(this,b),void 0===e.inline&&(e.inline=!0),void 0===e.vertical&&(e.vertical=e.inline?!1:!0),e.volumeBar=e.volumeBar||{},e.volumeBar.vertical=!!e.vertical;var h=g(this,a.call(this,c,e));return h.on(c,"volumechange",h.volumeUpdate),h.on(c,"loadstart",h.volumeUpdate),d.call(h),h.on(c,"loadstart",d),h.on(h.volumeBar,["slideractive","focus"],function(){this.addClass("vjs-slider-active")}),h.on(h.volumeBar,["sliderinactive","blur"],function(){this.removeClass("vjs-slider-active")}),h.on(h.volumeBar,["focus"],function(){this.addClass("vjs-lock-showing")}),h.on(h.volumeBar,["blur"],function(){this.removeClass("vjs-lock-showing")}),h}return h(b,a),b.prototype.buildCSSClass=function(){var b="";return b=this.options_.vertical?"vjs-volume-menu-button-vertical":"vjs-volume-menu-button-horizontal","vjs-volume-menu-button "+a.prototype.buildCSSClass.call(this)+" "+b},b.prototype.createPopup=function(){var a=new n["default"](this.player_,{contentElType:"div"}),b=new t["default"](this.player_,this.options_.volumeBar);return a.addChild(b),this.menuContent=a,this.volumeBar=b,this.attachVolumeBarEvents(),a},b.prototype.handleClick=function(){r["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b.prototype.attachVolumeBarEvents=function(){this.menuContent.on(["mousedown","touchdown"],j.bind(this,this.handleMouseDown))},b.prototype.handleMouseDown=function(){this.on(["mousemove","touchmove"],j.bind(this.volumeBar,this.volumeBar.handleMouseMove)),this.on(this.el_.ownerDocument,["mouseup","touchend"],this.handleMouseUp)},b.prototype.handleMouseUp=function(){this.off(["mousemove","touchmove"],j.bind(this.volumeBar,this.volumeBar.handleMouseMove))},b}(p["default"]);u.prototype.volumeUpdate=r["default"].prototype.update,u.prototype.controlText_="Mute",l["default"].registerComponent("VolumeMenuButton",u),c["default"]=u},{"../component.js":5,"../popup/popup-button.js":53,"../popup/popup.js":54,"../utils/fn.js":82,"./mute-toggle.js":11,"./volume-control/volume-bar.js":37}],41:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component"),i=d(h),j=a("./modal-dialog"),k=d(j),l=a("./utils/merge-options"),m=d(l),n=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.on(c,"error",g.open),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-error-display "+a.prototype.buildCSSClass.call(this)},b.prototype.content=function(){var a=this.player().error();return a?this.localize(a.message):""},b}(k["default"]);n.prototype.options_=m["default"](k["default"].prototype.options_,{fillAlways:!0,temporary:!1,uncloseable:!0}),i["default"].registerComponent("ErrorDisplay",n),c["default"]=n},{"./component":5,"./modal-dialog":50,"./utils/merge-options":86}],42:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}c.__esModule=!0;var e=a("./utils/events.js"),f=d(e),g=function(){};g.prototype.allowedEvents_={},g.prototype.on=function(a,b){var c=this.addEventListener;this.addEventListener=function(){},f.on(this,a,b),this.addEventListener=c},g.prototype.addEventListener=g.prototype.on,g.prototype.off=function(a,b){f.off(this,a,b)},g.prototype.removeEventListener=g.prototype.off,g.prototype.one=function(a,b){var c=this.addEventListener;this.addEventListener=function(){},f.one(this,a,b),this.addEventListener=c},g.prototype.trigger=function(a){var b=a.type||a;"string"==typeof a&&(a={type:b}),a=f.fixEvent(a),this.allowedEvents_[b]&&this["on"+b]&&this["on"+b](a),f.trigger(this,a)},g.prototype.dispatchEvent=g.prototype.trigger,c["default"]=g},{"./utils/events.js":81}],43:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},f=a("./utils/log"),g=d(f),h=function(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof b?"undefined":e(b)));a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(a.super_=b)},i=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"===("undefined"==typeof b?"undefined":e(b))?("function"==typeof b.init&&(g["default"].warn("Constructor logic via init() is deprecated; please use constructor() instead."),b.constructor=b.init),b.constructor!==Object.prototype.constructor&&(c=b.constructor),d=b):"function"==typeof b&&(c=b),h(c,a);for(var f in d)d.hasOwnProperty(f)&&(c.prototype[f]=d[f]);return c};c["default"]=i},{"./utils/log":85}],44:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;for(var e=a("global/document"),f=d(e),g={},h=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],i=h[0],j=void 0,k=0;k<h.length;k++)if(h[k][1]in f["default"]){j=h[k];break}if(j)for(var l=0;l<j.length;l++)g[i[l]]=j[l];c["default"]=g},{"global/document":92}],45:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-loading-spinner",dir:"ltr"})},b}(i["default"]);i["default"].registerComponent("LoadingSpinner",j),c["default"]=j},{"./component":5}],46:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return a instanceof e?a:("number"==typeof a?this.code=a:"string"==typeof a?this.message=a:"object"===("undefined"==typeof a?"undefined":f(a))&&("number"==typeof a.code&&(this.code=a.code),h["default"](this,a)),void(this.message||(this.message=e.defaultMessages[this.code]||"")))}c.__esModule=!0;var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},g=a("object.assign"),h=d(g);e.prototype.code=0,e.prototype.message="",e.prototype.status=null,e.errorTypes=["MEDIA_ERR_CUSTOM","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_ENCRYPTED"],e.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail part-way.",3:"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",4:"The media could not be loaded, either because the server or network failed or because the format is not supported.",5:"The media is encrypted and we do not have the keys to decrypt it."};for(var i=0;i<e.errorTypes.length;i++)e[e.errorTypes[i]]=i,e.prototype[e.errorTypes[i]]=i;c["default"]=e},{"object.assign":136}],47:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../clickable-component.js"),j=e(i),k=a("../component.js"),l=e(k),m=a("./menu.js"),n=e(m),o=a("../utils/dom.js"),p=d(o),q=a("../utils/fn.js"),r=d(q),s=a("../utils/to-title-case.js"),t=e(s),u=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];f(this,b);var e=g(this,a.call(this,c,d));return e.update(),e.enabled_=!0,e.el_.setAttribute("aria-haspopup","true"),e.el_.setAttribute("role","menuitem"),e.on("keydown",e.handleSubmenuKeyPress),e}return h(b,a),b.prototype.update=function(){var a=this.createMenu();this.menu&&this.removeChild(this.menu),this.menu=a,this.addChild(a),this.buttonPressed_=!1,this.el_.setAttribute("aria-expanded","false"),this.items&&0===this.items.length?this.hide():this.items&&this.items.length>1&&this.show()},b.prototype.createMenu=function(){var a=new n["default"](this.player_);if(this.options_.title){var b=p.createEl("li",{className:"vjs-menu-title",innerHTML:t["default"](this.options_.title),tabIndex:-1});a.children_.unshift(b),p.insertElFirst(b,a.contentEl())}if(this.items=this.createItems(),this.items)for(var c=0;c<this.items.length;c++)a.addItem(this.items[c]);return a},b.prototype.createItems=function(){},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b.prototype.buildCSSClass=function(){var b="vjs-menu-button";return b+=this.options_.inline===!0?"-inline":"-popup","vjs-menu-button "+b+" "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.one(this.menu.contentEl(),"mouseleave",r.bind(this,function(){this.unpressButton(),this.el_.blur()})),this.buttonPressed_?this.unpressButton():this.pressButton()},b.prototype.handleKeyPress=function(b){27===b.which||9===b.which?(this.buttonPressed_&&this.unpressButton(),9!==b.which&&b.preventDefault()):38===b.which||40===b.which?this.buttonPressed_||(this.pressButton(),b.preventDefault()):a.prototype.handleKeyPress.call(this,b)},b.prototype.handleSubmenuKeyPress=function(a){(27===a.which||9===a.which)&&(this.buttonPressed_&&this.unpressButton(),9!==a.which&&a.preventDefault())},b.prototype.pressButton=function(){this.enabled_&&(this.buttonPressed_=!0,this.menu.lockShowing(),this.el_.setAttribute("aria-expanded","true"),this.menu.focus())},b.prototype.unpressButton=function(){this.enabled_&&(this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-expanded","false"),this.el_.focus())},b.prototype.disable=function(){return this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-expanded","false"),this.enabled_=!1,a.prototype.disable.call(this)},b.prototype.enable=function(){return this.enabled_=!0,a.prototype.enable.call(this)},b}(j["default"]);l["default"].registerComponent("MenuButton",u),c["default"]=u},{"../clickable-component.js":3,"../component.js":5,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/to-title-case.js":89,"./menu.js":49}],48:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../clickable-component.js"),i=d(h),j=a("../component.js"),k=d(j),l=a("object.assign"),m=d(l),n=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.selectable=d.selectable,g.selected(d.selected),g.selectable?g.el_.setAttribute("role","menuitemcheckbox"):g.el_.setAttribute("role","menuitem"),g}return g(b,a),b.prototype.createEl=function(b,c,d){return a.prototype.createEl.call(this,"li",m["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label),tabIndex:-1},c),d)},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){this.selectable&&(a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-checked","true"),this.controlText(", selected")):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-checked","false"),this.controlText(" ")))},b}(i["default"]);k["default"].registerComponent("MenuItem",n),c["default"]=n},{"../clickable-component.js":3,"../component.js":5,"object.assign":136}],49:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{
+constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component.js"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=a("../utils/fn.js"),n=d(m),o=a("../utils/events.js"),p=d(o),q=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.focusedChild_=-1,e.on("keydown",e.handleKeyPress),e}return h(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",n.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=l.createEl(b,{className:"vjs-menu-content"}),this.contentEl_.setAttribute("role","menu");var c=a.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return c.setAttribute("role","presentation"),c.appendChild(this.contentEl_),p.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b.prototype.handleKeyPress=function(a){37===a.which||40===a.which?(a.preventDefault(),this.stepForward()):(38===a.which||39===a.which)&&(a.preventDefault(),this.stepBack())},b.prototype.stepForward=function(){var a=0;void 0!==this.focusedChild_&&(a=this.focusedChild_+1),this.focus(a)},b.prototype.stepBack=function(){var a=0;void 0!==this.focusedChild_&&(a=this.focusedChild_-1),this.focus(a)},b.prototype.focus=function(){var a=arguments.length<=0||void 0===arguments[0]?0:arguments[0],b=this.children().slice(),c=b.length&&b[0].className&&/vjs-menu-title/.test(b[0].className);c&&b.shift(),b.length>0&&(0>a?a=0:a>=b.length&&(a=b.length-1),this.focusedChild_=a,b[a].el_.focus())},b}(j["default"]);j["default"].registerComponent("Menu",q),c["default"]=q},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],50:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./utils/dom"),j=e(i),k=a("./utils/fn"),l=e(k),m=a("./component"),n=d(m),o="vjs-modal-dialog",p=27,q=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.opened_=e.hasBeenOpened_=e.hasBeenFilled_=!1,e.closeable(!e.options_.uncloseable),e.content(e.options_.content),e.contentEl_=j.createEl("div",{className:o+"-content"},{role:"document"}),e.descEl_=j.createEl("p",{className:o+"-description vjs-offscreen",id:e.el().getAttribute("aria-describedby")}),j.textContent(e.descEl_,e.description()),e.el_.appendChild(e.descEl_),e.el_.appendChild(e.contentEl_),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass(),tabIndex:-1},{"aria-describedby":this.id()+"_description","aria-hidden":"true","aria-label":this.label(),role:"dialog"})},b.prototype.buildCSSClass=function(){return o+" vjs-hidden "+a.prototype.buildCSSClass.call(this)},b.prototype.handleKeyPress=function(a){a.which===p&&this.closeable()&&this.close()},b.prototype.label=function(){return this.options_.label||this.localize("Modal Window")},b.prototype.description=function(){var a=this.options_.description||this.localize("This is a modal window.");return this.closeable()&&(a+=" "+this.localize("This modal can be closed by pressing the Escape key or activating the close button.")),a},b.prototype.open=function(){if(!this.opened_){var a=this.player();this.trigger("beforemodalopen"),this.opened_=!0,(this.options_.fillAlways||!this.hasBeenOpened_&&!this.hasBeenFilled_)&&this.fill(),this.wasPlaying_=!a.paused(),this.wasPlaying_&&a.pause(),this.closeable()&&this.on(this.el_.ownerDocument,"keydown",l.bind(this,this.handleKeyPress)),a.controls(!1),this.show(),this.el().setAttribute("aria-hidden","false"),this.trigger("modalopen"),this.hasBeenOpened_=!0}return this},b.prototype.opened=function(a){return"boolean"==typeof a&&this[a?"open":"close"](),this.opened_},b.prototype.close=function(){if(this.opened_){var a=this.player();this.trigger("beforemodalclose"),this.opened_=!1,this.wasPlaying_&&a.play(),this.closeable()&&this.off(this.el_.ownerDocument,"keydown",l.bind(this,this.handleKeyPress)),a.controls(!0),this.hide(),this.el().setAttribute("aria-hidden","true"),this.trigger("modalclose"),this.options_.temporary&&this.dispose()}return this},b.prototype.closeable=function c(a){if("boolean"==typeof a){var c=this.closeable_=!!a,b=this.getChild("closeButton");if(c&&!b){var d=this.contentEl_;this.contentEl_=this.el_,b=this.addChild("closeButton",{controlText:"Close Modal Dialog"}),this.contentEl_=d,this.on(b,"close",this.close)}!c&&b&&(this.off(b,"close",this.close),this.removeChild(b),b.dispose())}return this.closeable_},b.prototype.fill=function(){return this.fillWith(this.content())},b.prototype.fillWith=function(a){var b=this.contentEl(),c=b.parentNode,d=b.nextSibling;return this.trigger("beforemodalfill"),this.hasBeenFilled_=!0,c.removeChild(b),this.empty(),j.insertContent(b,a),this.trigger("modalfill"),d?c.insertBefore(b,d):c.appendChild(b),this},b.prototype.empty=function(){return this.trigger("beforemodalempty"),j.emptyEl(this.contentEl()),this.trigger("modalempty"),this},b.prototype.content=function(a){return"undefined"!=typeof a&&(this.content_=a),this.content_},b}(n["default"]);q.prototype.options_={temporary:!0},n["default"].registerComponent("ModalDialog",q),c["default"]=q},{"./component":5,"./utils/dom":80,"./utils/fn":82}],51:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./component.js"),j=e(i),k=a("global/document"),l=e(k),m=a("global/window"),n=e(m),o=a("./utils/events.js"),p=d(o),q=a("./utils/dom.js"),r=d(q),s=a("./utils/fn.js"),t=d(s),u=a("./utils/guid.js"),v=d(u),w=a("./utils/browser.js"),x=d(w),y=a("./utils/log.js"),z=e(y),A=a("./utils/to-title-case.js"),B=e(A),C=a("./utils/time-ranges.js"),D=a("./utils/buffer.js"),E=a("./utils/stylesheet.js"),F=d(E),G=a("./fullscreen-api.js"),H=e(G),I=a("./media-error.js"),J=e(I),K=a("safe-json-parse/tuple"),L=e(K),M=a("object.assign"),N=e(M),O=a("./utils/merge-options.js"),P=e(O),Q=a("./tracks/text-track-list-converter.js"),R=e(Q),S=a("./modal-dialog"),T=e(S),U=a("./tech/tech.js"),V=e(U),W=a("./tracks/audio-track-list.js"),X=e(W),Y=a("./tracks/video-track-list.js"),Z=e(Y);a("./tech/loader.js"),a("./tech/flash.js"),a("./poster-image.js"),a("./tracks/text-track-display.js"),a("./loading-spinner.js"),a("./big-play-button.js"),a("./close-button.js"),a("./control-bar/control-bar.js"),a("./error-display.js"),a("./tracks/text-track-settings.js"),a("./tech/html5.js");var $=function(a){function b(c,d,e){if(f(this,b),c.id=c.id||"vjs_video_"+v.newGUID(),d=N["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,!d.language)if("function"==typeof c.closest){var h=c.closest("[lang]");h&&(d.language=h.getAttribute("lang"))}else for(var i=c;i&&1===i.nodeType;){if(r.getElAttributes(i).hasOwnProperty("lang")){d.language=i.getAttribute("lang");break}i=i.parentNode}var j=g(this,a.call(this,null,d,e));if(!j.options_||!j.options_.techOrder||!j.options_.techOrder.length)throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?");j.tag=c,j.tagAttributes=c&&r.getElAttributes(c),j.language(j.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),j.languages_=a}():j.languages_=b.prototype.options_.languages,j.cache_={},j.poster_=d.poster||"",j.controls_=!!d.controls,c.controls=!1,j.scrubbing_=!1,j.el_=j.createEl();var k=P["default"](j.options_);return d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):z["default"].error("Unable to find plugin:",b)},j)}(),j.options_.playerOptions=k,j.initChildren(),j.isAudio("audio"===c.nodeName.toLowerCase()),j.addClass(j.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),j.el_.setAttribute("role","region"),j.isAudio()?j.el_.setAttribute("aria-label","audio player"):j.el_.setAttribute("aria-label","video player"),j.isAudio()&&j.addClass("vjs-audio"),j.flexNotSupported_()&&j.addClass("vjs-no-flex"),x.IS_IOS||j.addClass("vjs-workinghover"),b.players[j.id_]=j,j.userActive(!0),j.reportUserActivity(),j.listenForUserActivity_(),j.on("fullscreenchange",j.handleFullscreenChange_),j.on("stageclick",j.handleStageClick_),j}return h(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&this.styleEl_.parentNode&&this.styleEl_.parentNode.removeChild(this.styleEl_),b.players[this.id_]=null,this.tag&&this.tag.player&&(this.tag.player=null),this.el_&&this.el_.player&&(this.el_.player=null),this.tech_&&this.tech_.dispose(),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var b=this.el_=a.prototype.createEl.call(this,"div"),c=this.tag;c.removeAttribute("width"),c.removeAttribute("height");var d=r.getElAttributes(c);if(Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.playerId=c.id,c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),n["default"].VIDEOJS_NO_DYNAMIC_STYLE!==!0){this.styleEl_=F.createStyleElement("vjs-styles-dimensions");var e=r.$(".vjs-styles-defaults"),f=r.$("head");f.insertBefore(this.styleEl_,e?e.nextSibling:f.firstChild)}this.width(this.options_.width),this.height(this.options_.height),this.fluid(this.options_.fluid),this.aspectRatio(this.options_.aspectRatio);for(var g=c.getElementsByTagName("a"),h=0;h<g.length;h++){var i=g.item(h);r.addElClass(i,"vjs-hidden"),i.setAttribute("hidden","hidden")}return c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),r.insertElFirst(c,b),this.children_.unshift(c),this.el_=b,b},b.prototype.width=function(a){return this.dimension("width",a)},b.prototype.height=function(a){return this.dimension("height",a)},b.prototype.dimension=function(a,b){var c=a+"_";if(void 0===b)return this[c]||0;if(""===b)this[c]=void 0;else{var d=parseFloat(b);if(isNaN(d))return z["default"].error('Improper value "'+b+'" supplied for for '+a),this;this[c]=d}return this.updateStyleEl_(),this},b.prototype.fluid=function(a){return void 0===a?!!this.fluid_:(this.fluid_=!!a,void(a?this.addClass("vjs-fluid"):this.removeClass("vjs-fluid")))},b.prototype.aspectRatio=function(a){if(void 0===a)return this.aspectRatio_;if(!/^\d+\:\d+$/.test(a))throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.");this.aspectRatio_=a,this.fluid(!0),this.updateStyleEl_()},b.prototype.updateStyleEl_=function(){if(n["default"].VIDEOJS_NO_DYNAMIC_STYLE===!0){var a="number"==typeof this.width_?this.width_:this.options_.width,b="number"==typeof this.height_?this.height_:this.options_.height,c=this.tech_&&this.tech_.el();return void(c&&(a>=0&&(c.width=a),b>=0&&(c.height=b)))}var d=void 0,e=void 0,f=void 0,g=void 0;f=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var h=f.split(":"),i=h[1]/h[0];d=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/i:this.videoWidth()||300,e=void 0!==this.height_?this.height_:d*i,g=/^[^a-zA-Z]/.test(this.id())?"dimensions-"+this.id():this.id()+"-dimensions",this.addClass(g),F.setTextContent(this.styleEl_,"\n      ."+g+" {\n        width: "+d+"px;\n        height: "+e+"px;\n      }\n\n      ."+g+".vjs-fluid {\n        padding-top: "+100*i+"%;\n      }\n    ")},b.prototype.loadTech_=function(a,b){this.tech_&&this.unloadTech_(),"Html5"!==a&&this.tag&&(V["default"].getTech("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=a,this.isReady_=!1;var c=N["default"]({source:b,nativeControlsForTouch:this.options_.nativeControlsForTouch,playerId:this.id(),techId:this.id()+"_"+a+"_api",videoTracks:this.videoTracks_,textTracks:this.textTracks_,audioTracks:this.audioTracks_,autoplay:this.options_.autoplay,preload:this.options_.preload,loop:this.options_.loop,muted:this.options_.muted,poster:this.poster(),language:this.language(),"vtt.js":this.options_["vtt.js"]},this.options_[a.toLowerCase()]);this.tag&&(c.tag=this.tag),b&&(this.currentType_=b.type,b.src===this.cache_.src&&this.cache_.currentTime>0&&(c.startTime=this.cache_.currentTime),this.cache_.src=b.src);var d=V["default"].getTech(a);d||(d=j["default"].getComponent(a)),this.tech_=new d(c),this.tech_.ready(t.bind(this,this.handleTechReady_),!0),R["default"].jsonToTextTracks(this.textTracksJson_||[],this.tech_),this.on(this.tech_,"loadstart",this.handleTechLoadStart_),this.on(this.tech_,"waiting",this.handleTechWaiting_),this.on(this.tech_,"canplay",this.handleTechCanPlay_),this.on(this.tech_,"canplaythrough",this.handleTechCanPlayThrough_),this.on(this.tech_,"playing",this.handleTechPlaying_),this.on(this.tech_,"ended",this.handleTechEnded_),this.on(this.tech_,"seeking",this.handleTechSeeking_),this.on(this.tech_,"seeked",this.handleTechSeeked_),this.on(this.tech_,"play",this.handleTechPlay_),this.on(this.tech_,"firstplay",this.handleTechFirstPlay_),this.on(this.tech_,"pause",this.handleTechPause_),this.on(this.tech_,"progress",this.handleTechProgress_),this.on(this.tech_,"durationchange",this.handleTechDurationChange_),this.on(this.tech_,"fullscreenchange",this.handleTechFullscreenChange_),this.on(this.tech_,"error",this.handleTechError_),this.on(this.tech_,"suspend",this.handleTechSuspend_),this.on(this.tech_,"abort",this.handleTechAbort_),this.on(this.tech_,"emptied",this.handleTechEmptied_),this.on(this.tech_,"stalled",this.handleTechStalled_),this.on(this.tech_,"loadedmetadata",this.handleTechLoadedMetaData_),this.on(this.tech_,"loadeddata",this.handleTechLoadedData_),this.on(this.tech_,"timeupdate",this.handleTechTimeUpdate_),this.on(this.tech_,"ratechange",this.handleTechRateChange_),this.on(this.tech_,"volumechange",this.handleTechVolumeChange_),this.on(this.tech_,"texttrackchange",this.handleTechTextTrackChange_),this.on(this.tech_,"loadedmetadata",this.updateStyleEl_),this.on(this.tech_,"posterchange",this.handleTechPosterChange_),this.on(this.tech_,"textdata",this.handleTechTextData_),this.usingNativeControls(this.techGet_("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners_(),this.tech_.el().parentNode===this.el()||"Html5"===a&&this.tag||r.insertElFirst(this.tech_.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null)},b.prototype.unloadTech_=function(){this.videoTracks_=this.videoTracks(),this.textTracks_=this.textTracks(),this.audioTracks_=this.audioTracks(),this.textTracksJson_=R["default"].textTracksToJson(this.tech_),this.isReady_=!1,this.tech_.dispose(),this.tech_=!1},b.prototype.tech=function(a){if(a&&a.IWillNotUseThisInPlugins)return this.tech_;var b="\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    ";throw n["default"].alert(b),new Error(b)},b.prototype.addTechControlsListeners_=function(){this.removeTechControlsListeners_(),this.on(this.tech_,"mousedown",this.handleTechClick_),this.on(this.tech_,"touchstart",this.handleTechTouchStart_),this.on(this.tech_,"touchmove",this.handleTechTouchMove_),this.on(this.tech_,"touchend",this.handleTechTouchEnd_),this.on(this.tech_,"tap",this.handleTechTap_)},b.prototype.removeTechControlsListeners_=function(){this.off(this.tech_,"tap",this.handleTechTap_),this.off(this.tech_,"touchstart",this.handleTechTouchStart_),this.off(this.tech_,"touchmove",this.handleTechTouchMove_),this.off(this.tech_,"touchend",this.handleTechTouchEnd_),this.off(this.tech_,"mousedown",this.handleTechClick_)},b.prototype.handleTechReady_=function(){if(this.triggerReady(),this.cache_.volume&&this.techCall_("setVolume",this.cache_.volume),this.handleTechPosterChange_(),this.handleTechDurationChange_(),(this.src()||this.currentSrc())&&this.tag&&this.options_.autoplay&&this.paused()){try{delete this.tag.poster}catch(a){z["default"]("deleting tag.poster throws in some browsers",a)}this.play()}},b.prototype.handleTechLoadStart_=function(){this.removeClass("vjs-ended"),this.error(null),this.paused()?(this.hasStarted(!1),this.trigger("loadstart")):(this.trigger("loadstart"),this.trigger("firstplay"))},b.prototype.hasStarted=function(a){return void 0!==a?(this.hasStarted_!==a&&(this.hasStarted_=a,a?(this.addClass("vjs-has-started"),this.trigger("firstplay")):this.removeClass("vjs-has-started")),this):!!this.hasStarted_},b.prototype.handleTechPlay_=function(){this.removeClass("vjs-ended"),this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.hasStarted(!0),this.trigger("play")},b.prototype.handleTechWaiting_=function(){var a=this;this.addClass("vjs-waiting"),this.trigger("waiting"),this.one("timeupdate",function(){return a.removeClass("vjs-waiting")})},b.prototype.handleTechCanPlay_=function(){this.removeClass("vjs-waiting"),this.trigger("canplay")},b.prototype.handleTechCanPlayThrough_=function(){this.removeClass("vjs-waiting"),this.trigger("canplaythrough")},b.prototype.handleTechPlaying_=function(){this.removeClass("vjs-waiting"),this.trigger("playing")},b.prototype.handleTechSeeking_=function(){this.addClass("vjs-seeking"),this.trigger("seeking")},b.prototype.handleTechSeeked_=function(){this.removeClass("vjs-seeking"),this.trigger("seeked")},b.prototype.handleTechFirstPlay_=function(){this.options_.starttime&&this.currentTime(this.options_.starttime),this.addClass("vjs-has-started"),this.trigger("firstplay")},b.prototype.handleTechPause_=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.trigger("pause")},b.prototype.handleTechProgress_=function(){this.trigger("progress")},b.prototype.handleTechEnded_=function(){this.addClass("vjs-ended"),this.options_.loop?(this.currentTime(0),this.play()):this.paused()||this.pause(),this.trigger("ended")},b.prototype.handleTechDurationChange_=function(){this.duration(this.techGet_("duration"))},b.prototype.handleTechClick_=function(a){0===a.button&&this.controls()&&(this.paused()?this.play():this.pause())},b.prototype.handleTechTap_=function(){this.userActive(!this.userActive())},b.prototype.handleTechTouchStart_=function(){this.userWasActive=this.userActive()},b.prototype.handleTechTouchMove_=function(){this.userWasActive&&this.reportUserActivity()},b.prototype.handleTechTouchEnd_=function(a){a.preventDefault()},b.prototype.handleFullscreenChange_=function(){this.isFullscreen()?this.addClass("vjs-fullscreen"):this.removeClass("vjs-fullscreen")},b.prototype.handleStageClick_=function(){this.reportUserActivity()},b.prototype.handleTechFullscreenChange_=function(a,b){b&&this.isFullscreen(b.isFullscreen),this.trigger("fullscreenchange")},b.prototype.handleTechError_=function(){var a=this.tech_.error();this.error(a)},b.prototype.handleTechSuspend_=function(){this.trigger("suspend")},b.prototype.handleTechAbort_=function(){this.trigger("abort")},b.prototype.handleTechEmptied_=function(){this.trigger("emptied")},b.prototype.handleTechStalled_=function(){this.trigger("stalled")},b.prototype.handleTechLoadedMetaData_=function(){this.trigger("loadedmetadata")},b.prototype.handleTechTextData_=function(){var a=null;arguments.length>1&&(a=arguments[1]),this.trigger("textdata",a)},b.prototype.handleTechLoadedData_=function(){this.trigger("loadeddata")},b.prototype.handleTechTimeUpdate_=function(){this.trigger("timeupdate")},b.prototype.handleTechRateChange_=function(){this.trigger("ratechange")},b.prototype.handleTechVolumeChange_=function(){this.trigger("volumechange")},b.prototype.handleTechTextTrackChange_=function(){this.trigger("texttrackchange")},b.prototype.getCache=function(){return this.cache_},b.prototype.techCall_=function(a,b){if(this.tech_&&!this.tech_.isReady_)this.tech_.ready(function(){this[a](b)},!0);else try{this.tech_&&this.tech_[a](b)}catch(c){throw z["default"](c),c}},b.prototype.techGet_=function(a){if(this.tech_&&this.tech_.isReady_)try{return this.tech_[a]()}catch(b){throw void 0===this.tech_[a]?z["default"]("Video.js: "+a+" method not defined for "+this.techName_+" playback technology.",b):"TypeError"===b.name?(z["default"]("Video.js: "+a+" unavailable on "+this.techName_+" playback technology element.",b),this.tech_.isReady_=!1):z["default"](b),b}},b.prototype.play=function(){return this.src()||this.currentSrc()?this.techCall_("play"):this.tech_.one("loadstart",function(){this.play()}),this},b.prototype.pause=function(){return this.techCall_("pause"),this},b.prototype.paused=function(){return this.techGet_("paused")===!1?!1:!0},b.prototype.scrubbing=function(a){return void 0!==a?(this.scrubbing_=!!a,a?this.addClass("vjs-scrubbing"):this.removeClass("vjs-scrubbing"),this):this.scrubbing_},b.prototype.currentTime=function(a){return void 0!==a?(this.techCall_("setCurrentTime",a),this):(this.cache_.currentTime=this.techGet_("currentTime")||0,this.cache_.currentTime)},b.prototype.duration=function(a){return void 0===a?this.cache_.duration||0:(a=parseFloat(a)||0,0>a&&(a=1/0),a!==this.cache_.duration&&(this.cache_.duration=a,a===1/0?this.addClass("vjs-live"):this.removeClass("vjs-live"),this.trigger("durationchange")),this)},b.prototype.remainingTime=function(){return this.duration()-this.currentTime()},b.prototype.buffered=function c(){var c=this.techGet_("buffered");return c&&c.length||(c=C.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return D.bufferedPercent(this.buffered(),this.duration())},b.prototype.bufferedEnd=function(){var a=this.buffered(),b=this.duration(),c=a.end(a.length-1);return c>b&&(c=b),c},b.prototype.volume=function(a){var b=void 0;return void 0!==a?(b=Math.max(0,Math.min(1,parseFloat(a))),this.cache_.volume=b,this.techCall_("setVolume",b),this):(b=parseFloat(this.techGet_("volume")),isNaN(b)?1:b)},b.prototype.muted=function(a){return void 0!==a?(this.techCall_("setMuted",a),this):this.techGet_("muted")||!1},b.prototype.supportsFullScreen=function(){return this.techGet_("supportsFullScreen")||!1},b.prototype.isFullscreen=function(a){return void 0!==a?(this.isFullscreen_=!!a,this):!!this.isFullscreen_},b.prototype.requestFullscreen=function(){var a=H["default"];return this.isFullscreen(!0),a.requestFullscreen?(p.on(l["default"],a.fullscreenchange,t.bind(this,function b(){this.isFullscreen(l["default"][a.fullscreenElement]),this.isFullscreen()===!1&&p.off(l["default"],a.fullscreenchange,b),this.trigger("fullscreenchange")})),this.el_[a.requestFullscreen]()):this.tech_.supportsFullScreen()?this.techCall_("enterFullScreen"):(this.enterFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.exitFullscreen=function(){var a=H["default"];return this.isFullscreen(!1),a.requestFullscreen?l["default"][a.exitFullscreen]():this.tech_.supportsFullScreen()?this.techCall_("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=l["default"].documentElement.style.overflow,p.on(l["default"],"keydown",t.bind(this,this.fullWindowOnEscKey)),l["default"].documentElement.style.overflow="hidden",r.addElClass(l["default"].body,"vjs-full-window"),this.trigger("enterFullWindow")},b.prototype.fullWindowOnEscKey=function(a){27===a.keyCode&&(this.isFullscreen()===!0?this.exitFullscreen():this.exitFullWindow())},b.prototype.exitFullWindow=function(){this.isFullWindow=!1,p.off(l["default"],"keydown",this.fullWindowOnEscKey),l["default"].documentElement.style.overflow=this.docOrigOverflow,r.removeElClass(l["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.canPlayType=function(a){for(var b=void 0,c=0,d=this.options_.techOrder;c<d.length;c++){var e=B["default"](d[c]),f=V["default"].getTech(e);if(f||(f=j["default"].getComponent(e)),f){if(f.isSupported()&&(b=f.canPlayType(a)))return b}else z["default"].error('The "'+e+'" tech is undefined. Skipped browser support check for that tech.')}return""},b.prototype.selectSource=function(a){var b=this,c=this.options_.techOrder.map(B["default"]).map(function(a){return[a,V["default"].getTech(a)||j["default"].getComponent(a)]}).filter(function(a){var b=a[0],c=a[1];return c?c.isSupported():(z["default"].error('The "'+b+'" tech is undefined. Skipped browser support check for that tech.'),!1)}),d=function(a,b,c){var d=void 0;return a.some(function(a){return b.some(function(b){return d=c(a,b),d?!0:void 0})}),d},e=void 0,f=function(a){return function(b,c){return a(c,b)}},g=function(a,c){var d=a[0],e=a[1];return e.canPlaySource(c,b.options_[d.toLowerCase()])?{source:c,tech:d}:void 0};return e=this.options_.sourceOrder?d(a,c,f(g)):d(c,a,g),e||!1},b.prototype.src=function(a){if(void 0===a)return this.techGet_("src");var b=V["default"].getTech(this.techName_);return b||(b=j["default"].getComponent(this.techName_)),Array.isArray(a)?this.sourceList_(a):"string"==typeof a?this.src({src:a}):a instanceof Object&&(a.type&&!b.canPlaySource(a,this.options_[this.techName_.toLowerCase()])?this.sourceList_([a]):(this.cache_.src=a.src,this.currentType_=a.type||"",this.ready(function(){b.prototype.hasOwnProperty("setSource")?this.techCall_("setSource",a):this.techCall_("src",a.src),"auto"===this.options_.preload&&this.load(),this.options_.autoplay&&this.play()},!0))),this},b.prototype.sourceList_=function(a){var b=this.selectSource(a);b?b.tech===this.techName_?this.src(b.source):this.loadTech_(b.tech,b.source):(this.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)})},0),this.triggerReady())},b.prototype.load=function(){return this.techCall_("load"),this},b.prototype.reset=function(){return this.loadTech_(B["default"](this.options_.techOrder[0]),null),this.techCall_("reset"),this},b.prototype.currentSrc=function(){return this.techGet_("currentSrc")||this.cache_.src||""},b.prototype.currentType=function(){return this.currentType_||""},b.prototype.preload=function(a){return void 0!==a?(this.techCall_("setPreload",a),this.options_.preload=a,this):this.techGet_("preload")},b.prototype.autoplay=function(a){return void 0!==a?(this.techCall_("setAutoplay",a),this.options_.autoplay=a,this):this.techGet_("autoplay",a)},b.prototype.loop=function(a){return void 0!==a?(this.techCall_("setLoop",a),this.options_.loop=a,this):this.techGet_("loop")},b.prototype.poster=function(a){return void 0===a?this.poster_:(a||(a=""),this.poster_=a,this.techCall_("setPoster",a),this.trigger("posterchange"),this)},b.prototype.handleTechPosterChange_=function(){!this.poster_&&this.tech_&&this.tech_.poster&&(this.poster_=this.tech_.poster()||"",this.trigger("posterchange"))},b.prototype.controls=function(a){return void 0!==a?(a=!!a,this.controls_!==a&&(this.controls_=a,this.usingNativeControls()&&this.techCall_("setControls",a),a?(this.removeClass("vjs-controls-disabled"),this.addClass("vjs-controls-enabled"),this.trigger("controlsenabled"),this.usingNativeControls()||this.addTechControlsListeners_()):(this.removeClass("vjs-controls-enabled"),this.addClass("vjs-controls-disabled"),this.trigger("controlsdisabled"),this.usingNativeControls()||this.removeTechControlsListeners_())),this):!!this.controls_},b.prototype.usingNativeControls=function(a){return void 0!==a?(a=!!a,this.usingNativeControls_!==a&&(this.usingNativeControls_=a,a?(this.addClass("vjs-using-native-controls"),this.trigger("usingnativecontrols")):(this.removeClass("vjs-using-native-controls"),this.trigger("usingcustomcontrols"))),this):!!this.usingNativeControls_},b.prototype.error=function(a){return void 0===a?this.error_||null:null===a?(this.error_=a,this.removeClass("vjs-error"),this.errorDisplay&&this.errorDisplay.close(),this):(this.error_=new J["default"](a),this.addClass("vjs-error"),z["default"].error("(CODE:"+this.error_.code+" "+J["default"].errorTypes[this.error_.code]+")",this.error_.message,this.error_),this.trigger("error"),this)},b.prototype.ended=function(){return this.techGet_("ended")},b.prototype.seeking=function(){return this.techGet_("seeking")},b.prototype.seekable=function(){return this.techGet_("seekable")},b.prototype.reportUserActivity=function(){this.userActivity_=!0},b.prototype.userActive=function(a){return void 0!==a?(a=!!a,a!==this.userActive_&&(this.userActive_=a,a?(this.userActivity_=!0,this.removeClass("vjs-user-inactive"),this.addClass("vjs-user-active"),this.trigger("useractive")):(this.userActivity_=!1,this.tech_&&this.tech_.one("mousemove",function(a){a.stopPropagation(),a.preventDefault()}),this.removeClass("vjs-user-active"),this.addClass("vjs-user-inactive"),this.trigger("userinactive"))),this):this.userActive_},b.prototype.listenForUserActivity_=function(){var a=void 0,b=void 0,c=void 0,d=t.bind(this,this.reportUserActivity),e=function(a){(a.screenX!==b||a.screenY!==c)&&(b=a.screenX,c=a.screenY,d())},f=function(){d(),this.clearInterval(a),a=this.setInterval(d,250)},g=function(){d(),this.clearInterval(a)};this.on("mousedown",f),this.on("mousemove",e),this.on("mouseup",g),this.on("keydown",d),this.on("keyup",d);var h=void 0;this.setInterval(function(){if(this.userActivity_){this.userActivity_=!1,this.userActive(!0),this.clearTimeout(h);var a=this.options_.inactivityTimeout;a>0&&(h=this.setTimeout(function(){this.userActivity_||this.userActive(!1)},a))}},250)},b.prototype.playbackRate=function(a){return void 0!==a?(this.techCall_("setPlaybackRate",a),this):this.tech_&&this.tech_.featuresPlaybackRate?this.techGet_("playbackRate"):1},b.prototype.isAudio=function(a){return void 0!==a?(this.isAudio_=!!a,this):!!this.isAudio_},b.prototype.networkState=function(){return this.techGet_("networkState")},b.prototype.readyState=function(){return this.techGet_("readyState")},b.prototype.videoTracks=function(){return this.tech_?this.tech_.videoTracks():(this.videoTracks_=this.videoTracks_||new Z["default"],this.videoTracks_)},b.prototype.audioTracks=function(){return this.tech_?this.tech_.audioTracks():(this.audioTracks_=this.audioTracks_||new X["default"],this.audioTracks_)},b.prototype.textTracks=function(){return this.tech_?this.tech_.textTracks():void 0},b.prototype.remoteTextTracks=function(){return this.tech_?this.tech_.remoteTextTracks():void 0},b.prototype.remoteTextTrackEls=function(){return this.tech_?this.tech_.remoteTextTrackEls():void 0},b.prototype.addTextTrack=function(a,b,c){return this.tech_?this.tech_.addTextTrack(a,b,c):void 0},b.prototype.addRemoteTextTrack=function(a){
+return this.tech_?this.tech_.addRemoteTextTrack(a):void 0},b.prototype.removeRemoteTextTrack=function(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=a.track,c=void 0===b?arguments[0]:b;return this.tech_?this.tech_.removeRemoteTextTrack(c):void 0},b.prototype.videoWidth=function(){return this.tech_&&this.tech_.videoWidth&&this.tech_.videoWidth()||0},b.prototype.videoHeight=function(){return this.tech_&&this.tech_.videoHeight&&this.tech_.videoHeight()||0},b.prototype.language=function(a){return void 0===a?this.language_:(this.language_=String(a).toLowerCase(),this)},b.prototype.languages=function(){return P["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=P["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;c<b.length;c++){var d=b[c];d=P["default"](d),d.player=void 0,a.tracks[c]=d}return a},b.prototype.createModal=function(a,b){var c=this;b=b||{},b.content=a||"";var d=new T["default"](this,b);return this.addChild(d),d.on("dispose",function(){c.removeChild(d)}),d.open()},b.getTagSettings=function(a){var b={sources:[],tracks:[]},c=r.getElAttributes(a),d=c["data-setup"];if(null!==d){var e=L["default"](d||"{}"),f=e[0],g=e[1];f&&z["default"].error(f),N["default"](c,g)}if(N["default"](b,c),a.hasChildNodes())for(var h=a.childNodes,i=0,j=h.length;j>i;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(r.getElAttributes(k)):"track"===l&&b.tracks.push(r.getElAttributes(k))}return b},b}(j["default"]);$.players={};var _=n["default"].navigator;$.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:["mediaLoader","posterImage","textTrackDisplay","loadingSpinner","bigPlayButton","controlBar","errorDisplay","textTrackSettings"],language:_&&(_.languages&&_.languages[0]||_.userLanguage||_.language)||"en",languages:{},notSupportedMessage:"No compatible source was found for this media."},$.prototype.handleTechLoadStart_,$.prototype.handleLoadedMetaData_,$.prototype.handleTextData_,$.prototype.handleLoadedData_,$.prototype.handleUserActive_,$.prototype.handleUserInactive_,$.prototype.handleTimeUpdate_,$.prototype.handleTechEnded_,$.prototype.handleVolumeChange_,$.prototype.handleError_,$.prototype.flexNotSupported_=function(){var a=l["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},j["default"].registerComponent("Player",$),c["default"]=$},{"./big-play-button.js":1,"./close-button.js":4,"./component.js":5,"./control-bar/control-bar.js":8,"./error-display.js":41,"./fullscreen-api.js":44,"./loading-spinner.js":45,"./media-error.js":46,"./modal-dialog":50,"./poster-image.js":55,"./tech/flash.js":59,"./tech/html5.js":60,"./tech/loader.js":61,"./tech/tech.js":62,"./tracks/audio-track-list.js":63,"./tracks/text-track-display.js":68,"./tracks/text-track-list-converter.js":69,"./tracks/text-track-settings.js":71,"./tracks/video-track-list.js":76,"./utils/browser.js":78,"./utils/buffer.js":79,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/to-title-case.js":89,"global/document":92,"global/window":93,"object.assign":136,"safe-json-parse/tuple":145}],52:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./player.js"),f=d(e),g=function(a,b){f["default"].prototype[a]=b};c["default"]=g},{"./player.js":51}],53:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../clickable-component.js"),i=d(h),j=a("../component.js"),k=d(j),l=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b);var g=f(this,a.call(this,c,d));return g.update(),g}return g(b,a),b.prototype.update=function(){var a=this.createPopup();this.popup&&this.removeChild(this.popup),this.popup=a,this.addChild(a),this.items&&0===this.items.length?this.hide():this.items&&this.items.length>1&&this.show()},b.prototype.createPopup=function(){},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b.prototype.buildCSSClass=function(){var b="vjs-menu-button";return b+=this.options_.inline===!0?"-inline":"-popup","vjs-menu-button "+b+" "+a.prototype.buildCSSClass.call(this)},b}(i["default"]);k["default"].registerComponent("PopupButton",l),c["default"]=l},{"../clickable-component.js":3,"../component.js":5}],54:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component.js"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=a("../utils/fn.js"),n=d(m),o=a("../utils/events.js"),p=d(o),q=function(a){function b(){return f(this,b),g(this,a.apply(this,arguments))}return h(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",n.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=l.createEl(b,{className:"vjs-menu-content"});var c=a.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return c.appendChild(this.contentEl_),p.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(j["default"]);j["default"].registerComponent("Popup",q),c["default"]=q},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],55:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./clickable-component.js"),j=e(i),k=a("./component.js"),l=e(k),m=a("./utils/fn.js"),n=d(m),o=a("./utils/dom.js"),p=d(o),q=a("./utils/browser.js"),r=d(q),s=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.update(),c.on("posterchange",n.bind(e,e.update)),e}return h(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=p.createEl("div",{className:"vjs-poster",tabIndex:-1});return r.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=p.createEl("img"),a.appendChild(this.fallbackImg_)),a},b.prototype.update=function(){var a=this.player().poster();this.setSrc(a),a?this.show():this.hide()},b.prototype.setSrc=function(a){if(this.fallbackImg_)this.fallbackImg_.src=a;else{var b="";a&&(b='url("'+a+'")'),this.el_.style.backgroundImage=b}},b.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},b}(j["default"]);l["default"].registerComponent("PosterImage",s),c["default"]=s},{"./clickable-component.js":3,"./component.js":5,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/fn.js":82}],56:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){b&&(n=b),setTimeout(o,a)}c.__esModule=!0,c.hasLoaded=c.autoSetupTimeout=c.autoSetup=void 0;var g=a("./utils/events.js"),h=e(g),i=a("global/document"),j=d(i),k=a("global/window"),l=d(k),m=!1,n=void 0,o=function(){var a=j["default"].getElementsByTagName("video"),b=j["default"].getElementsByTagName("audio"),c=[];if(a&&a.length>0)for(var d=0,e=a.length;e>d;d++)c.push(a[d]);if(b&&b.length>0)for(var g=0,h=b.length;h>g;g++)c.push(b[g]);if(c&&c.length>0)for(var i=0,k=c.length;k>i;i++){var l=c[i];if(!l||!l.getAttribute){f(1);break}if(void 0===l.player){var o=l.getAttribute("data-setup");null!==o&&n(l)}}else m||f(1)};"complete"===j["default"].readyState?m=!0:h.one(l["default"],"load",function(){m=!0});var p=function(){return m};c.autoSetup=o,c.autoSetupTimeout=f,c.hasLoaded=p},{"./utils/events.js":81,"global/document":92,"global/window":93}],57:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component.js"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=a("object.assign"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.bar=e.getChild(e.options_.barName),e.vertical(!!e.options_.vertical),e.on("mousedown",e.handleMouseDown),e.on("touchstart",e.handleMouseDown),e.on("focus",e.handleFocus),e.on("blur",e.handleBlur),e.on("click",e.handleClick),e.on(c,"controlsvisible",e.update),e.on(c,e.playerEvent,e.update),e}return h(b,a),b.prototype.createEl=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];return c.className=c.className+" vjs-slider",c=n["default"]({tabIndex:0},c),d=n["default"]({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},d),a.prototype.createEl.call(this,b,c,d)},b.prototype.handleMouseDown=function(a){var b=this.bar.el_.ownerDocument;a.preventDefault(),l.blockTextSelection(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(b,"mousemove",this.handleMouseMove),this.on(b,"mouseup",this.handleMouseUp),this.on(b,"touchmove",this.handleMouseMove),this.on(b,"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){var a=this.bar.el_.ownerDocument;l.unblockTextSelection(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(a,"mousemove",this.handleMouseMove),this.off(a,"mouseup",this.handleMouseUp),this.off(a,"touchmove",this.handleMouseMove),this.off(a,"touchend",this.handleMouseUp),this.update()},b.prototype.update=function(){if(this.el_){var a=this.getPercent(),b=this.bar;if(b){("number"!=typeof a||a!==a||0>a||a===1/0)&&(a=0);var c=(100*a).toFixed(2)+"%";this.vertical()?b.el().style.height=c:b.el().style.width=c}}},b.prototype.calculateDistance=function(a){var b=l.getPointerPosition(this.el_,a);return this.vertical()?b.y:b.x},b.prototype.handleFocus=function(){this.on(this.bar.el_.ownerDocument,"keydown",this.handleKeyPress)},b.prototype.handleKeyPress=function(a){37===a.which||40===a.which?(a.preventDefault(),this.stepBack()):(38===a.which||39===a.which)&&(a.preventDefault(),this.stepForward())},b.prototype.handleBlur=function(){this.off(this.bar.el_.ownerDocument,"keydown",this.handleKeyPress)},b.prototype.handleClick=function(a){a.stopImmediatePropagation(),a.preventDefault()},b.prototype.vertical=function(a){return void 0===a?this.vertical_||!1:(this.vertical_=!!a,this.addClass(this.vertical_?"vjs-slider-vertical":"vjs-slider-horizontal"),this)},b}(j["default"]);j["default"].registerComponent("Slider",o),c["default"]=o},{"../component.js":5,"../utils/dom.js":80,"object.assign":136}],58:[function(a,b,c){"use strict";function d(a){return a.streamingFormats={"rtmp/mp4":"MP4","rtmp/flv":"FLV"},a.streamFromParts=function(a,b){return a+"&"+b},a.streamToParts=function(a){var b={connection:"",stream:""};if(!a)return b;var c=a.search(/&(?!\w+=)/),d=void 0;return-1!==c?d=c+1:(c=d=a.lastIndexOf("/")+1,0===c&&(c=d=a.length)),b.connection=a.substring(0,c),b.stream=a.substring(d,a.length),b},a.isStreamingType=function(b){return b in a.streamingFormats},a.RTMP_RE=/^rtmp[set]?:\/\//i,a.isStreamingSrc=function(b){return a.RTMP_RE.test(b)},a.rtmpSourceHandler={},a.rtmpSourceHandler.canPlayType=function(b){return a.isStreamingType(b)?"maybe":""},a.rtmpSourceHandler.canHandleSource=function(b){var c=a.rtmpSourceHandler.canPlayType(b.type);return c?c:a.isStreamingSrc(b.src)?"maybe":""},a.rtmpSourceHandler.handleSource=function(b,c){var d=a.streamToParts(b.src);c.setRtmpConnection(d.connection),c.setRtmpStream(d.stream)},a.registerSourceHandler(a.rtmpSourceHandler),a}c.__esModule=!0,c["default"]=d},{}],59:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a){var b=a.charAt(0).toUpperCase()+a.slice(1);B["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function j(a){B[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var k=a("./tech"),l=e(k),m=a("../utils/dom.js"),n=d(m),o=a("../utils/url.js"),p=d(o),q=a("../utils/time-ranges.js"),r=a("./flash-rtmp"),s=e(r),t=a("../component"),u=e(t),v=a("global/window"),w=e(v),x=a("object.assign"),y=e(x),z=w["default"].navigator,A=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return c.source&&e.ready(function(){this.setSource(c.source)},!0),c.startTime&&e.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),w["default"].videojs=w["default"].videojs||{},w["default"].videojs.Flash=w["default"].videojs.Flash||{},w["default"].videojs.Flash.onReady=b.onReady,w["default"].videojs.Flash.onEvent=b.onEvent,w["default"].videojs.Flash.onError=b.onError,e.on("seeked",function(){this.lastSeekTarget_=void 0}),e}return h(b,a),b.prototype.createEl=function(){var a=this.options_;if(!a.swf){var c="5.1.0";a.swf="//vjs.zencdn.net/swf/"+c+"/video-js.swf"}var d=a.techId,e=y["default"]({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.preload,loop:a.loop,muted:a.muted},a.flashVars),f=y["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),g=y["default"]({id:d,name:d,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,e,f,g),this.el_.tech=this,this.el_},b.prototype.play=function(){this.ended()&&this.setCurrentTime(0),this.el_.vjs_play()},b.prototype.pause=function(){this.el_.vjs_pause()},b.prototype.src=function(a){return void 0===a?this.currentSrc():this.setSrc(a)},b.prototype.setSrc=function(a){var b=this;a=p.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()&&this.setTimeout(function(){return b.play()},0)},b.prototype.seeking=function(){return void 0!==this.lastSeekTarget_},b.prototype.setCurrentTime=function(b){var c=this.seekable();c.length&&(b=b>c.start(0)?b:c.start(0),b=b<c.end(c.length-1)?b:c.end(c.length-1),this.lastSeekTarget_=b,this.trigger("seeking"),this.el_.vjs_setProperty("currentTime",b),a.prototype.setCurrentTime.call(this))},b.prototype.currentTime=function(){return this.seeking()?this.lastSeekTarget_||0:this.el_.vjs_getProperty("currentTime")},b.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.vjs_getProperty("currentSrc")},b.prototype.duration=function c(){if(0===this.readyState())return 0/0;var c=this.el_.vjs_getProperty("duration");return c>=0?c:1/0},b.prototype.load=function(){this.el_.vjs_load()},b.prototype.poster=function(){this.el_.vjs_getProperty("poster")},b.prototype.setPoster=function(){},b.prototype.seekable=function(){var a=this.duration();return 0===a?q.createTimeRange():q.createTimeRange(0,a)},b.prototype.buffered=function(){var a=this.el_.vjs_getProperty("buffered");return 0===a.length?q.createTimeRange():q.createTimeRange(a[0][0],a[0][1])},b.prototype.supportsFullScreen=function(){return!1},b.prototype.enterFullScreen=function(){return!1},b}(l["default"]),B=A.prototype,C="rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted".split(","),D="networkState,readyState,initialTime,startOffsetTime,paused,ended,videoWidth,videoHeight".split(","),E=0;E<C.length;E++)j(C[E]),i(C[E]);for(var F=0;F<D.length;F++)j(D[F]);A.isSupported=function(){return A.version()[0]>=10},l["default"].withSourceHandlers(A),A.nativeSourceHandler={},A.nativeSourceHandler.canPlayType=function(a){return a in A.formats?"maybe":""},A.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=p.getFileExtension(a);return b?"video/"+b:""}var c=void 0;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),A.nativeSourceHandler.canPlayType(c)},A.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},A.nativeSourceHandler.dispose=function(){},A.registerSourceHandler(A.nativeSourceHandler),A.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},A.onReady=function(a){var b=n.getEl(a),c=b&&b.tech;c&&c.el()&&A.checkReady(c)},A.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){A.checkReady(a)},50))},A.onEvent=function(a,b){var c=n.getEl(a).tech;c.trigger(b,Array.prototype.slice.call(arguments,2))},A.onError=function(a,b){var c=n.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},A.version=function(){var a="0,0,0";try{a=new w["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{z.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(z.plugins["Shockwave Flash 2.0"]||z.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},A.embed=function(a,b,c,d){var e=A.getEmbedCode(a,b,c,d),f=n.createEl("div",{innerHTML:e}).childNodes[0];return f},A.getEmbedCode=function(a,b,c,d){var e='<object type="application/x-shockwave-flash" ',f="",g="",h="";return b&&Object.getOwnPropertyNames(b).forEach(function(a){f+=a+"="+b[a]+"&amp;"}),c=y["default"]({movie:a,flashvars:f,allowScriptAccess:"always",allowNetworking:"all"},c),Object.getOwnPropertyNames(c).forEach(function(a){g+='<param name="'+a+'" value="'+c[a]+'" />'}),d=y["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+"</object>"},s["default"](A),u["default"].registerComponent("Flash",A),l["default"].registerTech("Flash",A),c["default"]=A},{"../component":5,"../utils/dom.js":80,"../utils/time-ranges.js":88,"../utils/url.js":90,"./flash-rtmp":58,"./tech":62,"global/window":93,"object.assign":136}],60:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){return a.raw=b,a}function g(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function h(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function i(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},k=f(["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n            This may prevent text tracks from loading."],["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n            This may prevent text tracks from loading."]),l=a("./tech.js"),m=e(l),n=a("../component"),o=e(n),p=a("../utils/dom.js"),q=d(p),r=a("../utils/url.js"),s=d(r),t=a("../utils/fn.js"),u=d(t),v=a("../utils/log.js"),w=e(v),x=a("tsml"),y=e(x),z=a("../utils/browser.js"),A=d(z),B=a("global/document"),C=e(B),D=a("global/window"),E=e(D),F=a("object.assign"),G=e(F),H=a("../utils/merge-options.js"),I=e(H),J=a("../utils/to-title-case.js"),K=e(J),L=function(a){function b(c,d){g(this,b);var e=h(this,a.call(this,c,d)),f=c.source,i=!1;if(f&&(e.el_.currentSrc!==f.src||c.tag&&3===c.tag.initNetworkState_)?e.setSource(f):e.handleLateInit_(e.el_),e.el_.hasChildNodes()){for(var j=e.el_.childNodes,l=j.length,m=[];l--;){var n=j[l],o=n.nodeName.toLowerCase();"track"===o&&(e.featuresNativeTextTracks?(e.remoteTextTrackEls().addTrackElement_(n),e.remoteTextTracks().addTrack_(n.track),i||e.el_.hasAttribute("crossorigin")||!s.isCrossOrigin(n.src)||(i=!0)):m.push(n))}for(var p=0;p<m.length;p++)e.el_.removeChild(m[p])}var q=["audio","video"];return q.forEach(function(a){var b=K["default"](a);if(e["featuresNative"+b+"Tracks"]){var c=e.el()[a+"Tracks"];c&&c.addEventListener&&(c.addEventListener("change",u.bind(e,e["handle"+b+"TrackChange_"])),c.addEventListener("addtrack",u.bind(e,e["handle"+b+"TrackAdd_"])),c.addEventListener("removetrack",u.bind(e,e["handle"+b+"TrackRemove_"])),e.on("loadstart",e["removeOld"+b+"Tracks_"]))}}),e.featuresNativeTextTracks&&(i&&w["default"].warn(y["default"](k)),e.handleTextTrackChange_=u.bind(e,e.handleTextTrackChange),e.handleTextTrackAdd_=u.bind(e,e.handleTextTrackAdd),e.handleTextTrackRemove_=u.bind(e,e.handleTextTrackRemove),e.proxyNativeTextTracks_()),(A.TOUCH_ENABLED||A.IS_IPHONE||A.IS_NATIVE_ANDROID)&&c.nativeControlsForTouch===!0&&e.setControls(!0),e.triggerReady(),e}return i(b,a),b.prototype.dispose=function(){var c=this;["audio","video","text"].forEach(function(a){var b=K["default"](a),d=c.el_[a+"Tracks"];d&&d.removeEventListener&&(d.removeEventListener("change",c["handle"+b+"TrackChange_"]),d.removeEventListener("addtrack",c["handle"+b+"TrackAdd_"]),d.removeEventListener("removetrack",c["handle"+b+"TrackRemove_"])),d&&c.off("loadstart",c["removeOld"+b+"Tracks_"])}),b.disposeMediaElement(this.el_),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=this.options_.tag;if(!a||this.movingMediaElementInDOM===!1)if(a){var c=a.cloneNode(!0);a.parentNode.insertBefore(c,a),b.disposeMediaElement(a),a=c}else{a=C["default"].createElement("video");var d=this.options_.tag&&q.getElAttributes(this.options_.tag),e=I["default"]({},d);A.TOUCH_ENABLED&&this.options_.nativeControlsForTouch===!0||delete e.controls,q.setElAttributes(a,G["default"](e,{id:this.options_.techId,"class":"vjs-tech"}))}for(var f=["autoplay","preload","loop","muted"],g=f.length-1;g>=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),q.setElAttributes(a,i)}return a},b.prototype.handleLateInit_=function(a){var b=this;if(0!==a.networkState&&3!==a.networkState){if(0===a.readyState){var c=function(){var a=!1,c=function(){a=!0};b.on("loadstart",c);var d=function(){a||this.trigger("loadstart")};return b.on("loadedmetadata",d),b.ready(function(){this.off("loadstart",c),this.off("loadedmetadata",d),a||this.trigger("loadstart")}),{v:void 0}}();if("object"===("undefined"==typeof c?"undefined":j(c)))return c.v}var d=["loadstart"];d.push("loadedmetadata"),a.readyState>=2&&d.push("loadeddata"),a.readyState>=3&&d.push("canplay"),a.readyState>=4&&d.push("canplaythrough"),this.ready(function(){d.forEach(function(a){this.trigger(a)},this)})}},b.prototype.proxyNativeTextTracks_=function(){var a=this.el().textTracks;if(a){for(var b=0;b<a.length;b++)this.textTracks().addTrack_(a[b]);a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_)),this.on("loadstart",this.removeOldTextTracks_)}},b.prototype.handleTextTrackChange=function(){var a=this.textTracks();this.textTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleTextTrackAdd=function(a){this.textTracks().addTrack_(a.track)},b.prototype.handleTextTrackRemove=function(a){this.textTracks().removeTrack_(a.track)},b.prototype.handleVideoTrackChange_=function(){var a=this.videoTracks();this.videoTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleVideoTrackAdd_=function(a){this.videoTracks().addTrack_(a.track)},b.prototype.handleVideoTrackRemove_=function(a){this.videoTracks().removeTrack_(a.track)},b.prototype.handleAudioTrackChange_=function(){var a=this.audioTracks();this.audioTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleAudioTrackAdd_=function(a){this.audioTracks().addTrack_(a.track)},b.prototype.handleAudioTrackRemove_=function(a){this.audioTracks().removeTrack_(a.track)},b.prototype.removeOldTracks_=function(a,b){var c=[];if(b){for(var d=0;d<a.length;d++){for(var e=a[d],f=!1,g=0;g<b.length;g++)if(b[g]===e){f=!0;break}f||c.push(e)}for(var h=0;h<c.length;h++){var i=c[h];a.removeTrack_(i)}}},b.prototype.removeOldTextTracks_=function(){var a=this.textTracks(),b=this.el().textTracks;this.removeOldTracks_(a,b)},b.prototype.removeOldAudioTracks_=function(){var a=this.audioTracks(),b=this.el().audioTracks;this.removeOldTracks_(a,b)},b.prototype.removeOldVideoTracks_=function(){var a=this.videoTracks(),b=this.el().videoTracks;this.removeOldTracks_(a,b)},b.prototype.play=function(){var a=this.el_.play();void 0!==a&&"function"==typeof a.then&&a.then(null,function(){})},b.prototype.pause=function(){this.el_.pause()},b.prototype.paused=function(){return this.el_.paused},b.prototype.currentTime=function(){return this.el_.currentTime},b.prototype.setCurrentTime=function(a){try{this.el_.currentTime=a}catch(b){w["default"](b,"Video is not ready. (Video.js)")}},b.prototype.duration=function(){return this.el_.duration||0},b.prototype.buffered=function(){return this.el_.buffered},b.prototype.volume=function(){return this.el_.volume},b.prototype.setVolume=function(a){this.el_.volume=a},b.prototype.muted=function(){return this.el_.muted},b.prototype.setMuted=function(a){this.el_.muted=a},b.prototype.width=function(){return this.el_.offsetWidth},b.prototype.height=function(){return this.el_.offsetHeight},b.prototype.supportsFullScreen=function(){if("function"==typeof this.el_.webkitEnterFullScreen){var a=E["default"].navigator&&E["default"].navigator.userAgent||"";if(/Android/.test(a)||!/Chrome|Mac OS X 10.5/.test(a))return!0}return!1},b.prototype.enterFullScreen=function(){var a=this.el_;"webkitDisplayingFullscreen"in a&&this.one("webkitbeginfullscreen",function(){this.one("webkitendfullscreen",function(){this.trigger("fullscreenchange",{isFullscreen:!1})}),this.trigger("fullscreenchange",{isFullscreen:!0})}),a.paused&&a.networkState<=a.HAVE_METADATA?(this.el_.play(),this.setTimeout(function(){a.pause(),a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()},b.prototype.exitFullScreen=function(){this.el_.webkitExitFullScreen()},b.prototype.src=function(a){return void 0===a?this.el_.src:void this.setSrc(a)},b.prototype.setSrc=function(a){this.el_.src=a},b.prototype.load=function(){this.el_.load()},b.prototype.reset=function(){b.resetMediaElement(this.el_)},b.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.currentSrc},b.prototype.poster=function(){return this.el_.poster},b.prototype.setPoster=function(a){this.el_.poster=a},b.prototype.preload=function(){return this.el_.preload},b.prototype.setPreload=function(a){this.el_.preload=a},b.prototype.autoplay=function(){return this.el_.autoplay},b.prototype.setAutoplay=function(a){this.el_.autoplay=a},b.prototype.controls=function(){return this.el_.controls},b.prototype.setControls=function(a){this.el_.controls=!!a},b.prototype.loop=function(){return this.el_.loop},b.prototype.setLoop=function(a){this.el_.loop=a},b.prototype.error=function(){return this.el_.error},b.prototype.seeking=function(){return this.el_.seeking},b.prototype.seekable=function(){return this.el_.seekable},b.prototype.ended=function(){return this.el_.ended},b.prototype.defaultMuted=function(){return this.el_.defaultMuted},b.prototype.playbackRate=function(){return this.el_.playbackRate},b.prototype.played=function(){return this.el_.played},b.prototype.setPlaybackRate=function(a){this.el_.playbackRate=a},b.prototype.networkState=function(){return this.el_.networkState},b.prototype.readyState=function(){return this.el_.readyState},b.prototype.videoWidth=function(){return this.el_.videoWidth},b.prototype.videoHeight=function(){return this.el_.videoHeight},b.prototype.textTracks=function(){return a.prototype.textTracks.call(this)},b.prototype.addTextTrack=function(b,c,d){return this.featuresNativeTextTracks?this.el_.addTextTrack(b,c,d):a.prototype.addTextTrack.call(this,b,c,d)},b.prototype.addRemoteTextTrack=function(){var b=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!this.featuresNativeTextTracks)return a.prototype.addRemoteTextTrack.call(this,b);var c=C["default"].createElement("track");return b.kind&&(c.kind=b.kind),b.label&&(c.label=b.label),(b.language||b.srclang)&&(c.srclang=b.language||b.srclang),b["default"]&&(c["default"]=b["default"]),b.id&&(c.id=b.id),b.src&&(c.src=b.src),this.el().appendChild(c),this.remoteTextTrackEls().addTrackElement_(c),
+this.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c=this.remoteTextTrackEls().getTrackElementByTrack_(b);this.remoteTextTrackEls().removeTrackElement_(c),this.remoteTextTracks().removeTrack_(b);for(var d=this.$$("track"),e=d.length;e--;)(b===d[e]||b===d[e].track)&&this.el().removeChild(d[e])},b}(m["default"]);L.TEST_VID=C["default"].createElement("video");var M=C["default"].createElement("track");M.kind="captions",M.srclang="en",M.label="English",L.TEST_VID.appendChild(M),L.isSupported=function(){try{L.TEST_VID.volume=.5}catch(a){return!1}return!!L.TEST_VID.canPlayType},m["default"].withSourceHandlers(L),L.nativeSourceHandler={},L.nativeSourceHandler.canPlayType=function(a){try{return L.TEST_VID.canPlayType(a)}catch(b){return""}},L.nativeSourceHandler.canHandleSource=function(a){if(a.type)return L.nativeSourceHandler.canPlayType(a.type);if(a.src){var b=s.getFileExtension(a.src);return L.nativeSourceHandler.canPlayType("video/"+b)}return""},L.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},L.nativeSourceHandler.dispose=function(){},L.registerSourceHandler(L.nativeSourceHandler),L.canControlVolume=function(){try{var a=L.TEST_VID.volume;return L.TEST_VID.volume=a/2+.1,a!==L.TEST_VID.volume}catch(b){return!1}},L.canControlPlaybackRate=function(){if(A.IS_ANDROID&&A.IS_CHROME)return!1;try{var a=L.TEST_VID.playbackRate;return L.TEST_VID.playbackRate=a/2+.1,a!==L.TEST_VID.playbackRate}catch(b){return!1}},L.supportsNativeTextTracks=function(){var a=void 0;return a=!!L.TEST_VID.textTracks,a&&L.TEST_VID.textTracks.length>0&&(a="number"!=typeof L.TEST_VID.textTracks[0].mode),a&&A.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in L.TEST_VID.textTracks||(a=!1),a},L.supportsNativeVideoTracks=function(){var a=!!L.TEST_VID.videoTracks;return a},L.supportsNativeAudioTracks=function(){var a=!!L.TEST_VID.audioTracks;return a},L.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],L.prototype.featuresVolumeControl=L.canControlVolume(),L.prototype.featuresPlaybackRate=L.canControlPlaybackRate(),L.prototype.movingMediaElementInDOM=!A.IS_IOS,L.prototype.featuresFullscreenResize=!0,L.prototype.featuresProgressEvents=!0,L.prototype.featuresNativeTextTracks=L.supportsNativeTextTracks(),L.prototype.featuresNativeVideoTracks=L.supportsNativeVideoTracks(),L.prototype.featuresNativeAudioTracks=L.supportsNativeAudioTracks();var N=void 0,O=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,P=/^video\/mp4/i;L.patchCanPlayType=function(){A.ANDROID_VERSION>=4&&(N||(N=L.TEST_VID.constructor.prototype.canPlayType),L.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&O.test(a)?"maybe":N.call(this,a)}),A.IS_OLD_ANDROID&&(N||(N=L.TEST_VID.constructor.prototype.canPlayType),L.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&P.test(a)?"maybe":N.call(this,a)})},L.unpatchCanPlayType=function(){var a=L.TEST_VID.constructor.prototype.canPlayType;return L.TEST_VID.constructor.prototype.canPlayType=N,N=null,a},L.patchCanPlayType(),L.disposeMediaElement=function(a){if(a){for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src"),"function"==typeof a.load&&!function(){try{a.load()}catch(b){}}()}},L.resetMediaElement=function(a){if(a){for(var b=a.querySelectorAll("source"),c=b.length;c--;)a.removeChild(b[c]);a.removeAttribute("src"),"function"==typeof a.load&&!function(){try{a.load()}catch(b){}}()}},o["default"].registerComponent("Html5",L),m["default"].registerTech("Html5",L),c["default"]=L},{"../component":5,"../utils/browser.js":78,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/to-title-case.js":89,"../utils/url.js":90,"./tech.js":62,"global/document":92,"global/window":93,"object.assign":136,tsml:146}],61:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component.js"),i=d(h),j=a("./tech.js"),k=d(j),l=a("../utils/to-title-case.js"),m=d(l),n=function(a){function b(c,d,g){e(this,b);var h=f(this,a.call(this,c,d,g));if(d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var j=0,l=d.playerOptions.techOrder;j<l.length;j++){var n=m["default"](l[j]),o=k["default"].getTech(n);if(n||(o=i["default"].getComponent(n)),o&&o.isSupported()){c.loadTech_(n);break}}return h}return g(b,a),b}(i["default"]);i["default"].registerComponent("MediaLoader",n),c["default"]=n},{"../component.js":5,"../utils/to-title-case.js":89,"./tech.js":62}],62:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c,d){var e=arguments.length<=4||void 0===arguments[4]?{}:arguments[4],f=a.textTracks();e.kind=b,c&&(e.label=c),d&&(e.language=d),e.tech=a;var g=new s["default"](e);return f.addTrack_(g),g}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../tracks/html-track-element"),m=e(l),n=a("../tracks/html-track-element-list"),o=e(n),p=a("../utils/merge-options.js"),q=e(p),r=a("../tracks/text-track"),s=e(r),t=a("../tracks/text-track-list"),u=e(t),v=a("../tracks/video-track-list"),w=e(v),x=a("../tracks/audio-track-list"),y=e(x),z=a("../utils/fn.js"),A=d(z),B=a("../utils/log.js"),C=e(B),D=a("../utils/time-ranges.js"),E=a("../utils/buffer.js"),F=a("../media-error.js"),G=e(F),H=a("global/window"),I=e(H),J=a("global/document"),K=e(J),L=function(a){function b(){var c=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],d=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];f(this,b),c.reportTouchActivity=!1;var e=g(this,a.call(this,null,c,d));return e.hasStarted_=!1,e.on("playing",function(){this.hasStarted_=!0}),e.on("loadstart",function(){this.hasStarted_=!1}),e.textTracks_=c.textTracks,e.videoTracks_=c.videoTracks,e.audioTracks_=c.audioTracks,e.featuresProgressEvents||e.manualProgressOn(),e.featuresTimeupdateEvents||e.manualTimeUpdatesOn(),(c.nativeCaptions===!1||c.nativeTextTracks===!1)&&(e.featuresNativeTextTracks=!1),e.featuresNativeTextTracks||e.on("ready",e.emulateTextTracks),e.initTextTrackListeners(),e.initTrackListeners(),e.emitTapEvents(),e}return h(b,a),b.prototype.manualProgressOn=function(){this.on("durationchange",this.onDurationChange),this.manualProgress=!0,this.one("ready",this.trackProgress)},b.prototype.manualProgressOff=function(){this.manualProgress=!1,this.stopTrackingProgress(),this.off("durationchange",this.onDurationChange)},b.prototype.trackProgress=function(){this.stopTrackingProgress(),this.progressInterval=this.setInterval(A.bind(this,function(){var a=this.bufferedPercent();this.bufferedPercent_!==a&&this.trigger("progress"),this.bufferedPercent_=a,1===a&&this.stopTrackingProgress()}),500)},b.prototype.onDurationChange=function(){this.duration_=this.duration()},b.prototype.buffered=function(){return D.createTimeRange(0,0)},b.prototype.bufferedPercent=function(){return E.bufferedPercent(this.buffered(),this.duration_)},b.prototype.stopTrackingProgress=function(){this.clearInterval(this.progressInterval)},b.prototype.manualTimeUpdatesOn=function(){this.manualTimeUpdates=!0,this.on("play",this.trackCurrentTime),this.on("pause",this.stopTrackingCurrentTime)},b.prototype.manualTimeUpdatesOff=function(){this.manualTimeUpdates=!1,this.stopTrackingCurrentTime(),this.off("play",this.trackCurrentTime),this.off("pause",this.stopTrackingCurrentTime)},b.prototype.trackCurrentTime=function(){this.currentTimeInterval&&this.stopTrackingCurrentTime(),this.currentTimeInterval=this.setInterval(function(){this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},250)},b.prototype.stopTrackingCurrentTime=function(){this.clearInterval(this.currentTimeInterval),this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.dispose=function(){this.clearTracks(["audio","video","text"]),this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),a.prototype.dispose.call(this)},b.prototype.clearTracks=function(a){var b=this;a=[].concat(a),a.forEach(function(a){for(var c=b[a+"Tracks"]()||[],d=c.length;d--;){var e=c[d];"text"===a&&b.removeRemoteTextTrack(e),c.removeTrack_(e)}})},b.prototype.reset=function(){},b.prototype.error=function(a){return void 0!==a&&(this.error_=new G["default"](a),this.trigger("error")),this.error_},b.prototype.played=function(){return this.hasStarted_?D.createTimeRange(0,0):D.createTimeRange()},b.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.initTextTrackListeners=function(){var a=A.bind(this,function(){this.trigger("texttrackchange")}),b=this.textTracks();b&&(b.addEventListener("removetrack",a),b.addEventListener("addtrack",a),this.on("dispose",A.bind(this,function(){b.removeEventListener("removetrack",a),b.removeEventListener("addtrack",a)})))},b.prototype.initTrackListeners=function(){var a=this,b=["video","audio"];b.forEach(function(b){var c=function(){a.trigger(b+"trackchange")},d=a[b+"Tracks"]();d.addEventListener("removetrack",c),d.addEventListener("addtrack",c),a.on("dispose",function(){d.removeEventListener("removetrack",c),d.removeEventListener("addtrack",c)})})},b.prototype.emulateTextTracks=function(){var a=this,b=this.textTracks();if(b){I["default"].WebVTT||null===this.el().parentNode||void 0===this.el().parentNode||!function(){var b=K["default"].createElement("script");b.src=a.options_["vtt.js"]||"https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js",b.onload=function(){a.trigger("vttjsloaded")},b.onerror=function(){a.trigger("vttjserror")},a.on("dispose",function(){b.onload=null,b.onerror=null}),I["default"].WebVTT=!0,a.el().parentNode.appendChild(b)}();var c=function(){return a.trigger("texttrackchange")},d=function(){c();for(var a=0;a<b.length;a++){var d=b[a];d.removeEventListener("cuechange",c),"showing"===d.mode&&d.addEventListener("cuechange",c)}};d(),b.addEventListener("change",d),this.on("dispose",function(){b.removeEventListener("change",d)})}},b.prototype.videoTracks=function(){return this.videoTracks_=this.videoTracks_||new w["default"],this.videoTracks_},b.prototype.audioTracks=function(){return this.audioTracks_=this.audioTracks_||new y["default"],this.audioTracks_},b.prototype.textTracks=function(){return this.textTracks_=this.textTracks_||new u["default"],this.textTracks_},b.prototype.remoteTextTracks=function(){return this.remoteTextTracks_=this.remoteTextTracks_||new u["default"],this.remoteTextTracks_},b.prototype.remoteTextTrackEls=function(){return this.remoteTextTrackEls_=this.remoteTextTrackEls_||new o["default"],this.remoteTextTrackEls_},b.prototype.addTextTrack=function(a,b,c){if(!a)throw new Error("TextTrack kind is required but was not provided");return i(this,a,b,c)},b.prototype.addRemoteTextTrack=function(a){var b=q["default"](a,{tech:this}),c=new m["default"](b);return this.remoteTextTrackEls().addTrackElement_(c),this.remoteTextTracks().addTrack_(c.track),this.textTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(a){this.textTracks().removeTrack_(a);var b=this.remoteTextTrackEls().getTrackElementByTrack_(a);this.remoteTextTrackEls().removeTrackElement_(b),this.remoteTextTracks().removeTrack_(a)},b.prototype.setPoster=function(){},b.prototype.canPlayType=function(){return""},b.isTech=function(a){return a.prototype instanceof b||a instanceof b||a===b},b.registerTech=function(a,c){if(b.techs_||(b.techs_={}),!b.isTech(c))throw new Error("Tech "+a+" must be a Tech");return b.techs_[a]=c,c},b.getTech=function(a){return b.techs_&&b.techs_[a]?b.techs_[a]:I["default"]&&I["default"].videojs&&I["default"].videojs[a]?(C["default"].warn("The "+a+" tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"),I["default"].videojs[a]):void 0},b}(k["default"]);L.prototype.textTracks_,L.prototype.audioTracks_,L.prototype.videoTracks_,L.prototype.featuresVolumeControl=!0,L.prototype.featuresFullscreenResize=!1,L.prototype.featuresPlaybackRate=!1,L.prototype.featuresProgressEvents=!1,L.prototype.featuresTimeupdateEvents=!1,L.prototype.featuresNativeTextTracks=!1,L.withSourceHandlers=function(a){a.registerSourceHandler=function(b,c){var d=a.sourceHandlers;d||(d=a.sourceHandlers=[]),void 0===c&&(c=d.length),d.splice(c,0,b)},a.canPlayType=function(b){for(var c=a.sourceHandlers||[],d=void 0,e=0;e<c.length;e++)if(d=c[e].canPlayType(b))return d;return""},a.selectSourceHandler=function(b,c){for(var d=a.sourceHandlers||[],e=void 0,f=0;f<d.length;f++)if(e=d[f].canHandleSource(b,c))return d[f];return null},a.canPlaySource=function(b,c){var d=a.selectSourceHandler(b,c);return d?d.canHandleSource(b,c):""};var b=["seekable","duration"];b.forEach(function(a){var b=this[a];"function"==typeof b&&(this[a]=function(){return this.sourceHandler_&&this.sourceHandler_[a]?this.sourceHandler_[a].apply(this.sourceHandler_,arguments):b.apply(this,arguments)})},a.prototype),a.prototype.setSource=function(b){var c=a.selectSourceHandler(b,this.options_);return c||(a.nativeSourceHandler?c=a.nativeSourceHandler:C["default"].error("No source hander found for the current source.")),this.disposeSourceHandler(),this.off("dispose",this.disposeSourceHandler),this.currentSource_&&(this.clearTracks(["audio","video"]),this.currentSource_=null),c!==a.nativeSourceHandler&&(this.currentSource_=b,this.off(this.el_,"loadstart",a.prototype.firstLoadStartListener_),this.off(this.el_,"loadstart",a.prototype.successiveLoadStartListener_),this.one(this.el_,"loadstart",a.prototype.firstLoadStartListener_)),this.sourceHandler_=c.handleSource(b,this,this.options_),this.on("dispose",this.disposeSourceHandler),this},a.prototype.firstLoadStartListener_=function(){this.one(this.el_,"loadstart",a.prototype.successiveLoadStartListener_)},a.prototype.successiveLoadStartListener_=function(){this.currentSource_=null,this.disposeSourceHandler(),this.one(this.el_,"loadstart",a.prototype.successiveLoadStartListener_)},a.prototype.disposeSourceHandler=function(){this.sourceHandler_&&this.sourceHandler_.dispose&&(this.off(this.el_,"loadstart",a.prototype.firstLoadStartListener_),this.off(this.el_,"loadstart",a.prototype.successiveLoadStartListener_),this.sourceHandler_.dispose(),this.sourceHandler_=null)}},k["default"].registerComponent("Tech",L),k["default"].registerComponent("MediaTechController",L),L.registerTech("Tech",L),c["default"]=L},{"../component":5,"../media-error.js":46,"../tracks/audio-track-list":63,"../tracks/html-track-element":66,"../tracks/html-track-element-list":65,"../tracks/text-track":72,"../tracks/text-track-list":70,"../tracks/video-track-list":76,"../utils/buffer.js":79,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/time-ranges.js":88,"global/document":92,"global/window":93}],63:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-list"),j=e(i),k=a("../utils/browser.js"),l=d(k),m=a("global/document"),n=e(m),o=function(a,b){for(var c=0;c<a.length;c++)b.id!==a[c].id&&(a[c].enabled=!1)},p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,b);for(var h=void 0,i=e.length-1;i>=0;i--)if(e[i].enabled){o(e,e[i]);break}if(l.IS_IE8){h=n["default"].createElement("custom");for(var k in j["default"].prototype)"constructor"!==k&&(h[k]=j["default"].prototype[k]);for(var m in b.prototype)"constructor"!==m&&(h[m]=b.prototype[m])}return h=c=g(this,a.call(this,e,h)),h.changing_=!1,d=h,g(c,d)}return h(b,a),b.prototype.addTrack_=function(b){var c=this;b.enabled&&o(this,b),a.prototype.addTrack_.call(this,b),b.addEventListener&&b.addEventListener("enabledchange",function(){c.changing_||(c.changing_=!0,o(c,b),c.changing_=!1,c.trigger("change"))})},b.prototype.addTrack=function(a){this.addTrack_(a)},b.prototype.removeTrack=function(b){a.prototype.removeTrack_.call(this,b)},b}(j["default"]);c["default"]=p},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],64:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-enums"),j=a("./track"),k=e(j),l=a("../utils/merge-options"),m=e(l),n=a("../utils/browser.js"),o=d(n),p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var h=m["default"](e,{kind:i.AudioTrackKind[e.kind]||""}),j=c=g(this,a.call(this,h)),k=!1;if(o.IS_IE8)for(var l in b.prototype)"constructor"!==l&&(j[l]=b.prototype[l]);return Object.defineProperty(j,"enabled",{get:function(){return k},set:function(a){"boolean"==typeof a&&a!==k&&(k=a,this.trigger("enabledchange"))}}),h.enabled&&(j.enabled=h.enabled),j.loaded_=!0,d=j,g(c,d)}return h(b,a),b}(k["default"]);c["default"]=p},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],65:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("../utils/browser.js"),h=e(g),i=a("global/document"),j=d(i),k=function(){function a(){var b=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,a);var c=this;if(h.IS_IE8){c=j["default"].createElement("custom");for(var d in a.prototype)"constructor"!==d&&(c[d]=a.prototype[d])}c.trackElements_=[],Object.defineProperty(c,"length",{get:function(){return this.trackElements_.length}});for(var e=0,g=b.length;g>e;e++)c.addTrackElement_(b[e]);return h.IS_IE8?c:void 0}return a.prototype.addTrackElement_=function(a){this.trackElements_.push(a)},a.prototype.getTrackElementByTrack_=function(a){for(var b=void 0,c=0,d=this.trackElements_.length;d>c;c++)if(a===this.trackElements_[c].track){b=this.trackElements_[c];break}return b},a.prototype.removeTrackElement_=function(a){for(var b=0,c=this.trackElements_.length;c>b;b++)if(a===this.trackElements_[b]){this.trackElements_.splice(b,1);break}},a}();c["default"]=k},{"../utils/browser.js":78,"global/document":92}],66:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../utils/browser.js"),j=e(i),k=a("global/document"),l=d(k),m=a("../event-target"),n=d(m),o=a("../tracks/text-track"),p=d(o),q=0,r=1,s=2,t=3,u=function(a){function b(){var c=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var d=g(this,a.call(this)),e=void 0,h=d;if(j.IS_IE8){h=l["default"].createElement("custom");for(var i in b.prototype)"constructor"!==i&&(h[i]=b.prototype[i])}var k=new p["default"](c);if(h.kind=k.kind,h.src=k.src,h.srclang=k.language,h.label=k.label,h["default"]=k["default"],Object.defineProperty(h,"readyState",{get:function(){return e}}),Object.defineProperty(h,"track",{get:function(){return k}}),e=q,k.addEventListener("loadeddata",function(){e=s,h.trigger({type:"load",target:h})}),j.IS_IE8){var m;return m=h,g(d,m)}return d}return h(b,a),b}(n["default"]);u.prototype.allowedEvents_={load:"load"},u.NONE=q,u.LOADING=r,u.LOADED=s,u.ERROR=t,c["default"]=u},{"../event-target":42,"../tracks/text-track":72,"../utils/browser.js":78,"global/document":92}],67:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("../utils/browser.js"),h=e(g),i=a("global/document"),j=d(i),k=function(){function a(b){f(this,a);var c=this;if(h.IS_IE8){c=j["default"].createElement("custom");for(var d in a.prototype)"constructor"!==d&&(c[d]=a.prototype[d])}return a.prototype.setCues_.call(c,b),Object.defineProperty(c,"length",{get:function(){return this.length_}}),h.IS_IE8?c:void 0}return a.prototype.setCues_=function(a){var b=this.length||0,c=0,d=a.length;this.cues_=a,this.length_=a.length;var e=function(a){""+a in this||Object.defineProperty(this,""+a,{get:function(){return this.cues_[a]}})};if(d>b)for(c=b;d>c;c++)e.call(this,c)},a.prototype.getCueById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},a}();c["default"]=k},{"../utils/browser.js":78,"global/document":92}],68:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function j(a,b,c){try{a.style[b]=c}catch(d){return}}c.__esModule=!0;var k=a("../component"),l=e(k),m=a("../utils/fn.js"),n=d(m),o=a("global/window"),p=e(o),q="#222",r="#ccc",s={monospace:"monospace",sansSerif:"sans-serif",serif:"serif",monospaceSansSerif:'"Andale Mono", "Lucida Console", monospace',monospaceSerif:'"Courier New", monospace',proportionalSansSerif:"sans-serif",proportionalSerif:"serif",casual:'"Comic Sans MS", Impact, fantasy',script:'"Monotype Corsiva", cursive',smallcaps:'"Andale Mono", "Lucida Console", monospace, sans-serif'},t=function(a){function b(c,d,e){f(this,b);var h=g(this,a.call(this,c,d,e));return c.on("loadstart",n.bind(h,h.toggleDisplay)),c.on("texttrackchange",n.bind(h,h.updateDisplay)),c.ready(n.bind(h,function(){if(c.tech_&&c.tech_.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",n.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;b<a.length;b++)this.player_.addRemoteTextTrack(a[b]);var d={captions:1,subtitles:1},e=this.player_.textTracks(),f=void 0,g=void 0;if(e){for(var h=0;h<e.length;h++){var i=e[h];i["default"]&&("descriptions"!==i.kind||f?i.kind in d&&!g&&(g=i):f=i)}g?g.mode="showing":f&&(f.mode="showing")}})),h}return h(b,a),b.prototype.toggleDisplay=function(){this.player_.tech_&&this.player_.tech_.featuresNativeTextTracks?this.hide():this.show()},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-text-track-display"},{"aria-live":"assertive","aria-atomic":"true"})},b.prototype.clearDisplay=function(){"function"==typeof p["default"].WebVTT&&p["default"].WebVTT.processCues(p["default"],[],this.el_)},b.prototype.updateDisplay=function(){var a=this.player_.textTracks();if(this.clearDisplay(),a){for(var b=null,c=null,d=a.length;d--;){var e=a[d];"showing"===e.mode&&("descriptions"===e.kind?b=e:c=e)}c?this.updateForTrack(c):b&&this.updateForTrack(b)}},b.prototype.updateForTrack=function(a){if("function"==typeof p["default"].WebVTT&&a.activeCues){for(var b=this.player_.textTrackSettings.getValues(),c=[],d=0;d<a.activeCues.length;d++)c.push(a.activeCues[d]);p["default"].WebVTT.processCues(p["default"],c,this.el_);for(var e=c.length;e--;){var f=c[e];if(f){var g=f.displayState;if(b.color&&(g.firstChild.style.color=b.color),b.textOpacity&&j(g.firstChild,"color",i(b.color||"#fff",b.textOpacity)),b.backgroundColor&&(g.firstChild.style.backgroundColor=b.backgroundColor),b.backgroundOpacity&&j(g.firstChild,"backgroundColor",i(b.backgroundColor||"#000",b.backgroundOpacity)),b.windowColor&&(b.windowOpacity?j(g,"backgroundColor",i(b.windowColor,b.windowOpacity)):g.style.backgroundColor=b.windowColor),b.edgeStyle&&("dropshadow"===b.edgeStyle?g.firstChild.style.textShadow="2px 2px 3px "+q+", 2px 2px 4px "+q+", 2px 2px 5px "+q:"raised"===b.edgeStyle?g.firstChild.style.textShadow="1px 1px "+q+", 2px 2px "+q+", 3px 3px "+q:"depressed"===b.edgeStyle?g.firstChild.style.textShadow="1px 1px "+r+", 0 1px "+r+", -1px -1px "+q+", 0 -1px "+q:"uniform"===b.edgeStyle&&(g.firstChild.style.textShadow="0 0 4px "+q+", 0 0 4px "+q+", 0 0 4px "+q+", 0 0 4px "+q)),b.fontPercent&&1!==b.fontPercent){var h=p["default"].parseFloat(g.style.fontSize);g.style.fontSize=h*b.fontPercent+"px",g.style.height="auto",g.style.top="auto",g.style.bottom="2px"}b.fontFamily&&"default"!==b.fontFamily&&("small-caps"===b.fontFamily?g.firstChild.style.fontVariant="small-caps":g.firstChild.style.fontFamily=s[b.fontFamily])}}}},b}(l["default"]);l["default"].registerComponent("TextTrackDisplay",t),c["default"]=t},{"../component":5,"../utils/fn.js":82,"global/window":93}],69:[function(a,b,c){"use strict";c.__esModule=!0;var d=function(a){var b=["kind","label","language","id","inBandMetadataTrackDispatchType","mode","src"].reduce(function(b,c){return a[c]&&(b[c]=a[c]),b},{cues:a.cues&&Array.prototype.map.call(a.cues,function(a){return{startTime:a.startTime,endTime:a.endTime,text:a.text,id:a.id}})});return b},e=function(a){var b=a.$$("track"),c=Array.prototype.map.call(b,function(a){return a.track}),e=Array.prototype.map.call(b,function(a){var b=d(a.track);return a.src&&(b.src=a.src),b});return e.concat(Array.prototype.filter.call(a.textTracks(),function(a){return-1===c.indexOf(a)}).map(d))},f=function(a,b){return a.forEach(function(a){var c=b.addRemoteTextTrack(a).track;!a.src&&a.cues&&a.cues.forEach(function(a){return c.addCue(a)})}),b.textTracks()};c["default"]={textTracksToJson:e,jsonToTextTracks:f,trackToJson_:d}},{}],70:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-list"),j=e(i),k=a("../utils/fn.js"),l=d(k),m=a("../utils/browser.js"),n=d(m),o=a("global/document"),p=e(o),q=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,b);var h=void 0;if(n.IS_IE8){h=p["default"].createElement("custom");for(var i in j["default"].prototype)"constructor"!==i&&(h[i]=j["default"].prototype[i]);for(var k in b.prototype)"constructor"!==k&&(h[k]=b.prototype[k])}return h=c=g(this,a.call(this,e,h)),d=h,g(c,d)}return h(b,a),b.prototype.addTrack_=function(b){a.prototype.addTrack_.call(this,b),b.addEventListener("modechange",l.bind(this,function(){this.trigger("change")}))},b.prototype.removeTrack_=function(a){for(var b=void 0,c=0,d=this.length;d>c;c++)if(this[c]===a){b=this[c],b.off&&b.off(),this.tracks_.splice(c,1);break}b&&this.trigger({track:b,type:"removetrack"})},b.prototype.getTrackById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},b}(j["default"]);c["default"]=q},{"../utils/browser.js":78,"../utils/fn.js":82,"./track-list":74,"global/document":92}],71:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+
+return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c){var d='\n    <div role="document">\n      <div role="heading" aria-level="1" id="'+b+'" class="vjs-control-text">Captions Settings Dialog</div>\n      <div id="'+c+'" class="vjs-control-text">Beginning of dialog window. Escape will cancel and close the window.</div>\n      <div class="vjs-tracksettings">\n        <div class="vjs-tracksettings-colors">\n          <fieldset class="vjs-fg-color vjs-tracksetting">\n            <legend>Text</legend>\n            <label class="vjs-label" for="captions-foreground-color-'+a+'">Color</label>\n            <select id="captions-foreground-color-'+a+'">\n              <option value="#FFF" selected>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              <label class="vjs-label" for="captions-foreground-opacity-'+a+'">Transparency</label>\n              <select id="captions-foreground-opacity-'+a+'">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="vjs-bg-color vjs-tracksetting">\n            <legend>Background</legend>\n            <label class="vjs-label" for="captions-background-color-'+a+'">Color</label>\n            <select id="captions-background-color-'+a+'">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-background-opacity-'+a+'">Transparency</label>\n              <select id="captions-background-opacity-'+a+'">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="0">Transparent</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="window-color vjs-tracksetting">\n            <legend>Window</legend>\n            <label class="vjs-label" for="captions-window-color-'+a+'">Color</label>\n            <select id="captions-window-color-'+a+'">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-window-opacity-'+a+'">Transparency</label>\n              <select id="captions-window-opacity-'+a+'">\n                <option value="0" selected>Transparent</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="1">Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n        </div> <!-- vjs-tracksettings-colors -->\n        <div class="vjs-tracksettings-font">\n          <div class="vjs-font-percent vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-size-'+a+'">Font Size</label>\n            <select id="captions-font-size-'+a+'">\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>\n          <div class="vjs-edge-style vjs-tracksetting">\n            <label class="vjs-label" for="captions-edge-style-'+a+'">Text Edge Style</label>\n            <select id="captions-edge-style-'+a+'">\n              <option value="none" selected>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>\n          <div class="vjs-font-family vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-family-'+a+'">Font Family</label>\n            <select id="captions-font-family-'+a+'">\n              <option value="proportionalSansSerif" selected>Proportional Sans-Serif</option>\n              <option value="monospaceSansSerif">Monospace Sans-Serif</option>\n              <option value="proportionalSerif">Proportional Serif</option>\n              <option value="monospaceSerif">Monospace 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>\n        </div> <!-- vjs-tracksettings-font -->\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      </div> <!-- vjs-tracksettings -->\n    </div> <!--  role="document" -->\n  ';return d}function j(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function k(a,b){if(b){var c=void 0;for(c=0;c<a.options.length;c++){var d=a.options[c];if(d.value===b)break}a.selectedIndex=c}}c.__esModule=!0;var l=a("../component"),m=e(l),n=a("../utils/events.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("safe-json-parse/tuple"),u=e(t),v=a("global/window"),w=e(v),x=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.hide(),void 0===d.persistTextTrackSettings&&(e.options_.persistTextTrackSettings=e.options_.playerOptions.persistTextTrackSettings),o.on(e.$(".vjs-done-button"),"click",q.bind(e,function(){this.saveSettings(),this.hide()})),o.on(e.$(".vjs-default-button"),"click",q.bind(e,function(){this.$(".vjs-fg-color > select").selectedIndex=0,this.$(".vjs-bg-color > select").selectedIndex=0,this.$(".window-color > select").selectedIndex=0,this.$(".vjs-text-opacity > select").selectedIndex=0,this.$(".vjs-bg-opacity > select").selectedIndex=0,this.$(".vjs-window-opacity > select").selectedIndex=0,this.$(".vjs-edge-style select").selectedIndex=0,this.$(".vjs-font-family select").selectedIndex=0,this.$(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),o.on(e.$(".vjs-fg-color > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-bg-color > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".window-color > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-text-opacity > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-bg-opacity > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-window-opacity > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-font-percent select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-edge-style select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-font-family select"),"change",q.bind(e,e.updateDisplay)),e.options_.persistTextTrackSettings&&e.restoreSettings(),e}return h(b,a),b.prototype.createEl=function(){var b=this.id_,c="TTsettingsDialogLabel-"+b,d="TTsettingsDialogDescription-"+b;return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:i(b,c,d),tabIndex:-1},{role:"dialog","aria-labelledby":c,"aria-describedby":d})},b.prototype.getValues=function(){var a=j(this.$(".vjs-edge-style select")),b=j(this.$(".vjs-font-family select")),c=j(this.$(".vjs-fg-color > select")),d=j(this.$(".vjs-text-opacity > select")),e=j(this.$(".vjs-bg-color > select")),f=j(this.$(".vjs-bg-opacity > select")),g=j(this.$(".window-color > select")),h=j(this.$(".vjs-window-opacity > select")),i=w["default"].parseFloat(j(this.$(".vjs-font-percent > select"))),k={fontPercent:i,fontFamily:b,textOpacity:d,windowColor:g,windowOpacity:h,backgroundOpacity:f,edgeStyle:a,color:c,backgroundColor:e};for(var l in k)(""===k[l]||"none"===k[l]||"fontPercent"===l&&1===k[l])&&delete k[l];return k},b.prototype.setValues=function(a){k(this.$(".vjs-edge-style select"),a.edgeStyle),k(this.$(".vjs-font-family select"),a.fontFamily),k(this.$(".vjs-fg-color > select"),a.color),k(this.$(".vjs-text-opacity > select"),a.textOpacity),k(this.$(".vjs-bg-color > select"),a.backgroundColor),k(this.$(".vjs-bg-opacity > select"),a.backgroundOpacity),k(this.$(".window-color > select"),a.windowColor),k(this.$(".vjs-window-opacity > select"),a.windowOpacity);var b=a.fontPercent;b&&(b=b.toFixed(2)),k(this.$(".vjs-font-percent > select"),b)},b.prototype.restoreSettings=function(){var a=void 0,b=void 0;try{var c=u["default"](w["default"].localStorage.getItem("vjs-text-track-settings"));a=c[0],b=c[1],a&&s["default"].error(a)}catch(d){s["default"].warn(d)}b&&this.setValues(b)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?w["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):w["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){s["default"].warn(b)}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(m["default"]);m["default"].registerComponent("TextTrackSettings",x),c["default"]=x},{"../component":5,"../utils/events.js":81,"../utils/fn.js":82,"../utils/log.js":85,"global/window":93,"safe-json-parse/tuple":145}],72:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./text-track-cue-list"),j=e(i),k=a("../utils/fn.js"),l=d(k),m=a("./track-enums"),n=a("../utils/log.js"),o=e(n),p=a("global/window"),q=e(p),r=a("./track.js"),s=e(r),t=a("../utils/url.js"),u=a("xhr"),v=e(u),w=a("../utils/merge-options"),x=e(w),y=a("../utils/browser.js"),z=d(y),A=function(a,b){var c=new q["default"].WebVTT.Parser(q["default"],q["default"].vttjs,q["default"].WebVTT.StringDecoder()),d=[];c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){d.push(a)},c.onflush=function(){b.trigger({type:"loadeddata",target:b})},c.parse(a),d.length>0&&(q["default"].console&&q["default"].console.groupCollapsed&&q["default"].console.groupCollapsed("Text Track parsing errors for "+b.src),d.forEach(function(a){return o["default"].error(a)}),q["default"].console&&q["default"].console.groupEnd&&q["default"].console.groupEnd()),c.flush()},B=function(a,b){var c={uri:a},d=t.isCrossOrigin(a);d&&(c.cors=d),v["default"](c,l.bind(this,function(a,c,d){return a?o["default"].error(a,c):(b.loaded_=!0,void("function"!=typeof q["default"].WebVTT?b.tech_&&!function(){var a=function(){return A(d,b)};b.tech_.on("vttjsloaded",a),b.tech_.on("vttjserror",function(){o["default"].error("vttjs failed to load, stopping trying to process "+b.src),b.tech_.off("vttjsloaded",a)})}():A(d,b)))}))},C=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(f(this,b),!e.tech)throw new Error("A tech was not provided.");var h=x["default"](e,{kind:m.TextTrackKind[e.kind]||"subtitles",language:e.language||e.srclang||""}),i=m.TextTrackMode[h.mode]||"disabled",k=h["default"];("metadata"===h.kind||"chapters"===h.kind)&&(i="hidden");var n=c=g(this,a.call(this,h));if(n.tech_=h.tech,z.IS_IE8)for(var o in b.prototype)"constructor"!==o&&(n[o]=b.prototype[o]);n.cues_=[],n.activeCues_=[];var p=new j["default"](n.cues_),q=new j["default"](n.activeCues_),r=!1,s=l.bind(n,function(){this.activeCues,r&&(this.trigger("cuechange"),r=!1)});return"disabled"!==i&&n.tech_.on("timeupdate",s),Object.defineProperty(n,"default",{get:function(){return k},set:function(){}}),Object.defineProperty(n,"mode",{get:function(){return i},set:function(a){m.TextTrackMode[a]&&(i=a,"showing"===i&&this.tech_.on("timeupdate",s),this.trigger("modechange"))}}),Object.defineProperty(n,"cues",{get:function(){return this.loaded_?p:null},set:function(){}}),Object.defineProperty(n,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return q;for(var a=this.tech_.currentTime(),b=[],c=0,d=this.cues.length;d>c;c++){var e=this.cues[c];e.startTime<=a&&e.endTime>=a?b.push(e):e.startTime===e.endTime&&e.startTime<=a&&e.startTime+.5>=a&&b.push(e)}if(r=!1,b.length!==this.activeCues_.length)r=!0;else for(var f=0;f<b.length;f++)-1===this.activeCues_.indexOf(b[f])&&(r=!0);return this.activeCues_=b,q.setCues_(this.activeCues_),q},set:function(){}}),h.src?(n.src=h.src,B(h.src,n)):n.loaded_=!0,d=n,g(c,d)}return h(b,a),b.prototype.addCue=function(a){var b=this.tech_.textTracks();if(b)for(var c=0;c<b.length;c++)b[c]!==this&&b[c].removeCue(a);this.cues_.push(a),this.cues.setCues_(this.cues_)},b.prototype.removeCue=function(a){for(var b=!1,c=0,d=this.cues_.length;d>c;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)},b}(s["default"]);C.prototype.allowedEvents_={cuechange:"cuechange"},c["default"]=C},{"../utils/browser.js":78,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options":86,"../utils/url.js":90,"./text-track-cue-list":67,"./track-enums":73,"./track.js":75,"global/window":93,xhr:147}],73:[function(a,b,c){"use strict";c.__esModule=!0;c.VideoTrackKind={alternative:"alternative",captions:"captions",main:"main",sign:"sign",subtitles:"subtitles",commentary:"commentary"},c.AudioTrackKind={alternative:"alternative",descriptions:"descriptions",main:"main","main-desc":"main-desc",translation:"translation",commentary:"commentary"},c.TextTrackKind={subtitles:"subtitles",captions:"captions",descriptions:"descriptions",chapters:"chapters",metadata:"metadata"},c.TextTrackMode={disabled:"disabled",hidden:"hidden",showing:"showing"}},{}],74:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../event-target"),j=e(i),k=a("../utils/browser.js"),l=d(k),m=a("global/document"),n=e(m),o=function(a){function b(){var c,d=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],e=arguments.length<=1||void 0===arguments[1]?null:arguments[1];f(this,b);var h=g(this,a.call(this));if(!e&&(e=h,l.IS_IE8)){e=n["default"].createElement("custom");for(var i in b.prototype)"constructor"!==i&&(e[i]=b.prototype[i])}e.tracks_=[],Object.defineProperty(e,"length",{get:function(){return this.tracks_.length}});for(var j=0;j<d.length;j++)e.addTrack_(d[j]);return c=e,g(h,c)}return h(b,a),b.prototype.addTrack_=function(a){var b=this.tracks_.length;""+b in this||Object.defineProperty(this,b,{get:function(){return this.tracks_[b]}}),-1===this.tracks_.indexOf(a)&&(this.tracks_.push(a),this.trigger({track:a,type:"addtrack"}))},b.prototype.removeTrack_=function(a){for(var b=void 0,c=0,d=this.length;d>c;c++)if(this[c]===a){b=this[c],b.off&&b.off(),this.tracks_.splice(c,1);break}b&&this.trigger({track:b,type:"removetrack"})},b.prototype.getTrackById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},b}(j["default"]);o.prototype.allowedEvents_={change:"change",addtrack:"addtrack",removetrack:"removetrack"};for(var p in o.prototype.allowedEvents_)o.prototype["on"+p]=null;c["default"]=o},{"../event-target":42,"../utils/browser.js":78,"global/document":92}],75:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../utils/browser.js"),j=e(i),k=a("global/document"),l=d(k),m=a("../utils/guid.js"),n=e(m),o=a("../event-target"),p=d(o),q=function(a){function b(){var c,d=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var e=g(this,a.call(this)),h=e;if(j.IS_IE8){h=l["default"].createElement("custom");for(var i in b.prototype)"constructor"!==i&&(h[i]=b.prototype[i])}var k={id:d.id||"vjs_track_"+n.newGUID(),kind:d.kind||"",label:d.label||"",language:d.language||""},m=function(a){Object.defineProperty(h,a,{get:function(){return k[a]},set:function(){}})};for(var o in k)m(o);return c=h,g(e,c)}return h(b,a),b}(p["default"]);c["default"]=q},{"../event-target":42,"../utils/browser.js":78,"../utils/guid.js":84,"global/document":92}],76:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-list"),j=e(i),k=a("../utils/browser.js"),l=d(k),m=a("global/document"),n=e(m),o=function(a,b){for(var c=0;c<a.length;c++)b.id!==a[c].id&&(a[c].selected=!1)},p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,b);for(var h=void 0,i=e.length-1;i>=0;i--)if(e[i].selected){o(e,e[i]);break}if(l.IS_IE8){h=n["default"].createElement("custom");for(var k in j["default"].prototype)"constructor"!==k&&(h[k]=j["default"].prototype[k]);for(var m in b.prototype)"constructor"!==m&&(h[m]=b.prototype[m])}return h=c=g(this,a.call(this,e,h)),h.changing_=!1,Object.defineProperty(h,"selectedIndex",{get:function(){for(var a=0;a<this.length;a++)if(this[a].selected)return a;return-1},set:function(){}}),d=h,g(c,d)}return h(b,a),b.prototype.addTrack_=function(b){var c=this;b.selected&&o(this,b),a.prototype.addTrack_.call(this,b),b.addEventListener&&b.addEventListener("selectedchange",function(){c.changing_||(c.changing_=!0,o(c,b),c.changing_=!1,c.trigger("change"))})},b.prototype.addTrack=function(a){this.addTrack_(a)},b.prototype.removeTrack=function(b){a.prototype.removeTrack_.call(this,b)},b}(j["default"]);c["default"]=p},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],77:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-enums"),j=a("./track"),k=e(j),l=a("../utils/merge-options"),m=e(l),n=a("../utils/browser.js"),o=d(n),p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var h=m["default"](e,{kind:i.VideoTrackKind[e.kind]||""}),j=c=g(this,a.call(this,h)),k=!1;if(o.IS_IE8)for(var l in b.prototype)"constructor"!==l&&(j[l]=b.prototype[l]);return Object.defineProperty(j,"selected",{get:function(){return k},set:function(a){"boolean"==typeof a&&a!==k&&(k=a,this.trigger("selectedchange"))}}),h.selected&&(j.selected=h.selected),d=j,g(c,d)}return h(b,a),b}(k["default"]);c["default"]=p},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],78:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.BACKGROUND_SIZE_SUPPORTED=c.TOUCH_ENABLED=c.IE_VERSION=c.IS_IE8=c.IS_CHROME=c.IS_EDGE=c.IS_FIREFOX=c.IS_NATIVE_ANDROID=c.IS_OLD_ANDROID=c.ANDROID_VERSION=c.IS_ANDROID=c.IOS_VERSION=c.IS_IOS=c.IS_IPOD=c.IS_IPHONE=c.IS_IPAD=void 0;{var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator&&h["default"].navigator.userAgent||"",j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=c.IS_IPAD=/iPad/i.test(i),m=c.IS_IPHONE=/iPhone/i.test(i)&&!l,n=c.IS_IPOD=/iPod/i.test(i),o=(c.IS_IOS=m||l||n,c.IOS_VERSION=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:null}(),c.IS_ANDROID=/Android/i.test(i)),p=c.ANDROID_VERSION=function(){var a=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!a)return null;var b=a[1]&&parseFloat(a[1]),c=a[2]&&parseFloat(a[2]);return b&&c?parseFloat(a[1]+"."+a[2]):b?b:null}(),q=(c.IS_OLD_ANDROID=o&&/webkit/i.test(i)&&2.3>p,c.IS_NATIVE_ANDROID=o&&5>p&&537>k,c.IS_FIREFOX=/Firefox/i.test(i),c.IS_EDGE=/Edge/i.test(i));c.IS_CHROME=!q&&/Chrome/i.test(i),c.IS_IE8=/MSIE\s8\.0/.test(i),c.IE_VERSION=function(a){return a&&parseFloat(a[1])}(/MSIE\s(\d+)\.\d/.exec(i)),c.TOUCH_ENABLED=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch),c.BACKGROUND_SIZE_SUPPORTED="backgroundSize"in f["default"].createElement("video").style}},{"global/document":92,"global/window":93}],79:[function(a,b,c){"use strict";function d(a,b){var c=0,d=void 0,f=void 0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;g<a.length;g++)d=a.start(g),f=a.end(g),f>b&&(f=b),c+=f-d;return c/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":88}],80:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){return a.raw=b,a}function g(a){return"string"==typeof a&&/\S/.test(a)}function h(a){if(/\s/.test(a))throw new Error("class has illegal whitespace characters")}function i(a){return new RegExp("(^|\\s)"+a+"($|\\s)")}function j(a){return!!a&&"object"===("undefined"==typeof a?"undefined":H(a))&&1===a.nodeType}function k(a){return function(b,c){if(!g(b))return K["default"][a](null);g(c)&&(c=K["default"].querySelector(c));var d=j(c)?c:K["default"];return d[a]&&d[a](b)}}function l(a){return 0===a.indexOf("#")&&(a=a.slice(1)),K["default"].getElementById(a)}function m(){var a=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],d=K["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var c=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?(Q["default"].warn(S["default"](I,a,c)),d.setAttribute(a,c)):d[a]=c}),Object.getOwnPropertyNames(c).forEach(function(a){d.setAttribute(a,c[a])}),d}function n(a,b){"undefined"==typeof a.textContent?a.innerText=b:a.textContent=b}function o(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function p(a){var b=a[U];return b||(b=a[U]=O.newGUID()),T[b]||(T[b]={}),T[b]}function q(a){var b=a[U];return b?!!Object.getOwnPropertyNames(T[b]).length:!1}function r(a){var b=a[U];if(b){delete T[b];try{delete a[U]}catch(c){a.removeAttribute?a.removeAttribute(U):a[U]=null}}}function s(a,b){return a.classList?a.classList.contains(b):(h(b),i(b).test(a.className))}function t(a,b){return a.classList?a.classList.add(b):s(a,b)||(a.className=(a.className+" "+b).trim()),a}function u(a,b){return a.classList?a.classList.remove(b):(h(b),a.className=a.className.split(/\s+/).filter(function(a){return a!==b}).join(" ")),a}function v(a,b,c){var d=s(a,b);return"function"==typeof c&&(c=c(a,b)),"boolean"!=typeof c&&(c=!d),c!==d?(c?t(a,b):u(a,b),a):void 0}function w(a,b){Object.getOwnPropertyNames(b).forEach(function(c){var d=b[c];null===d||"undefined"==typeof d||d===!1?a.removeAttribute(c):a.setAttribute(c,d===!0?"":d)})}function x(a){var b={},c=",autoplay,controls,loop,muted,default,";if(a&&a.attributes&&a.attributes.length>0)for(var d=a.attributes,e=d.length-1;e>=0;e--){var f=d[e].name,g=d[e].value;("boolean"==typeof a[f]||-1!==c.indexOf(","+f+","))&&(g=null!==g?!0:!1),b[f]=g}return b}function y(){K["default"].body.focus(),K["default"].onselectstart=function(){return!1}}function z(){K["default"].onselectstart=function(){return!0}}function A(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=K["default"].documentElement,d=K["default"].body,e=c.clientLeft||d.clientLeft||0,f=M["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=M["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}function B(a,b){var c={},d=A(a),e=a.offsetWidth,f=a.offsetHeight,g=d.top,h=d.left,i=b.pageY,j=b.pageX;return b.changedTouches&&(j=b.changedTouches[0].pageX,i=b.changedTouches[0].pageY),c.y=Math.max(0,Math.min(1,(g-i+f)/f)),c.x=Math.max(0,Math.min(1,(j-h)/e)),c}function C(a){return!!a&&"object"===("undefined"==typeof a?"undefined":H(a))&&3===a.nodeType}function D(a){for(;a.firstChild;)a.removeChild(a.firstChild);return a}function E(a){return"function"==typeof a&&(a=a()),(Array.isArray(a)?a:[a]).map(function(a){return"function"==typeof a&&(a=a()),j(a)||C(a)?a:"string"==typeof a&&/\S/.test(a)?K["default"].createTextNode(a):void 0}).filter(function(a){return a})}function F(a,b){return E(b).forEach(function(b){return a.appendChild(b)}),a}function G(a,b){return F(D(a),b)}c.__esModule=!0,c.$$=c.$=void 0;var H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},I=f(["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 "," to ","."],["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 "," to ","."]);c.isEl=j,c.getEl=l,c.createEl=m,c.textContent=n,c.insertElFirst=o,c.getElData=p,c.hasElData=q,c.removeElData=r,c.hasElClass=s,c.addElClass=t,c.removeElClass=u,c.toggleElClass=v,c.setElAttributes=w,c.getElAttributes=x,c.blockTextSelection=y,c.unblockTextSelection=z,c.findElPosition=A,c.getPointerPosition=B,c.isTextNode=C,c.emptyEl=D,c.normalizeContent=E,c.appendContent=F,c.insertContent=G;{var J=a("global/document"),K=e(J),L=a("global/window"),M=e(L),N=a("./guid.js"),O=d(N),P=a("./log.js"),Q=e(P),R=a("tsml"),S=e(R),T={},U="vdata"+(new Date).getTime();c.$=k("querySelector"),c.$$=k("querySelectorAll")}},{"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93,tsml:146}],81:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){var c=n.getElData(a);0===c.handlers[b].length&&(delete c.handlers[b],a.removeEventListener?a.removeEventListener(b,c.dispatcher,!1):a.detachEvent&&a.detachEvent("on"+b,c.dispatcher)),Object.getOwnPropertyNames(c.handlers).length<=0&&(delete c.handlers,delete c.dispatcher,delete c.disabled),0===Object.getOwnPropertyNames(c).length&&n.removeElData(a)}function g(a,b,c,d){c.forEach(function(c){a(b,c,d)})}function h(a){function b(){return!0}function c(){return!1}return a&&a.isPropagationStopped||!function(){var d=a||t["default"].event;a={};for(var e in d)"layerX"!==e&&"layerY"!==e&&"keyLocation"!==e&&"webkitMovementX"!==e&&"webkitMovementY"!==e&&("returnValue"===e&&d.preventDefault||(a[e]=d[e]));if(a.target||(a.target=a.srcElement||v["default"]),a.relatedTarget||(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement),a.preventDefault=function(){d.preventDefault&&d.preventDefault(),a.returnValue=!1,d.returnValue=!1,a.defaultPrevented=!0},a.defaultPrevented=!1,a.stopPropagation=function(){d.stopPropagation&&d.stopPropagation(),a.cancelBubble=!0,d.cancelBubble=!0,a.isPropagationStopped=b},a.isPropagationStopped=c,a.stopImmediatePropagation=function(){d.stopImmediatePropagation&&d.stopImmediatePropagation(),a.isImmediatePropagationStopped=b,a.stopPropagation();
+
+},a.isImmediatePropagationStopped=c,null!==a.clientX&&void 0!==a.clientX){var f=v["default"].documentElement,g=v["default"].body;a.pageX=a.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=a.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)}a.which=a.charCode||a.keyCode,null!==a.button&&void 0!==a.button&&(a.button=1&a.button?0:4&a.button?1:2&a.button?2:0)}(),a}function i(a,b,c){if(Array.isArray(b))return g(i,a,b,c);var d=n.getElData(a);d.handlers||(d.handlers={}),d.handlers[b]||(d.handlers[b]=[]),c.guid||(c.guid=p.newGUID()),d.handlers[b].push(c),d.dispatcher||(d.disabled=!1,d.dispatcher=function(b,c){if(!d.disabled){b=h(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,i=f.length;i>g&&!b.isImmediatePropagationStopped();g++)try{f[g].call(a,b,c)}catch(j){r["default"].error(j)}}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function j(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return g(j,a,b,c);var e=function(b){d.handlers[b]=[],f(a,b)};if(b){var h=d.handlers[b];if(h){if(!c)return void e(b);if(c.guid)for(var i=0;i<h.length;i++)h[i].guid===c.guid&&h.splice(i--,1);f(a,b)}}else for(var k in d.handlers)e(k)}}}function k(a,b,c){var d=n.hasElData(a)?n.getElData(a):{},e=a.parentNode||a.ownerDocument;if("string"==typeof b&&(b={type:b,target:a}),b=h(b),d.dispatcher&&d.dispatcher.call(a,b,c),e&&!b.isPropagationStopped()&&b.bubbles===!0)k.call(null,e,b,c);else if(!e&&!b.defaultPrevented){var f=n.getElData(b.target);b.target[b.type]&&(f.disabled=!0,"function"==typeof b.target[b.type]&&b.target[b.type](),f.disabled=!1)}return!b.defaultPrevented}function l(a,b,c){if(Array.isArray(b))return g(l,a,b,c);var d=function e(){j(a,b,e),c.apply(this,arguments)};d.guid=c.guid=c.guid||p.newGUID(),i(a,b,d)}c.__esModule=!0,c.fixEvent=h,c.on=i,c.off=j,c.trigger=k,c.one=l;var m=a("./dom.js"),n=e(m),o=a("./guid.js"),p=e(o),q=a("./log.js"),r=d(q),s=a("global/window"),t=d(s),u=a("global/document"),v=d(u)},{"./dom.js":80,"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93}],82:[function(a,b,c){"use strict";c.__esModule=!0,c.bind=void 0;{var d=a("./guid.js");c.bind=function(a,b,c){b.guid||(b.guid=d.newGUID());var e=function(){return b.apply(a,arguments)};return e.guid=c?c+"_"+b.guid:b.guid,e}}},{"./guid.js":84}],83:[function(a,b,c){"use strict";function d(a){var b=arguments.length<=1||void 0===arguments[1]?a:arguments[1];a=0>a?0:a;var c=Math.floor(a%60),d=Math.floor(a/60%60),e=Math.floor(a/3600),f=Math.floor(b/60%60),g=Math.floor(b/3600);return(isNaN(a)||a===1/0)&&(e=d=c="-"),e=e>0||g>0?e+":":"",d=((e||f>=10)&&10>d?"0"+d:d)+":",c=10>c?"0"+c:c,e+d+c}c.__esModule=!0,c["default"]=d},{}],84:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],85:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.logByType=void 0;var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},f=a("global/window"),g=d(f),h=a("./browser"),i=void 0,j=c.logByType=function(a,b){var c=arguments.length<=2||void 0===arguments[2]?!!h.IE_VERSION&&h.IE_VERSION<11:arguments[2],d=g["default"].console&&g["default"].console[a]||function(){};"log"!==a&&b.unshift(a.toUpperCase()+":"),i.history.push(b),b.unshift("VIDEOJS:"),c&&(b=b.map(function(a){if(a&&"object"===("undefined"==typeof a?"undefined":e(a))||Array.isArray(a))try{return JSON.stringify(a)}catch(b){return String(a)}return String(a)}).join(" ")),d.apply?d[Array.isArray(b)?"apply":"call"](console,b):d(b)};i=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];j("log",b)},i.history=[],i.error=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return j("error",b)},i.warn=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return j("warn",b)},c["default"]=i},{"./browser":78,"global/window":93}],86:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"===("undefined"==typeof a?"undefined":h(a))&&"[object Object]"===a.toString()&&a.constructor===Object}function f(a,b){return e(b)?e(a)?void 0:g(b):b}function g(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(f),j["default"].apply(null,a),a[0]}c.__esModule=!0;var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a};c["default"]=g;var i=a("lodash-compat/object/merge"),j=d(i)},{"lodash-compat/object/merge":131}],87:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.setTextContent=c.createStyleElement=void 0;{var e=a("global/document"),f=d(e);c.createStyleElement=function(a){var b=f["default"].createElement("style");return b.className=a,b},c.setTextContent=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b}}},{"global/document":92}],88:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b,c){if(0>b||b>c)throw new Error("Failed to execute '"+a+"' on 'TimeRanges': The index provided ("+b+") is greater than or equal to the maximum bound ("+c+").")}function f(a,b,c,d){return void 0===d&&(j["default"].warn("DEPRECATED: Function '"+a+"' on 'TimeRanges' called without an index argument."),d=0),e(a,d,c.length-1),c[d][b]}function g(a){return void 0===a||0===a.length?{length:0,start:function(){throw new Error("This TimeRanges object is empty")},end:function(){throw new Error("This TimeRanges object is empty")}}:{length:a.length,start:f.bind(null,"start",0,a),end:f.bind(null,"end",1,a)}}function h(a,b){return Array.isArray(a)?g(a):void 0===a||void 0===b?g():g([[a,b]])}c.__esModule=!0,c.createTimeRange=void 0,c.createTimeRanges=h;var i=a("./log.js"),j=d(i);c.createTimeRange=h},{"./log.js":85}],89:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d},{}],90:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.isCrossOrigin=c.getFileExtension=c.getAbsoluteURL=c.parseUrl=void 0;{var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=c.parseUrl=function(a){var b=["protocol","hostname","port","pathname","search","hash","host"],c=f["default"].createElement("a");c.href=a;var d=""===c.host&&"file:"!==c.protocol,e=void 0;d&&(e=f["default"].createElement("div"),e.innerHTML='<a href="'+a+'"></a>',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;h<b.length;h++)g[b[h]]=c[b[h]];return"http:"===g.protocol&&(g.host=g.host.replace(/:80$/,"")),"https:"===g.protocol&&(g.host=g.host.replace(/:443$/,"")),d&&f["default"].body.removeChild(e),g};c.getAbsoluteURL=function(a){if(!a.match(/^https?:\/\//)){var b=f["default"].createElement("div");b.innerHTML='<a href="'+a+'">x</a>',a=b.firstChild.href}return a},c.getFileExtension=function(a){if("string"==typeof a){var b=/^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i,c=b.exec(a);if(c)return c.pop().toLowerCase()}return""},c.isCrossOrigin=function(a){var b=h["default"].location,c=i(a),d=":"===c.protocol?b.protocol:c.protocol,e=d+c.host!==b.protocol+b.host;return e}}},{"global/document":92,"global/window":93}],91:[function(b,c,d){"use strict";function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a){return a&&a.__esModule?a:{"default":a}}function g(a,b,c){var d=void 0;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),g.getPlayers()[a])return b&&O["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&g.getPlayers()[a].ready(c),g.getPlayers()[a];d=Q.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||x["default"].players[d.playerId]||new x["default"](d,b,c)}d.__esModule=!0;var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},i=b("global/window"),j=f(i),k=b("global/document"),l=f(k),m=b("./setup"),n=e(m),o=b("./utils/stylesheet.js"),p=e(o),q=b("./component"),r=f(q),s=b("./event-target"),t=f(s),u=b("./utils/events.js"),v=e(u),w=b("./player"),x=f(w),y=b("./plugins.js"),z=f(y),A=b("./utils/merge-options.js"),B=f(A),C=b("./utils/fn.js"),D=e(C),E=b("./tracks/text-track.js"),F=f(E),G=b("./tracks/audio-track.js"),H=f(G),I=b("./tracks/video-track.js"),J=f(I),K=b("./utils/time-ranges.js"),L=b("./utils/format-time.js"),M=f(L),N=b("./utils/log.js"),O=f(N),P=b("./utils/dom.js"),Q=e(P),R=b("./utils/browser.js"),S=e(R),T=b("./utils/url.js"),U=e(T),V=b("./extend.js"),W=f(V),X=b("lodash-compat/object/merge"),Y=f(X),Z=b("xhr"),$=f(Z),_=b("./tech/tech.js"),aa=f(_);if("undefined"==typeof HTMLVideoElement&&(l["default"].createElement("video"),l["default"].createElement("audio"),l["default"].createElement("track")),j["default"].VIDEOJS_NO_DYNAMIC_STYLE!==!0){var ba=Q.$(".vjs-styles-defaults");if(!ba){ba=p.createStyleElement("vjs-styles-defaults");var ca=Q.$("head");ca&&ca.insertBefore(ba,ca.firstChild),p.setTextContent(ba,"\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    ")}}n.autoSetupTimeout(1,g),g.VERSION="5.12.1",g.options=x["default"].prototype.options_,g.getPlayers=function(){return x["default"].players},g.players=x["default"].players,g.getComponent=r["default"].getComponent,g.registerComponent=function(a,b){aa["default"].isTech(b)&&O["default"].warn("The "+a+" tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"),r["default"].registerComponent.call(r["default"],a,b)},g.getTech=aa["default"].getTech,g.registerTech=aa["default"].registerTech,g.browser=S,g.TOUCH_ENABLED=S.TOUCH_ENABLED,g.extend=W["default"],g.mergeOptions=B["default"],g.bind=D.bind,g.plugin=z["default"],g.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),Y["default"](g.options.languages,(c={},c[a]=b,c))[a]},g.log=O["default"],g.createTimeRange=g.createTimeRanges=K.createTimeRanges,g.formatTime=M["default"],g.parseUrl=U.parseUrl,g.isCrossOrigin=U.isCrossOrigin,g.EventTarget=t["default"],g.on=v.on,g.one=v.one,g.off=v.off,g.trigger=v.trigger,g.xhr=$["default"],g.TextTrack=F["default"],g.AudioTrack=H["default"],g.VideoTrack=J["default"],g.isEl=Q.isEl,g.isTextNode=Q.isTextNode,g.createEl=Q.createEl,g.hasClass=Q.hasElClass,g.addClass=Q.addElClass,g.removeClass=Q.removeElClass,g.toggleClass=Q.toggleElClass,g.setAttributes=Q.setElAttributes,g.getAttributes=Q.getElAttributes,g.emptyEl=Q.emptyEl,g.appendContent=Q.appendContent,g.insertContent=Q.insertContent,"function"==typeof a&&a.amd?a("videojs",[],function(){return g}):"object"===("undefined"==typeof d?"undefined":h(d))&&"object"===("undefined"==typeof c?"undefined":h(c))&&(c.exports=g),d["default"]=g},{"./component":5,"./event-target":42,"./extend.js":43,"./player":51,"./plugins.js":52,"./setup":56,"./tech/tech.js":62,"./tracks/audio-track.js":64,"./tracks/text-track.js":72,"./tracks/video-track.js":77,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/format-time.js":83,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/url.js":90,"global/document":92,"global/window":93,"lodash-compat/object/merge":131,xhr:147}],92:[function(a,b){(function(c){var d="undefined"!=typeof c?c:"undefined"!=typeof window?window:{},e=a("min-document");if("undefined"!=typeof document)b.exports=document;else{var f=d["__GLOBAL_DOCUMENT_CACHE@4"];f||(f=d["__GLOBAL_DOCUMENT_CACHE@4"]=e),b.exports=f}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"min-document":94}],93:[function(a,b){(function(a){b.exports="undefined"!=typeof window?window:"undefined"!=typeof a?a:"undefined"!=typeof self?self:{}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],94:[function(){},{}],95:[function(a,b){var c=a("../internal/getNative"),d=c(Date,"now"),e=d||function(){return(new Date).getTime()};b.exports=e},{"../internal/getNative":111}],96:[function(a,b){function c(a,b,c){function h(){r&&clearTimeout(r),n&&clearTimeout(n),t=0,n=r=s=void 0}function i(b,c){c&&clearTimeout(c),n=r=s=void 0,b&&(t=e(),o=a.apply(q,m),r||n||(m=q=void 0))}function j(){var a=b-(e()-p);0>=a||a>b?i(s,n):r=setTimeout(j,a)}function k(){i(v,r)}function l(){if(m=arguments,p=e(),q=this,s=v&&(r||!w),u===!1)var c=w&&!r;else{n||w||(t=p);var d=u-(p-t),f=0>=d||d>u;f?(n&&(n=clearTimeout(n)),t=p,o=a.apply(q,m)):n||(n=setTimeout(k,d))}return f&&r?r=clearTimeout(r):r||b===u||(r=setTimeout(j,b)),c&&(f=!0,o=a.apply(q,m)),!f||r||n||(m=q=void 0),o}var m,n,o,p,q,r,s,t=0,u=!1,v=!0;if("function"!=typeof a)throw new TypeError(f);if(b=0>b?0:+b||0,c===!0){var w=!0;v=!1}else d(c)&&(w=!!c.leading,u="maxWait"in c&&g(+c.maxWait||0,b),v="trailing"in c?!!c.trailing:v);return l.cancel=h,l}var d=a("../lang/isObject"),e=a("../date/now"),f="Expected a function",g=Math.max;b.exports=c},{"../date/now":95,"../lang/isObject":124}],97:[function(a,b){function c(a,b){if("function"!=typeof a)throw new TypeError(d);return b=e(void 0===b?a.length-1:+b||0,0),function(){for(var c=arguments,d=-1,f=e(c.length-b,0),g=Array(f);++d<f;)g[d]=c[b+d];switch(b){case 0:return a.call(this,g);case 1:return a.call(this,c[0],g);case 2:return a.call(this,c[0],c[1],g)}var h=Array(b+1);for(d=-1;++d<b;)h[d]=c[d];return h[b]=g,a.apply(this,h)}}var d="Expected a function",e=Math.max;b.exports=c},{}],98:[function(a,b){function c(a,b,c){var g=!0,h=!0;if("function"!=typeof a)throw new TypeError(f);return c===!1?g=!1:e(c)&&(g="leading"in c?!!c.leading:g,h="trailing"in c?!!c.trailing:h),d(a,b,{leading:g,maxWait:+b,trailing:h})}var d=a("./debounce"),e=a("../lang/isObject"),f="Expected a function";b.exports=c},{"../lang/isObject":124,"./debounce":96}],99:[function(a,b){function c(a,b){var c=-1,d=a.length;for(b||(b=Array(d));++c<d;)b[c]=a[c];return b}b.exports=c},{}],100:[function(a,b){function c(a,b){for(var c=-1,d=a.length;++c<d&&b(a[c],c,a)!==!1;);return a}b.exports=c},{}],101:[function(a,b){function c(a,b,c){c||(c={});for(var d=-1,e=b.length;++d<e;){var f=b[d];c[f]=a[f]}return c}b.exports=c},{}],102:[function(a,b){var c=a("./createBaseFor"),d=c();b.exports=d},{"./createBaseFor":109}],103:[function(a,b){function c(a,b){return d(a,b,e)}var d=a("./baseFor"),e=a("../object/keysIn");b.exports=c},{"../object/keysIn":130,"./baseFor":102}],104:[function(a,b){function c(a,b,l,m,n){if(!h(a))return a;var o=g(b)&&(f(b)||j(b)),p=o?void 0:k(b);return d(p||b,function(d,f){if(p&&(f=d,d=b[f]),i(d))m||(m=[]),n||(n=[]),e(a,b,f,c,l,m,n);else{var g=a[f],h=l?l(g,d,f,a,b):void 0,j=void 0===h;j&&(h=d),void 0===h&&(!o||f in a)||!j&&(h===h?h===g:g!==g)||(a[f]=h)}}),a}var d=a("./arrayEach"),e=a("./baseMergeDeep"),f=a("../lang/isArray"),g=a("./isArrayLike"),h=a("../lang/isObject"),i=a("./isObjectLike"),j=a("../lang/isTypedArray"),k=a("../object/keys");b.exports=c},{"../lang/isArray":121,"../lang/isObject":124,"../lang/isTypedArray":127,"../object/keys":129,"./arrayEach":100,"./baseMergeDeep":105,"./isArrayLike":112,"./isObjectLike":117}],105:[function(a,b){function c(a,b,c,k,l,m,n){for(var o=m.length,p=b[c];o--;)if(m[o]==p)return void(a[c]=n[o]);var q=a[c],r=l?l(q,p,c,a,b):void 0,s=void 0===r;s&&(r=p,g(p)&&(f(p)||i(p))?r=f(q)?q:g(q)?d(q):[]:h(p)||e(p)?r=e(q)?j(q):h(q)?q:{}:s=!1),m.push(p),n.push(r),s?a[c]=k(r,p,l,m,n):(r===r?r!==q:q===q)&&(a[c]=r)}var d=a("./arrayCopy"),e=a("../lang/isArguments"),f=a("../lang/isArray"),g=a("./isArrayLike"),h=a("../lang/isPlainObject"),i=a("../lang/isTypedArray"),j=a("../lang/toPlainObject");b.exports=c},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isPlainObject":125,"../lang/isTypedArray":127,"../lang/toPlainObject":128,"./arrayCopy":99,"./isArrayLike":112}],106:[function(a,b){function c(a){return function(b){return null==b?void 0:d(b)[a]}}var d=a("./toObject");b.exports=c},{"./toObject":119}],107:[function(a,b){function c(a,b,c){if("function"!=typeof a)return d;if(void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)};case 5:return function(c,d,e,f,g){return a.call(b,c,d,e,f,g)}}return function(){return a.apply(b,arguments)}}var d=a("../utility/identity");b.exports=c},{"../utility/identity":133}],108:[function(a,b){function c(a){return f(function(b,c){var f=-1,g=null==b?0:c.length,h=g>2?c[g-2]:void 0,i=g>2?c[2]:void 0,j=g>1?c[g-1]:void 0;for("function"==typeof h?(h=d(h,j,5),g-=2):(h="function"==typeof j?j:void 0,g-=h?1:0),i&&e(c[0],c[1],i)&&(h=3>g?void 0:h,g=1);++f<g;){var k=c[f];k&&a(b,k,h)}return b})}var d=a("./bindCallback"),e=a("./isIterateeCall"),f=a("../function/restParam");b.exports=c},{"../function/restParam":97,"./bindCallback":107,"./isIterateeCall":115}],109:[function(a,b){function c(a){return function(b,c,e){for(var f=d(b),g=e(b),h=g.length,i=a?h:-1;a?i--:++i<h;){var j=g[i];if(c(f[j],j,f)===!1)break}return b}}var d=a("./toObject");b.exports=c},{"./toObject":119}],110:[function(a,b){var c=a("./baseProperty"),d=c("length");b.exports=d},{"./baseProperty":106}],111:[function(a,b){function c(a,b){var c=null==a?void 0:a[b];return d(c)?c:void 0}var d=a("../lang/isNative");b.exports=c},{"../lang/isNative":123}],112:[function(a,b){function c(a){return null!=a&&e(d(a))}var d=a("./getLength"),e=a("./isLength");b.exports=c},{"./getLength":110,"./isLength":116}],113:[function(a,b){var c=function(){try{Object({toString:0}+"")}catch(a){return function(){return!1}}return function(a){return"function"!=typeof a.toString&&"string"==typeof(a+"")}}();b.exports=c},{}],114:[function(a,b){function c(a,b){return a="number"==typeof a||d.test(a)?+a:-1,b=null==b?e:b,a>-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],115:[function(a,b){function c(a,b,c){if(!f(c))return!1;var g=typeof b;if("number"==g?d(c)&&e(b,c.length):"string"==g&&b in c){var h=c[b];return a===a?a===h:h!==h}return!1}var d=a("./isArrayLike"),e=a("./isIndex"),f=a("../lang/isObject");b.exports=c},{"../lang/isObject":124,"./isArrayLike":112,"./isIndex":114}],116:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],117:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],118:[function(a,b){function c(a){for(var b=i(a),c=b.length,j=c&&a.length,l=!!j&&g(j)&&(e(a)||d(a)||h(a)),m=-1,n=[];++m<c;){var o=b[m];(l&&f(o,j)||k.call(a,o))&&n.push(o)}return n}var d=a("../lang/isArguments"),e=a("../lang/isArray"),f=a("./isIndex"),g=a("./isLength"),h=a("../lang/isString"),i=a("../object/keysIn"),j=Object.prototype,k=j.hasOwnProperty;b.exports=c},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isString":126,"../object/keysIn":130,"./isIndex":114,"./isLength":116}],119:[function(a,b){function c(a){if(f.unindexedChars&&e(a)){for(var b=-1,c=a.length,g=Object(a);++b<c;)g[b]=a.charAt(b);return g}return d(a)?a:Object(a)}var d=a("../lang/isObject"),e=a("../lang/isString"),f=a("../support");b.exports=c},{"../lang/isObject":124,"../lang/isString":126,"../support":132}],120:[function(a,b){function c(a){return e(a)&&d(a)&&g.call(a,"callee")&&!h.call(a,"callee")}var d=a("../internal/isArrayLike"),e=a("../internal/isObjectLike"),f=Object.prototype,g=f.hasOwnProperty,h=f.propertyIsEnumerable;b.exports=c},{"../internal/isArrayLike":112,"../internal/isObjectLike":117}],121:[function(a,b){var c=a("../internal/getNative"),d=a("../internal/isLength"),e=a("../internal/isObjectLike"),f="[object Array]",g=Object.prototype,h=g.toString,i=c(Array,"isArray"),j=i||function(a){return e(a)&&d(a.length)&&h.call(a)==f};b.exports=j},{"../internal/getNative":111,"../internal/isLength":116,"../internal/isObjectLike":117}],122:[function(a,b){function c(a){return d(a)&&g.call(a)==e}var d=a("./isObject"),e="[object Function]",f=Object.prototype,g=f.toString;b.exports=c},{"./isObject":124}],123:[function(a,b){function c(a){return null==a?!1:d(a)?k.test(i.call(a)):f(a)&&(e(a)?k:g).test(a)}var d=a("./isFunction"),e=a("../internal/isHostObject"),f=a("../internal/isObjectLike"),g=/^\[object .+?Constructor\]$/,h=Object.prototype,i=Function.prototype.toString,j=h.hasOwnProperty,k=RegExp("^"+i.call(j).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");b.exports=c},{"../internal/isHostObject":113,"../internal/isObjectLike":117,"./isFunction":122}],124:[function(a,b){function c(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}b.exports=c},{}],125:[function(a,b){function c(a){var b;if(!g(a)||l.call(a)!=i||f(a)||e(a)||!k.call(a,"constructor")&&(b=a.constructor,"function"==typeof b&&!(b instanceof b)))return!1;var c;return h.ownLast?(d(a,function(a,b,d){return c=k.call(d,b),!1}),c!==!1):(d(a,function(a,b){c=b}),void 0===c||k.call(a,c))}var d=a("../internal/baseForIn"),e=a("./isArguments"),f=a("../internal/isHostObject"),g=a("../internal/isObjectLike"),h=a("../support"),i="[object Object]",j=Object.prototype,k=j.hasOwnProperty,l=j.toString;b.exports=c},{"../internal/baseForIn":103,"../internal/isHostObject":113,"../internal/isObjectLike":117,"../support":132,"./isArguments":120}],126:[function(a,b){function c(a){return"string"==typeof a||d(a)&&g.call(a)==e}var d=a("../internal/isObjectLike"),e="[object String]",f=Object.prototype,g=f.toString;b.exports=c},{"../internal/isObjectLike":117}],127:[function(a,b){function c(a){return e(a)&&d(a.length)&&!!C[E.call(a)]}var d=a("../internal/isLength"),e=a("../internal/isObjectLike"),f="[object Arguments]",g="[object Array]",h="[object Boolean]",i="[object Date]",j="[object Error]",k="[object Function]",l="[object Map]",m="[object Number]",n="[object Object]",o="[object RegExp]",p="[object Set]",q="[object String]",r="[object WeakMap]",s="[object ArrayBuffer]",t="[object Float32Array]",u="[object Float64Array]",v="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",y="[object Uint8Array]",z="[object Uint8ClampedArray]",A="[object Uint16Array]",B="[object Uint32Array]",C={};C[t]=C[u]=C[v]=C[w]=C[x]=C[y]=C[z]=C[A]=C[B]=!0,C[f]=C[g]=C[s]=C[h]=C[i]=C[j]=C[k]=C[l]=C[m]=C[n]=C[o]=C[p]=C[q]=C[r]=!1;var D=Object.prototype,E=D.toString;b.exports=c},{"../internal/isLength":116,"../internal/isObjectLike":117}],128:[function(a,b){function c(a){return d(a,e(a))}var d=a("../internal/baseCopy"),e=a("../object/keysIn");b.exports=c},{"../internal/baseCopy":101,"../object/keysIn":130}],129:[function(a,b){var c=a("../internal/getNative"),d=a("../internal/isArrayLike"),e=a("../lang/isObject"),f=a("../internal/shimKeys"),g=a("../support"),h=c(Object,"keys"),i=h?function(a){var b=null==a?void 0:a.constructor;return"function"==typeof b&&b.prototype===a||("function"==typeof a?g.enumPrototypes:d(a))?f(a):e(a)?h(a):[]}:f;b.exports=i},{"../internal/getNative":111,"../internal/isArrayLike":112,"../internal/shimKeys":118,"../lang/isObject":124,"../support":132}],130:[function(a,b){function c(a){if(null==a)return[];j(a)||(a=Object(a));var b=a.length;b=b&&i(b)&&(f(a)||e(a)||k(a))&&b||0;for(var c=a.constructor,d=-1,m=g(c)&&c.prototype||x,n=m===a,o=Array(b),q=b>0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d<b;)o[d]=d+"";for(var C in a)t&&"prototype"==C||r&&("message"==C||"name"==C)||q&&h(C,b)||"constructor"==C&&(n||!z.call(a,C))||o.push(C);if(l.nonEnumShadows&&a!==x){var D=a===y?u:a===w?p:A.call(a),E=B[D]||B[s];for(D==s&&(m=x),b=v.length;b--;){C=v[b];var F=E[C];n&&F||(F?!z.call(a,C):a[C]===m[C])||o.push(C)}}return o}var d=a("../internal/arrayEach"),e=a("../lang/isArguments"),f=a("../lang/isArray"),g=a("../lang/isFunction"),h=a("../internal/isIndex"),i=a("../internal/isLength"),j=a("../lang/isObject"),k=a("../lang/isString"),l=a("../support"),m="[object Array]",n="[object Boolean]",o="[object Date]",p="[object Error]",q="[object Function]",r="[object Number]",s="[object Object]",t="[object RegExp]",u="[object String]",v=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],w=Error.prototype,x=Object.prototype,y=String.prototype,z=x.hasOwnProperty,A=x.toString,B={};B[m]=B[o]=B[r]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},B[n]=B[u]={constructor:!0,toString:!0,valueOf:!0},B[p]=B[q]=B[t]={constructor:!0,toString:!0},B[s]={constructor:!0},d(v,function(a){for(var b in B)if(z.call(B,b)){var c=B[b];c[a]=z.call(c,a)}}),b.exports=c},{"../internal/arrayEach":100,"../internal/isIndex":114,"../internal/isLength":116,"../lang/isArguments":120,"../lang/isArray":121,"../lang/isFunction":122,"../lang/isObject":124,"../lang/isString":126,"../support":132}],131:[function(a,b){var c=a("../internal/baseMerge"),d=a("../internal/createAssigner"),e=d(c);b.exports=e},{"../internal/baseMerge":104,"../internal/createAssigner":108}],132:[function(a,b){var c=Array.prototype,d=Error.prototype,e=Object.prototype,f=e.propertyIsEnumerable,g=c.splice,h={};!function(a){var b=function(){this.x=a},c={0:a,length:a},e=[];b.prototype={valueOf:a,y:a};for(var i in new b)e.push(i);h.enumErrorProps=f.call(d,"message")||f.call(d,"name"),h.enumPrototypes=f.call(b,"prototype"),h.nonEnumShadows=!/valueOf/.test(e),h.ownLast="x"!=e[0],h.spliceObjects=(g.call(c,0,1),!c[0]),h.unindexedChars="x"[0]+Object("x")[0]!="xx"}(1,0),b.exports=h},{}],133:[function(a,b){function c(a){return a}b.exports=c},{}],134:[function(a,b){"use strict";var c=a("object-keys");b.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var a={},b=Symbol("test");if("string"==typeof b)return!1;var d=42;a[b]=d;for(b in a)return!1;if(0!==c(a).length)return!1;if("function"==typeof Object.keys&&0!==Object.keys(a).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(a).length)return!1;var e=Object.getOwnPropertySymbols(a);if(1!==e.length||e[0]!==b)return!1;if(!Object.prototype.propertyIsEnumerable.call(a,b))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var f=Object.getOwnPropertyDescriptor(a,b);if(f.value!==d||f.enumerable!==!0)return!1}return!0}},{"object-keys":141}],135:[function(a,b){"use strict";var c=a("object-keys"),d=a("function-bind"),e=function(a){return"undefined"!=typeof a&&null!==a},f=a("./hasSymbols")(),g=Object,h=d.call(Function.call,Array.prototype.push),i=d.call(Function.call,Object.prototype.propertyIsEnumerable);b.exports=function(a){if(!e(a))throw new TypeError("target must be an object");var b,d,j,k,l,m,n,o=g(a);for(b=1;b<arguments.length;++b){if(d=g(arguments[b]),k=c(d),f&&Object.getOwnPropertySymbols)for(l=Object.getOwnPropertySymbols(d),j=0;j<l.length;++j)n=l[j],i(d,n)&&h(k,n);for(j=0;j<k.length;++j)n=k[j],m=d[n],i(d,n)&&(o[n]=m)}return o}},{"./hasSymbols":134,"function-bind":140,"object-keys":141}],136:[function(a,b){"use strict";var c=a("define-properties"),d=a("./implementation"),e=a("./polyfill"),f=a("./shim");c(d,{implementation:d,getPolyfill:e,shim:f}),b.exports=d},{"./implementation":135,"./polyfill":143,"./shim":144,"define-properties":137}],137:[function(a,b){"use strict";var c=a("object-keys"),d=a("foreach"),e="function"==typeof Symbol&&"symbol"==typeof Symbol(),f=Object.prototype.toString,g=function(a){return"function"==typeof a&&"[object Function]"===f.call(a)},h=function(){var a={};try{Object.defineProperty(a,"x",{enumerable:!1,value:a});for(var b in a)return!1;return a.x===a}catch(c){return!1}},i=Object.defineProperty&&h(),j=function(a,b,c,d){(!(b in a)||g(d)&&d())&&(i?Object.defineProperty(a,b,{configurable:!0,enumerable:!1,value:c,writable:!0}):a[b]=c)},k=function(a,b){var f=arguments.length>2?arguments[2]:{},g=c(b);e&&(g=g.concat(Object.getOwnPropertySymbols(b))),d(g,function(c){j(a,c,b[c],f[c])})};k.supportsDescriptors=!!i,b.exports=k},{foreach:138,"object-keys":141}],138:[function(a,b){var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString;b.exports=function(a,b,e){if("[object Function]"!==d.call(b))throw new TypeError("iterator must be a function");var f=a.length;if(f===+f)for(var g=0;f>g;g++)b.call(e,a[g],g,a);else for(var h in a)c.call(a,h)&&b.call(e,a[h],h,a)}},{}],139:[function(a,b){var c="Function.prototype.bind called on incompatible ",d=Array.prototype.slice,e=Object.prototype.toString,f="[object Function]";b.exports=function(a){var b=this;if("function"!=typeof b||e.call(b)!==f)throw new TypeError(c+b);for(var g,h=d.call(arguments,1),i=function(){if(this instanceof g){var c=b.apply(this,h.concat(d.call(arguments)));return Object(c)===c?c:this}return b.apply(a,h.concat(d.call(arguments)))},j=Math.max(0,b.length-h.length),k=[],l=0;j>l;l++)k.push("$"+l);if(g=Function("binder","return function ("+k.join(",")+"){ return binder.apply(this,arguments); }")(i),b.prototype){var m=function(){};m.prototype=b.prototype,g.prototype=new m,m.prototype=null}return g}},{}],140:[function(a,b){var c=a("./implementation");b.exports=Function.prototype.bind||c},{"./implementation":139}],141:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=Object.prototype.propertyIsEnumerable,h=!g.call({toString:null},"toString"),i=g.call(function(){},"prototype"),j=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],k=function(a){var b=a.constructor;return b&&b.prototype===a},l={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},m=function(){if("undefined"==typeof window)return!1;for(var a in window)try{if(!l["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{k(window[a])}catch(b){return!0}}catch(b){return!0}return!1}(),n=function(a){if("undefined"==typeof window||!m)return k(a);try{return k(a)}catch(b){return!1}},o=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),g=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!g)throw new TypeError("Object.keys called on a non-object");var m=i&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o<a.length;++o)l.push(String(o));if(g&&a.length>0)for(var p=0;p<a.length;++p)l.push(String(p));else for(var q in a)m&&"prototype"===q||!c.call(a,q)||l.push(String(q));if(h)for(var r=n(a),s=0;s<j.length;++s)r&&"constructor"===j[s]||!c.call(a,j[s])||l.push(j[s]);return l};o.shim=function(){if(Object.keys){var a=function(){return 2===(Object.keys(arguments)||"").length}(1,2);if(!a){var b=Object.keys;Object.keys=function(a){return b(f(a)?e.call(a):a)}}}else Object.keys=o;return Object.keys||o},b.exports=o},{"./isArguments":142}],142:[function(a,b){"use strict";var c=Object.prototype.toString;b.exports=function(a){var b=c.call(a),d="[object Arguments]"===b;return d||(d="[object Array]"!==b&&null!==a&&"object"==typeof a&&"number"==typeof a.length&&a.length>=0&&"[object Function]"===c.call(a.callee)),d}},{}],143:[function(a,b){"use strict";var c=a("./implementation"),d=function(){if(!Object.assign)return!1;for(var a="abcdefghijklmnopqrst",b=a.split(""),c={},d=0;d<b.length;++d)c[b[d]]=b[d];var e=Object.assign({},c),f="";
+
+for(var g in e)f+=g;return a!==f},e=function(){if(!Object.assign||!Object.preventExtensions)return!1;var a=Object.preventExtensions({1:2});try{Object.assign(a,"xy")}catch(b){return"y"===a[1]}};b.exports=function(){return Object.assign?d()?c:e()?c:Object.assign:c}},{"./implementation":135}],144:[function(a,b){"use strict";var c=a("define-properties"),d=a("./polyfill");b.exports=function(){var a=d();return c(Object,{assign:a},{assign:function(){return Object.assign!==a}}),a}},{"./polyfill":143,"define-properties":137}],145:[function(a,b){function c(a,b){var c,d=null;try{c=JSON.parse(a,b)}catch(e){d=e}return[d,c]}b.exports=c},{}],146:[function(a,b){function c(a){return a.replace(/\n\r?\s*/g,"")}b.exports=function(a){for(var b="",d=0;d<arguments.length;d++)b+=c(a[d])+(arguments[d+1]||"");return b}},{}],147:[function(a,b){"use strict";function c(a,b){for(var c=0;c<a.length;c++)b(a[c])}function d(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function e(a,b,c){var d=a;return k(b)?(c=b,"string"==typeof a&&(d={uri:a})):d=m(b,{uri:a}),d.callback=c,d}function f(a,b,c){return b=e(a,b,c),g(b)}function g(a){function b(){4===k.readyState&&g()}function c(){var a=void 0;if(k.response?a=k.response:"text"!==k.responseType&&k.responseType||(a=k.responseText||k.responseXML),u)try{a=JSON.parse(a)}catch(b){}return a}function e(a){clearTimeout(o),a instanceof Error||(a=new Error(""+(a||"Unknown XMLHttpRequest Error"))),a.statusCode=0,h(a,i)}function g(){if(!n){var b;clearTimeout(o),b=a.useXDR&&void 0===k.status?200:1223===k.status?204:k.status;var d=i,e=null;0!==b?(d={body:c(),statusCode:b,method:q,headers:{},url:p,rawRequest:k},k.getAllResponseHeaders&&(d.headers=l(k.getAllResponseHeaders()))):e=new Error("Internal XMLHttpRequest Error"),h(e,d,d.body)}}var h=a.callback;if("undefined"==typeof h)throw new Error("callback argument missing");h=j(h);var i={body:void 0,headers:{},statusCode:0,method:q,url:p,rawRequest:k},k=a.xhr||null;k||(k=a.cors||a.useXDR?new f.XDomainRequest:new f.XMLHttpRequest);var m,n,o,p=k.url=a.uri||a.url,q=k.method=a.method||"GET",r=a.body||a.data||null,s=k.headers=a.headers||{},t=!!a.sync,u=!1;if("json"in a&&(u=!0,s.accept||s.Accept||(s.Accept="application/json"),"GET"!==q&&"HEAD"!==q&&(s["content-type"]||s["Content-Type"]||(s["Content-Type"]="application/json"),r=JSON.stringify(a.json))),k.onreadystatechange=b,k.onload=g,k.onerror=e,k.onprogress=function(){},k.ontimeout=e,k.open(q,p,!t,a.username,a.password),t||(k.withCredentials=!!a.withCredentials),!t&&a.timeout>0&&(o=setTimeout(function(){n=!0,k.abort("timeout");var a=new Error("XMLHttpRequest timeout");a.code="ETIMEDOUT",e(a)},a.timeout)),k.setRequestHeader)for(m in s)s.hasOwnProperty(m)&&k.setRequestHeader(m,s[m]);else if(a.headers&&!d(a.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in a&&(k.responseType=a.responseType),"beforeSend"in a&&"function"==typeof a.beforeSend&&a.beforeSend(k),k.send(r),k}function h(){}var i=a("global/window"),j=a("once"),k=a("is-function"),l=a("parse-headers"),m=a("xtend");b.exports=f,f.XMLHttpRequest=i.XMLHttpRequest||h,f.XDomainRequest="withCredentials"in new f.XMLHttpRequest?f.XMLHttpRequest:i.XDomainRequest,c(["get","put","post","patch","head","delete"],function(a){f["delete"===a?"del":a]=function(b,c,d){return c=e(b,c,d),c.method=a.toUpperCase(),g(c)}})},{"global/window":93,"is-function":148,once:149,"parse-headers":152,xtend:153}],148:[function(a,b){function c(a){var b=d.call(a);return"[object Function]"===b||"function"==typeof a&&"[object RegExp]"!==b||"undefined"!=typeof window&&(a===window.setTimeout||a===window.alert||a===window.confirm||a===window.prompt)}b.exports=c;var d=Object.prototype.toString},{}],149:[function(a,b){function c(a){var b=!1;return function(){return b?void 0:(b=!0,a.apply(this,arguments))}}b.exports=c,c.proto=c(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return c(this)},configurable:!0})})},{}],150:[function(a,b){function c(a,b,c){if(!g(b))throw new TypeError("iterator must be a function");arguments.length<3&&(c=this),"[object Array]"===h.call(a)?d(a,b,c):"string"==typeof a?e(a,b,c):f(a,b,c)}function d(a,b,c){for(var d=0,e=a.length;e>d;d++)i.call(a,d)&&b.call(c,a[d],d,a)}function e(a,b,c){for(var d=0,e=a.length;e>d;d++)b.call(c,a.charAt(d),d,a)}function f(a,b,c){for(var d in a)i.call(a,d)&&b.call(c,a[d],d,a)}var g=a("is-function");b.exports=c;var h=Object.prototype.toString,i=Object.prototype.hasOwnProperty},{"is-function":148}],151:[function(a,b,c){function d(a){return a.replace(/^\s*|\s*$/g,"")}c=b.exports=d,c.left=function(a){return a.replace(/^\s*/,"")},c.right=function(a){return a.replace(/\s*$/,"")}},{}],152:[function(a,b){var c=a("trim"),d=a("for-each"),e=function(a){return"[object Array]"===Object.prototype.toString.call(a)};b.exports=function(a){if(!a)return{};var b={};return d(c(a).split("\n"),function(a){var d=a.indexOf(":"),f=c(a.slice(0,d)).toLowerCase(),g=c(a.slice(d+1));"undefined"==typeof b[f]?b[f]=g:e(b[f])?b[f].push(g):b[f]=[b[f],g]}),b}},{"for-each":150,trim:151}],153:[function(a,b){function c(){for(var a={},b=0;b<arguments.length;b++){var c=arguments[b];for(var e in c)d.call(c,e)&&(a[e]=c[e])}return a}b.exports=c;var d=Object.prototype.hasOwnProperty},{}]},{},[91])(91)});
\ No newline at end of file
diff --git a/static/videojs/font/VideoJS.eot b/static/videojs/font/VideoJS.eot
new file mode 100644
index 0000000000000000000000000000000000000000..cbdd2a20c0b0c6c78b226a30c034f4fa2d40d0a4
GIT binary patch
literal 5900
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
U%-2mxElw`V1iOe8ECLR20E4^~TL1t6

literal 0
HcmV?d00001

diff --git a/static/videojs/font/VideoJS.svg b/static/videojs/font/VideoJS.svg
new file mode 100644
index 0000000..49af73a
--- /dev/null
+++ b/static/videojs/font/VideoJS.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" standalone="no"?> 
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs>
+  <font id="VideoJS" horiz-adv-x="1792">
+    <font-face font-family="VideoJS"
+      units-per-em="1792" ascent="1792"
+      descent="0" />
+    <missing-glyph horiz-adv-x="0" />
+    <glyph glyph-name="play"
+      unicode="&#xF101;"
+      horiz-adv-x="1792" d=" M597.3333333333334 1418.6666666666665V373.3333333333333L1418.6666666666667 896z" />
+    <glyph glyph-name="play-circle"
+      unicode="&#xF102;"
+      horiz-adv-x="1792" d=" M746.6666666666667 560L1194.6666666666667 896L746.6666666666667 1232V560zM896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665z" />
+    <glyph glyph-name="pause"
+      unicode="&#xF103;"
+      horiz-adv-x="1792" d=" M448 373.3333333333333H746.6666666666667V1418.6666666666665H448V373.3333333333333zM1045.3333333333335 1418.6666666666665V373.3333333333333H1344V1418.6666666666665H1045.3333333333335z" />
+    <glyph glyph-name="volume-mute"
+      unicode="&#xF104;"
+      horiz-adv-x="1792" d=" M1232 896C1232 1027.7866666666666 1155.8400000000001 1141.6533333333332 1045.3333333333335 1196.5333333333333V1031.52L1228.6399999999999 848.2133333333334C1230.88 863.8933333333334 1232 879.9466666666667 1232 896.0000000000001zM1418.6666666666667 896C1418.6666666666667 825.8133333333333 1403.3600000000001 759.7333333333333 1378.3466666666668 698.8799999999999L1491.466666666667 585.7599999999998C1540 678.72 1568 783.9999999999999 1568 896C1568 1215.5733333333333 1344.3733333333334 1482.88 1045.3333333333335 1550.8266666666666V1396.6399999999999C1261.1200000000001 1332.4266666666667 1418.6666666666667 1132.6933333333332 1418.6666666666667 896zM319.2000000000001 1568L224 1472.8L576.8 1120H224V672H522.6666666666667L896 298.6666666666665V800.8L1213.7066666666667 483.0933333333332C1163.68 444.6399999999999 1107.3066666666666 413.6533333333332 1045.3333333333335 394.9866666666665V240.7999999999998C1148 264.32 1241.7066666666667 311.3599999999997 1320.48 375.9466666666663L1472.8000000000002 224L1568 319.1999999999998L896 991.1999999999998L319.2000000000001 1568zM896 1493.3333333333333L739.9466666666667 1337.28L896 1181.2266666666667V1493.3333333333333z" />
+    <glyph glyph-name="volume-low"
+      unicode="&#xF105;"
+      horiz-adv-x="1792" d=" M522.6666666666667 1120V672H821.3333333333334L1194.6666666666667 298.6666666666665V1493.3333333333333L821.3333333333334 1120H522.6666666666667z" />
+    <glyph glyph-name="volume-mid"
+      unicode="&#xF106;"
+      horiz-adv-x="1792" d=" M1381.3333333333335 896C1381.3333333333335 1027.7866666666666 1305.1733333333334 1141.6533333333332 1194.6666666666667 1196.5333333333333V595.0933333333332C1305.1733333333334 650.3466666666666 1381.3333333333335 764.2133333333331 1381.3333333333335 896zM373.3333333333334 1120V672H672L1045.3333333333335 298.6666666666665V1493.3333333333333L672 1120H373.3333333333334z" />
+    <glyph glyph-name="volume-high"
+      unicode="&#xF107;"
+      horiz-adv-x="1792" d=" M224 1120V672H522.6666666666667L896 298.6666666666665V1493.3333333333333L522.6666666666667 1120H224zM1232 896C1232 1027.7866666666666 1155.8400000000001 1141.6533333333332 1045.3333333333335 1196.5333333333333V595.0933333333332C1155.8400000000001 650.3466666666666 1232 764.2133333333331 1232 896zM1045.3333333333335 1550.8266666666666V1396.6399999999999C1261.1200000000001 1332.4266666666667 1418.6666666666667 1132.6933333333332 1418.6666666666667 896S1261.1200000000001 459.5733333333333 1045.3333333333335 395.3600000000002V241.1733333333332C1344.3733333333334 309.1199999999999 1568 576.0533333333333 1568 896S1344.3733333333334 1482.88 1045.3333333333335 1550.8266666666666z" />
+    <glyph glyph-name="fullscreen-enter"
+      unicode="&#xF108;"
+      horiz-adv-x="1792" d=" M522.6666666666667 746.6666666666665H373.3333333333334V373.3333333333333H746.6666666666667V522.6666666666665H522.6666666666667V746.6666666666665zM373.3333333333334 1045.3333333333333H522.6666666666667V1269.3333333333333H746.6666666666667V1418.6666666666665H373.3333333333334V1045.3333333333333zM1269.3333333333335 522.6666666666665H1045.3333333333335V373.3333333333333H1418.6666666666667V746.6666666666665H1269.3333333333335V522.6666666666665zM1045.3333333333335 1418.6666666666665V1269.3333333333333H1269.3333333333335V1045.3333333333333H1418.6666666666667V1418.6666666666665H1045.3333333333335z" />
+    <glyph glyph-name="fullscreen-exit"
+      unicode="&#xF109;"
+      horiz-adv-x="1792" d=" M373.3333333333334 597.3333333333333H597.3333333333334V373.3333333333333H746.6666666666667V746.6666666666665H373.3333333333334V597.3333333333333zM597.3333333333334 1194.6666666666665H373.3333333333334V1045.3333333333333H746.6666666666667V1418.6666666666665H597.3333333333334V1194.6666666666665zM1045.3333333333335 373.3333333333333H1194.6666666666667V597.3333333333333H1418.6666666666667V746.6666666666665H1045.3333333333335V373.3333333333333zM1194.6666666666667 1194.6666666666665V1418.6666666666665H1045.3333333333335V1045.3333333333333H1418.6666666666667V1194.6666666666665H1194.6666666666667z" />
+    <glyph glyph-name="square"
+      unicode="&#xF10A;"
+      horiz-adv-x="1792" d=" M1344 1493.3333333333333H448C365.4933333333334 1493.3333333333333 298.6666666666667 1426.5066666666667 298.6666666666667 1344V448C298.6666666666667 365.4933333333331 365.4933333333334 298.6666666666665 448 298.6666666666665H1344C1426.506666666667 298.6666666666665 1493.3333333333335 365.4933333333331 1493.3333333333335 448V1344C1493.3333333333335 1426.5066666666667 1426.506666666667 1493.3333333333333 1344 1493.3333333333333zM1344 448H448V1344H1344V448z" />
+    <glyph glyph-name="spinner"
+      unicode="&#xF10B;"
+      horiz-adv-x="1792" d=" M701.8666666666668 1008L1057.6533333333334 1624.3733333333334C1005.7600000000002 1635.9466666666667 951.6266666666666 1642.6666666666667 896 1642.6666666666667C716.8000000000001 1642.6666666666667 552.9066666666668 1579.5733333333333 424.1066666666667 1474.2933333333333L697.76 1000.5333333333334L701.8666666666666 1008zM1608.32 1120C1539.6266666666666 1338.4 1373.1200000000001 1512.7466666666667 1160.6933333333332 1593.3866666666668L887.4133333333334 1120H1608.32zM1627.7333333333336 1045.3333333333333H1068.48L1090.1333333333334 1008L1445.92 392C1567.6266666666668 524.9066666666668 1642.6666666666667 701.4933333333333 1642.6666666666667 896C1642.6666666666667 947.1466666666666 1637.44 997.1733333333332 1627.7333333333336 1045.3333333333333zM637.2800000000001 896L346.08 1400C224.3733333333333 1267.0933333333332 149.3333333333334 1090.5066666666667 149.3333333333334 896C149.3333333333334 844.8533333333332 154.56 794.8266666666666 164.2666666666667 746.6666666666665H723.5200000000001L637.2800000000002 896zM183.68 672C252.3733333333334 453.5999999999999 418.88 279.2533333333334 631.3066666666667 198.6133333333332L904.5866666666668 672H183.68zM1025.1733333333334 672L733.9733333333334 167.6266666666666C786.24 156.0533333333333 840.3733333333334 149.3333333333333 896 149.3333333333333C1075.2 149.3333333333333 1239.0933333333332 212.4266666666665 1367.8933333333334 317.7066666666665L1094.24 791.4666666666666L1025.1733333333334 672z" />
+    <glyph glyph-name="subtitles"
+      unicode="&#xF10C;"
+      horiz-adv-x="1792" d=" M1493.3333333333335 1493.3333333333333H298.6666666666667C216.16 1493.3333333333333 149.3333333333334 1426.5066666666667 149.3333333333334 1344V448C149.3333333333334 365.4933333333331 216.16 298.6666666666665 298.6666666666667 298.6666666666665H1493.3333333333335C1575.8400000000001 298.6666666666665 1642.6666666666667 365.4933333333331 1642.6666666666667 448V1344C1642.6666666666667 1426.5066666666667 1575.8400000000001 1493.3333333333333 1493.3333333333335 1493.3333333333333zM298.6666666666667 896H597.3333333333334V746.6666666666665H298.6666666666667V896zM1045.3333333333335 448H298.6666666666667V597.3333333333333H1045.3333333333335V448zM1493.3333333333335 448H1194.6666666666667V597.3333333333333H1493.3333333333335V448zM1493.3333333333335 746.6666666666665H746.6666666666667V896H1493.3333333333335V746.6666666666665z" />
+    <glyph glyph-name="captions"
+      unicode="&#xF10D;"
+      horiz-adv-x="1792" d=" M1418.6666666666667 1493.3333333333333H373.3333333333334C290.8266666666667 1493.3333333333333 224 1426.5066666666667 224 1344V448C224 365.4933333333331 290.8266666666667 298.6666666666665 373.3333333333334 298.6666666666665H1418.6666666666667C1501.1733333333334 298.6666666666665 1568 365.4933333333331 1568 448V1344C1568 1426.5066666666667 1501.1733333333334 1493.3333333333333 1418.6666666666667 1493.3333333333333zM821.3333333333334 970.6666666666666H709.3333333333334V1008H560V783.9999999999999H709.3333333333334V821.3333333333333H821.3333333333334V746.6666666666665C821.3333333333334 705.5999999999999 788.1066666666667 672 746.6666666666667 672H522.6666666666667C481.2266666666667 672 448 705.5999999999999 448 746.6666666666665V1045.3333333333333C448 1086.4 481.2266666666667 1120 522.6666666666667 1120H746.6666666666667C788.1066666666667 1120 821.3333333333334 1086.4 821.3333333333334 1045.3333333333333V970.6666666666666zM1344 970.6666666666666H1232V1008H1082.6666666666667V783.9999999999999H1232V821.3333333333333H1344V746.6666666666665C1344 705.5999999999999 1310.7733333333333 672 1269.3333333333335 672H1045.3333333333335C1003.8933333333334 672 970.6666666666669 705.5999999999999 970.6666666666669 746.6666666666665V1045.3333333333333C970.6666666666669 1086.4 1003.8933333333334 1120 1045.3333333333335 1120H1269.3333333333335C1310.7733333333333 1120 1344 1086.4 1344 1045.3333333333333V970.6666666666666z" />
+    <glyph glyph-name="chapters"
+      unicode="&#xF10E;"
+      horiz-adv-x="1792" d=" M224 821.3333333333333H373.3333333333334V970.6666666666666H224V821.3333333333333zM224 522.6666666666665H373.3333333333334V672H224V522.6666666666665zM224 1120H373.3333333333334V1269.3333333333333H224V1120zM522.6666666666667 821.3333333333333H1568V970.6666666666666H522.6666666666667V821.3333333333333zM522.6666666666667 522.6666666666665H1568V672H522.6666666666667V522.6666666666665zM522.6666666666667 1269.3333333333333V1120H1568V1269.3333333333333H522.6666666666667z" />
+    <glyph glyph-name="share"
+      unicode="&#xF10F;"
+      horiz-adv-x="1792" d=" M1344 590.9866666666665C1287.2533333333333 590.9866666666665 1236.1066666666668 568.9599999999998 1197.2800000000002 533.4933333333331L665.2800000000001 843.7333333333333C669.3866666666667 860.5333333333333 672 878.08 672 896S669.3866666666667 931.4666666666666 665.2800000000001 948.2666666666667L1191.68 1255.52C1231.6266666666668 1218.1866666666665 1285.0133333333335 1195.04 1344 1195.04C1467.5733333333335 1195.04 1568 1295.4666666666665 1568 1419.04S1467.5733333333335 1643.04 1344 1643.04S1120 1542.6133333333332 1120 1419.04C1120 1401.12 1122.6133333333335 1383.5733333333333 1126.72 1366.773333333333L600.3199999999999 1059.5199999999998C560.3733333333333 1096.853333333333 506.9866666666666 1119.9999999999998 448 1119.9999999999998C324.4266666666666 1119.9999999999998 224 1019.5733333333332 224 895.9999999999998S324.4266666666666 671.9999999999998 448 671.9999999999998C506.9866666666666 671.9999999999998 560.3733333333333 695.1466666666665 600.3199999999999 732.4799999999998L1132.32 422.2399999999998C1128.5866666666666 406.5599999999997 1126.3466666666666 390.133333333333 1126.3466666666666 373.3333333333331C1126.3466666666666 253.1199999999997 1223.7866666666669 155.6799999999996 1344 155.6799999999996S1561.6533333333334 253.1199999999997 1561.6533333333334 373.3333333333331S1464.2133333333334 590.9866666666662 1344 590.9866666666662z" />
+    <glyph glyph-name="cog"
+      unicode="&#xF110;"
+      horiz-adv-x="1792" d=" M1450.7733333333333 823.1999999999999C1453.76 847.0933333333334 1456 871.3599999999999 1456 896S1453.76 944.9066666666666 1450.7733333333333 968.8L1608.6933333333336 1092.3733333333332C1622.8800000000003 1103.5733333333333 1626.986666666667 1123.7333333333331 1617.6533333333336 1140.1599999999999L1468.3200000000004 1398.8799999999999C1458.986666666667 1414.9333333333334 1439.5733333333335 1421.6533333333332 1422.7733333333338 1414.9333333333334L1236.8533333333337 1339.8933333333332C1198.4000000000003 1369.3866666666668 1156.2133333333338 1394.3999999999999 1110.6666666666672 1413.44L1082.6666666666667 1611.3066666666666C1079.3066666666668 1628.8533333333332 1064 1642.6666666666667 1045.3333333333335 1642.6666666666667H746.6666666666667C728 1642.6666666666667 712.6933333333334 1628.8533333333332 709.7066666666668 1611.3066666666666L681.7066666666668 1413.44C636.1600000000002 1394.4 593.9733333333335 1369.76 555.5200000000001 1339.8933333333332L369.6 1414.9333333333334C352.8000000000001 1421.28 333.3866666666667 1414.9333333333334 324.0533333333334 1398.88L174.72 1140.1599999999999C165.3866666666667 1124.1066666666666 169.4933333333334 1103.9466666666667 183.68 1092.3733333333332L341.2266666666667 968.8C338.2400000000001 944.9066666666666 336 920.64 336 896S338.2400000000001 847.0933333333334 341.2266666666667 823.1999999999999L183.68 699.6266666666668C169.4933333333334 688.4266666666667 165.3866666666667 668.2666666666667 174.72 651.8399999999999L324.0533333333334 393.1199999999999C333.3866666666667 377.0666666666666 352.8 370.3466666666666 369.6 377.0666666666666L555.5200000000001 452.1066666666666C593.9733333333334 422.6133333333333 636.16 397.5999999999999 681.7066666666668 378.56L709.7066666666668 180.6933333333334C712.6933333333334 163.1466666666668 728 149.3333333333333 746.6666666666667 149.3333333333333H1045.3333333333335C1064 149.3333333333333 1079.3066666666668 163.1466666666665 1082.2933333333333 180.6933333333334L1110.2933333333333 378.56C1155.84 397.5999999999999 1198.0266666666666 422.24 1236.48 452.1066666666666L1422.3999999999999 377.0666666666666C1439.2 370.7199999999998 1458.6133333333332 377.0666666666666 1467.9466666666665 393.1199999999999L1617.2799999999997 651.8399999999999C1626.6133333333332 667.8933333333332 1622.5066666666664 688.0533333333333 1608.3199999999997 699.6266666666668L1450.773333333333 823.1999999999999zM896 634.6666666666665C751.52 634.6666666666665 634.6666666666667 751.52 634.6666666666667 896S751.52 1157.3333333333333 896 1157.3333333333333S1157.3333333333335 1040.48 1157.3333333333335 896S1040.48 634.6666666666665 896 634.6666666666665z" />
+    <glyph glyph-name="circle"
+      unicode="&#xF111;"
+      horiz-adv-x="1792" d=" M149.3333333333334 896C149.3333333333334 483.6273867930074 483.6273867930075 149.3333333333333 896 149.3333333333333C1308.3726132069926 149.3333333333333 1642.6666666666667 483.6273867930074 1642.6666666666667 896C1642.6666666666667 1308.3726132069926 1308.3726132069926 1642.6666666666667 896 1642.6666666666667C483.6273867930075 1642.6666666666667 149.3333333333334 1308.3726132069926 149.3333333333334 896z" />
+    <glyph glyph-name="circle-outline"
+      unicode="&#xF112;"
+      horiz-adv-x="1792" d=" M896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665z" />
+    <glyph glyph-name="circle-inner-circle"
+      unicode="&#xF113;"
+      horiz-adv-x="1792" d=" M896 1642.6666666666667C484.2133333333334 1642.6666666666667 149.3333333333334 1307.7866666666666 149.3333333333334 896S484.2133333333334 149.3333333333333 896 149.3333333333333S1642.6666666666667 484.2133333333331 1642.6666666666667 896S1307.7866666666669 1642.6666666666667 896 1642.6666666666667zM896 298.6666666666665C566.72 298.6666666666665 298.6666666666667 566.7199999999998 298.6666666666667 896S566.72 1493.3333333333333 896 1493.3333333333333S1493.3333333333335 1225.28 1493.3333333333335 896S1225.2800000000002 298.6666666666665 896 298.6666666666665zM1120 896C1120 772.4266666666666 1019.5733333333334 672 896 672S672 772.4266666666666 672 896S772.4266666666667 1120 896 1120S1120 1019.5733333333332 1120 896z" />
+    <glyph glyph-name="hd"
+      unicode="&#xF114;"
+      horiz-adv-x="1792" d=" M1418.6666666666667 1568H373.3333333333334C290.4533333333333 1568 224 1500.8 224 1418.6666666666665V373.3333333333333C224 291.1999999999998 290.4533333333334 224 373.3333333333334 224H1418.6666666666667C1500.8000000000002 224 1568 291.1999999999998 1568 373.3333333333333V1418.6666666666665C1568 1500.8 1500.8000000000002 1568 1418.6666666666667 1568zM821.3333333333334 672H709.3333333333334V821.3333333333333H560V672H448V1120H560V933.3333333333331H709.3333333333334V1120H821.3333333333334V672zM970.6666666666669 1120H1269.3333333333335C1310.4 1120 1344 1086.4 1344 1045.3333333333333V746.6666666666665C1344 705.5999999999999 1310.4 672 1269.3333333333335 672H970.6666666666669V1120zM1082.6666666666667 783.9999999999999H1232V1008H1082.6666666666667V783.9999999999999z" />
+    <glyph glyph-name="cancel"
+      unicode="&#xF115;"
+      horiz-adv-x="1792" d=" M896 1642.6666666666667C483.4666666666667 1642.6666666666667 149.3333333333334 1308.5333333333333 149.3333333333334 896S483.4666666666667 149.3333333333333 896 149.3333333333333S1642.6666666666667 483.4666666666667 1642.6666666666667 896S1308.5333333333333 1642.6666666666667 896 1642.6666666666667zM1269.3333333333335 628.3199999999999L1163.68 522.6666666666665L896 790.3466666666667L628.3199999999999 522.6666666666665L522.6666666666667 628.3199999999999L790.3466666666668 896L522.6666666666667 1163.68L628.3199999999999 1269.3333333333333L896 1001.6533333333332L1163.68 1269.3333333333333L1269.3333333333335 1163.68L1001.6533333333334 896L1269.3333333333335 628.3199999999999z" />
+    <glyph glyph-name="replay"
+      unicode="&#xF116;"
+      horiz-adv-x="1792" d=" M896 1418.6666666666665V1717.3333333333333L522.6666666666667 1344L896 970.6666666666666V1269.3333333333333C1143.52 1269.3333333333333 1344 1068.8533333333332 1344 821.3333333333333S1143.52 373.3333333333333 896 373.3333333333333S448 573.813333333333 448 821.3333333333333H298.6666666666667C298.6666666666667 491.3066666666664 565.9733333333334 224 896 224S1493.3333333333335 491.3066666666664 1493.3333333333335 821.3333333333333S1226.0266666666669 1418.6666666666665 896 1418.6666666666665z" />
+    <glyph glyph-name="facebook"
+      unicode="&#xF117;"
+      horiz-adv-x="1792" d=" M1343 1780V1516H1186Q1100 1516 1070 1480T1040 1372V1183H1333L1294 887H1040V128H734V887H479V1183H734V1401Q734 1587 838 1689.5T1115 1792Q1262 1792 1343 1780z" />
+    <glyph glyph-name="gplus"
+      unicode="&#xF118;"
+      horiz-adv-x="1792" d=" M799 996Q799 960 831 925.5T908.5 857.5T999 784T1076 680T1108 538Q1108 448 1060 365Q988 243 849 185.5T551 128Q419 128 304.5 169.5T133 307Q96 367 96 438Q96 519 140.5 588T259 703Q390 785 663 803Q631 845 615.5 877T600 950Q600 986 621 1035Q575 1031 553 1031Q405 1031 303.5 1127.5T202 1372Q202 1454 238 1531T337 1662Q414 1728 519.5 1760T737 1792H1155L1017 1704H886Q960 1641 998 1571T1036 1411Q1036 1339 1011.5 1281.5T952.5 1188.5T883 1123.5T823.5 1062T799 996zM653 1092Q691 1092 731 1108.5T797 1152Q850 1209 850 1311Q850 1369 833 1436T784.5 1565.5T700 1669T583 1710Q541 1710 500.5 1690.5T435 1638Q388 1579 388 1478Q388 1432 398 1380.5T429.5 1277.5T481.5 1185T556.5 1118T653 1092zM655 219Q713 219 766.5 232T865.5 271T938.5 344T966 453Q966 478 959 502T944.5 544T917.5 585.5T888 620.5T849.5 655T813 684T771.5 714T735 740Q719 742 687 742Q634 742 582 735T474.5 710T377.5 664T309 589.5T282 484Q282 414 317 360.5T408.5 277.5T527.5 233.5T655 219zM1465 1095H1678V987H1465V768H1360V987H1148V1095H1360V1312H1465V1095z" />
+    <glyph glyph-name="linkedin"
+      unicode="&#xF119;"
+      horiz-adv-x="1792" d=" M477 1167V176H147V1167H477zM498 1473Q499 1400 447.5 1351T312 1302H310Q228 1302 178 1351T128 1473Q128 1547 179.5 1595.5T314 1644T447 1595.5T498 1473zM1664 744V176H1335V706Q1335 811 1294.5 870.5T1168 930Q1105 930 1062.5 895.5T999 810Q988 780 988 729V176H659Q661 575 661 823T660 1119L659 1167H988V1023H986Q1006 1055 1027 1079T1083.5 1131T1170.5 1174.5T1285 1190Q1456 1190 1560 1076.5T1664 744z" />
+    <glyph glyph-name="twitter"
+      unicode="&#xF11A;"
+      horiz-adv-x="1792" d=" M1684 1384Q1617 1286 1522 1217Q1523 1203 1523 1175Q1523 1045 1485 915.5T1369.5 667T1185 456.5T927 310.5T604 256Q333 256 108 401Q143 397 186 397Q411 397 587 535Q482 537 399 599.5T285 759Q318 754 346 754Q389 754 431 765Q319 788 245.5 876.5T172 1082V1086Q240 1048 318 1045Q252 1089 213 1160T174 1314Q174 1402 218 1477Q339 1328 512.5 1238.5T884 1139Q876 1177 876 1213Q876 1347 970.5 1441.5T1199 1536Q1339 1536 1435 1434Q1544 1455 1640 1512Q1603 1397 1498 1334Q1591 1344 1684 1384z" />
+    <glyph glyph-name="tumblr"
+      unicode="&#xF11B;"
+      horiz-adv-x="1792" d=" M1328 463L1408 226Q1385 191 1297 160T1120 128Q1016 126 929.5 154T787 228T692 334T636.5 454T620 572V1116H452V1331Q524 1357 581 1400.5T672 1490.5T730 1592.5T764 1691.5T779 1780Q780 1785 783.5 1788.5T791 1792H1035V1368H1368V1116H1034V598Q1034 568 1040.5 542T1063 489.5T1112.5 448T1194 434Q1272 436 1328 463z" />
+    <glyph glyph-name="pinterest"
+      unicode="&#xF11C;"
+      horiz-adv-x="1792" d=" M1664 896Q1664 687 1561 510.5T1281.5 231T896 128Q785 128 678 160Q737 253 756 324Q765 358 810 535Q830 496 883 467.5T997 439Q1118 439 1213 507.5T1360 696T1412 966Q1412 1080 1352.5 1180T1180 1343T925 1406Q820 1406 729 1377T574.5 1300T465.5 1189.5T398.5 1060T377 926Q377 822 417 743T534 632Q564 620 572 652Q574 659 580 683T588 713Q594 736 577 756Q526 817 526 907Q526 1058 630.5 1166.5T904 1275Q1055 1275 1139.5 1193T1224 980Q1224 810 1155.5 691T980 572Q919 572 882 615.5T859 720Q867 755 885.5 813.5T915.5 916.5T927 992Q927 1042 900 1075T823 1108Q761 1108 718 1051T675 909Q675 836 700 787L601 369Q584 299 588 192Q382 283 255 473T128 896Q128 1105 231 1281.5T510.5 1561T896 1664T1281.5 1561T1561 1281.5T1664 896z" />
+    <glyph glyph-name="audio-description"
+      unicode="&#xF11D;"
+      horiz-adv-x="1792" d=" M795.5138904615 457.270933L795.5138904615 1221.5248286325C971.84576475 1225.085121904 1107.39330415 1232.12360523 1207.223857 1161.5835220499998C1303.033991 1093.8857027 1377.7922305 962.20560625 1364.3373135 792.9476205000001C1350.102593 613.9029365000001 1219.6655764999998 463.4600215 1050.12389545 448.2843645000001C965.8259268 440.7398275000001 798.21890505 448.2843645000001 798.21890505 448.2843645000001C798.21890505 448.2843645000001 795.2791410655 453.016494 795.5138904615 457.270933M966.1564647 649.0863960000001C1076.16084135 644.6767075 1152.385591 707.3020429999999 1163.8910079999998 807.9351875C1179.2994744999999 942.71878505 1089.73043585 1030.3691748 960.74508635 1020.7227954L960.74508635 658.08043C960.6196169500002 652.9482330000001 962.7606933 650.3134680000001 966.1564647 649.0863960000001 M1343.2299685 457.3517725000002C1389.9059734 444.3690160000001 1404.0840274999998 496.0596970000001 1424.48294065 532.2791494999999C1469.0084255 611.2788500000001 1502.5101322 712.8584189999999 1503.0416912 828.9881705C1503.8147453000001 995.5680973 1438.8404296 1117.7973688000002 1378.4383305 1200.62456881045L1348.652139905 1200.62456881045C1346.6001063899998 1187.06858424 1356.44474056 1175.024791325 1362.18395859 1164.6588891000001C1408.2649952 1081.49431985 1450.96645015 966.7230041 1451.57490975 834.9817034999999C1452.27106325 683.8655425000002 1402.00636065 557.5072264999999 1343.2299685 457.3517725000002 M1488.0379675 457.3517725000002C1534.7139723999999 444.3690160000001 1548.8825828 496.0671625 1569.29093965 532.2791494999999C1613.8164245 611.2788500000001 1647.3113856500001 712.8584189999999 1647.8496902000002 828.9881705C1648.6227442999998 995.5680973 1583.6484286 1117.7973688000002 1523.2463295 1200.62456881045L1493.460138905 1200.62456881045C1491.40810539 1187.06858424 1501.250041305 1175.021805755 1506.9919575899999 1164.6588891000001C1553.0729942 1081.49431985 1595.7757984 966.7230041 1596.3829087499998 834.9817034999999C1597.07906225 683.8655425000002 1546.8143596500001 557.5072264999999 1488.0379675 457.3517725000002 M1631.9130380000001 457.3517725000002C1678.5890429 444.3690160000001 1692.7576533 496.0671625 1713.1660101500001 532.2791494999999C1757.691495 611.2788500000001 1791.1864561500001 712.8584189999999 1791.7247607000002 828.9881705C1792.4978148 995.5680973 1727.5234991000002 1117.7973688000002 1667.1214 1200.62456881045L1637.3352094050001 1200.62456881045C1635.28317589 1187.06858424 1645.1251118050002 1175.02329854 1650.86702809 1164.6588891000001C1696.9480647 1081.49431985 1739.64951965 966.7230041 1740.25797925 834.9817034999999C1740.95413275 683.8655425000002 1690.6894301500001 557.5072264999999 1631.9130380000001 457.3517725000002 M15.66796875 451.481947L254.03034755 451.481947L319.0356932 551.1747990000001L543.6261075 551.6487970000001C543.6261075 551.6487970000001 543.8541115 483.7032095 543.8541115 451.481947L714.4993835 451.481947L714.4993835 1230.9210795L508.643051 1230.9210795C488.8579955 1197.5411595 15.66796875 451.481947 15.66796875 451.481947L15.66796875 451.481947zM550.0048155000001 959.9708615L550.0048155000001 710.916297L408.4199 711.8642895L550.0048155000001 959.9708615L550.0048155000001 959.9708615z" />
+    <glyph glyph-name="audio"
+      unicode="&#xF11E;"
+      horiz-adv-x="1792" d=" M896 1717.3333333333333C524.9066666666668 1717.3333333333333 224 1416.4266666666667 224 1045.3333333333333V522.6666666666665C224 399.0933333333333 324.4266666666667 298.6666666666665 448 298.6666666666665H672V896H373.3333333333334V1045.3333333333333C373.3333333333334 1333.92 607.4133333333334 1568 896 1568S1418.6666666666667 1333.92 1418.6666666666667 1045.3333333333333V896H1120V298.6666666666665H1344C1467.5733333333335 298.6666666666665 1568 399.0933333333333 1568 522.6666666666665V1045.3333333333333C1568 1416.4266666666667 1267.0933333333332 1717.3333333333333 896 1717.3333333333333z" />
+  </font>
+</defs>
+</svg>
diff --git a/static/videojs/font/VideoJS.ttf b/static/videojs/font/VideoJS.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..e23d02a49df665819a9546b58e5bcf8ba2717532
GIT binary patch
literal 5736
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
IBH#cA0OlzKIRF3v

literal 0
HcmV?d00001

diff --git a/static/videojs/font/VideoJS.woff b/static/videojs/font/VideoJS.woff
new file mode 100644
index 0000000000000000000000000000000000000000..dc9d850472d8c707d00c01df7af4d624664e27db
GIT binary patch
literal 3704
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
F3;-&9xVZoT

literal 0
HcmV?d00001

diff --git a/static/videojs/ie8/videojs-ie8.js b/static/videojs/ie8/videojs-ie8.js
new file mode 100644
index 0000000..8a660b9
--- /dev/null
+++ b/static/videojs/ie8/videojs-ie8.js
@@ -0,0 +1,2600 @@
+/**
+ * HTML5 Element Shim for IE8
+ *
+ * **THIS CODE MUST BE LOADED IN THE <HEAD> OF THE DOCUMENT**
+ *
+ * Video.js uses the video tag as an embed code, even in IE8 which
+ * doesn't have support for HTML5 video. The following code is needed
+ * to make it possible to use the video tag. Otherwise IE8 ignores everything
+ * inside the video tag.
+ */
+if (typeof window.HTMLVideoElement === 'undefined') {
+  document.createElement('video');
+  document.createElement('audio');
+  document.createElement('track');
+}
+
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js
+(function (root, factory) {
+    'use strict';
+
+    /* global define, exports, module */
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(factory);
+    } else if (typeof exports === 'object') {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like enviroments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else {
+        // Browser globals (root is window)
+        root.returnExports = factory();
+    }
+}(this, function () {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/
+ */
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally. This also holds a reference to known-good
+// functions.
+var $Array = Array;
+var ArrayPrototype = $Array.prototype;
+var $Object = Object;
+var ObjectPrototype = $Object.prototype;
+var FunctionPrototype = Function.prototype;
+var $String = String;
+var StringPrototype = $String.prototype;
+var $Number = Number;
+var NumberPrototype = $Number.prototype;
+var array_slice = ArrayPrototype.slice;
+var array_splice = ArrayPrototype.splice;
+var array_push = ArrayPrototype.push;
+var array_unshift = ArrayPrototype.unshift;
+var array_concat = ArrayPrototype.concat;
+var call = FunctionPrototype.call;
+var apply = FunctionPrototype.apply;
+var max = Math.max;
+var min = Math.min;
+
+// Having a toString local variable name breaks in Opera so use to_string.
+var to_string = ObjectPrototype.toString;
+
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, tryFunctionObject = function tryFunctionObject(value) { try { fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]'; isCallable = function isCallable(value) { if (typeof value !== 'function') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };
+var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+
+/* inlined from http://npmjs.com/define-properties */
+var supportsDescriptors = $Object.defineProperty && (function () {
+    try {
+        var obj = {};
+        $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+        for (var _ in obj) { return false; }
+        return obj.x === obj;
+    } catch (e) { /* this is ES3 */
+        return false;
+    }
+}());
+var defineProperties = (function (has) {
+  // Define configurable, writable, and non-enumerable props
+  // if they don't exist.
+  var defineProperty;
+  if (supportsDescriptors) {
+      defineProperty = function (object, name, method, forceAssign) {
+          if (!forceAssign && (name in object)) { return; }
+          $Object.defineProperty(object, name, {
+              configurable: true,
+              enumerable: false,
+              writable: true,
+              value: method
+          });
+      };
+  } else {
+      defineProperty = function (object, name, method, forceAssign) {
+          if (!forceAssign && (name in object)) { return; }
+          object[name] = method;
+      };
+  }
+  return function defineProperties(object, map, forceAssign) {
+      for (var name in map) {
+          if (has.call(map, name)) {
+            defineProperty(object, name, map[name], forceAssign);
+          }
+      }
+  };
+}(ObjectPrototype.hasOwnProperty));
+
+//
+// Util
+// ======
+//
+
+/* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+var isPrimitive = function isPrimitive(input) {
+    var type = typeof input;
+    return input === null || (type !== 'object' && type !== 'function');
+};
+
+var isActualNaN = $Number.isNaN || function (x) { return x !== x; };
+
+var ES = {
+    // ES5 9.4
+    // http://es5.github.com/#x9.4
+    // http://jsperf.com/to-integer
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+    ToInteger: function ToInteger(num) {
+        var n = +num;
+        if (isActualNaN(n)) {
+            n = 0;
+        } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+            n = (n > 0 || -1) * Math.floor(Math.abs(n));
+        }
+        return n;
+    },
+
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+    ToPrimitive: function ToPrimitive(input) {
+        var val, valueOf, toStr;
+        if (isPrimitive(input)) {
+            return input;
+        }
+        valueOf = input.valueOf;
+        if (isCallable(valueOf)) {
+            val = valueOf.call(input);
+            if (isPrimitive(val)) {
+                return val;
+            }
+        }
+        toStr = input.toString;
+        if (isCallable(toStr)) {
+            val = toStr.call(input);
+            if (isPrimitive(val)) {
+                return val;
+            }
+        }
+        throw new TypeError();
+    },
+
+    // ES5 9.9
+    // http://es5.github.com/#x9.9
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+    ToObject: function (o) {
+        if (o == null) { // this matches both null and undefined
+            throw new TypeError("can't convert " + o + ' to object');
+        }
+        return $Object(o);
+    },
+
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+    ToUint32: function ToUint32(x) {
+        return x >>> 0;
+    }
+};
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+var Empty = function Empty() {};
+
+defineProperties(FunctionPrototype, {
+    bind: function bind(that) { // .length is 1
+        // 1. Let Target be the this value.
+        var target = this;
+        // 2. If IsCallable(Target) is false, throw a TypeError exception.
+        if (!isCallable(target)) {
+            throw new TypeError('Function.prototype.bind called on incompatible ' + target);
+        }
+        // 3. Let A be a new (possibly empty) internal list of all of the
+        //   argument values provided after thisArg (arg1, arg2 etc), in order.
+        // XXX slicedArgs will stand in for "A" if used
+        var args = array_slice.call(arguments, 1); // for normal call
+        // 4. Let F be a new native ECMAScript object.
+        // 11. Set the [[Prototype]] internal property of F to the standard
+        //   built-in Function prototype object as specified in 15.3.3.1.
+        // 12. Set the [[Call]] internal property of F as described in
+        //   15.3.4.5.1.
+        // 13. Set the [[Construct]] internal property of F as described in
+        //   15.3.4.5.2.
+        // 14. Set the [[HasInstance]] internal property of F as described in
+        //   15.3.4.5.3.
+        var bound;
+        var binder = function () {
+
+            if (this instanceof bound) {
+                // 15.3.4.5.2 [[Construct]]
+                // When the [[Construct]] internal method of a function object,
+                // F that was created using the bind function is called with a
+                // list of arguments ExtraArgs, the following steps are taken:
+                // 1. Let target be the value of F's [[TargetFunction]]
+                //   internal property.
+                // 2. If target has no [[Construct]] internal method, a
+                //   TypeError exception is thrown.
+                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+                //   property.
+                // 4. Let args be a new list containing the same values as the
+                //   list boundArgs in the same order followed by the same
+                //   values as the list ExtraArgs in the same order.
+                // 5. Return the result of calling the [[Construct]] internal
+                //   method of target providing args as the arguments.
+
+                var result = target.apply(
+                    this,
+                    array_concat.call(args, array_slice.call(arguments))
+                );
+                if ($Object(result) === result) {
+                    return result;
+                }
+                return this;
+
+            } else {
+                // 15.3.4.5.1 [[Call]]
+                // When the [[Call]] internal method of a function object, F,
+                // which was created using the bind function is called with a
+                // this value and a list of arguments ExtraArgs, the following
+                // steps are taken:
+                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+                //   property.
+                // 2. Let boundThis be the value of F's [[BoundThis]] internal
+                //   property.
+                // 3. Let target be the value of F's [[TargetFunction]] internal
+                //   property.
+                // 4. Let args be a new list containing the same values as the
+                //   list boundArgs in the same order followed by the same
+                //   values as the list ExtraArgs in the same order.
+                // 5. Return the result of calling the [[Call]] internal method
+                //   of target providing boundThis as the this value and
+                //   providing args as the arguments.
+
+                // equiv: target.call(this, ...boundArgs, ...args)
+                return target.apply(
+                    that,
+                    array_concat.call(args, array_slice.call(arguments))
+                );
+
+            }
+
+        };
+
+        // 15. If the [[Class]] internal property of Target is "Function", then
+        //     a. Let L be the length property of Target minus the length of A.
+        //     b. Set the length own property of F to either 0 or L, whichever is
+        //       larger.
+        // 16. Else set the length own property of F to 0.
+
+        var boundLength = max(0, target.length - args.length);
+
+        // 17. Set the attributes of the length own property of F to the values
+        //   specified in 15.3.5.1.
+        var boundArgs = [];
+        for (var i = 0; i < boundLength; i++) {
+            array_push.call(boundArgs, '$' + i);
+        }
+
+        // XXX Build a dynamic function with desired amount of arguments is the only
+        // way to set the length property of a function.
+        // In environments where Content Security Policies enabled (Chrome extensions,
+        // for ex.) all use of eval or Function costructor throws an exception.
+        // However in all of these environments Function.prototype.bind exists
+        // and so this code will never be executed.
+        bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
+
+        if (target.prototype) {
+            Empty.prototype = target.prototype;
+            bound.prototype = new Empty();
+            // Clean up dangling references.
+            Empty.prototype = null;
+        }
+
+        // TODO
+        // 18. Set the [[Extensible]] internal property of F to true.
+
+        // TODO
+        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+        // 20. Call the [[DefineOwnProperty]] internal method of F with
+        //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+        //   false.
+        // 21. Call the [[DefineOwnProperty]] internal method of F with
+        //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+        //   and false.
+
+        // TODO
+        // NOTE Function objects created using Function.prototype.bind do not
+        // have a prototype property or the [[Code]], [[FormalParameters]], and
+        // [[Scope]] internal properties.
+        // XXX can't delete prototype in pure-js.
+
+        // 22. Return F.
+        return bound;
+    }
+});
+
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// use it in defining shortcuts.
+var owns = call.bind(ObjectPrototype.hasOwnProperty);
+var toStr = call.bind(ObjectPrototype.toString);
+var arraySlice = call.bind(array_slice);
+var arraySliceApply = apply.bind(array_slice);
+var strSlice = call.bind(StringPrototype.slice);
+var strSplit = call.bind(StringPrototype.split);
+var strIndexOf = call.bind(StringPrototype.indexOf);
+var pushCall = call.bind(array_push);
+var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);
+var arraySort = call.bind(ArrayPrototype.sort);
+
+//
+// Array
+// =====
+//
+
+var isArray = $Array.isArray || function isArray(obj) {
+    return toStr(obj) === '[object Array]';
+};
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.13
+// Return len+argCount.
+// [bugfix, ielt8]
+// IE < 8 bug: [].unshift(0) === undefined but should be "1"
+var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+defineProperties(ArrayPrototype, {
+    unshift: function () {
+        array_unshift.apply(this, arguments);
+        return this.length;
+    }
+}, hasUnshiftReturnValueBug);
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+defineProperties($Array, { isArray: isArray });
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function".  Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+
+// Check failure of by-index access of string characters (IE < 9)
+// and failure of `0 in boxedString` (Rhino)
+var boxedString = $Object('a');
+var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
+
+var properlyBoxesContext = function properlyBoxed(method) {
+    // Check node 0.6.21 bug where third parameter is not boxed
+    var properlyBoxesNonStrict = true;
+    var properlyBoxesStrict = true;
+    var threwException = false;
+    if (method) {
+        try {
+            method.call('foo', function (_, __, context) {
+                if (typeof context !== 'object') { properlyBoxesNonStrict = false; }
+            });
+
+            method.call([1], function () {
+                'use strict';
+
+                properlyBoxesStrict = typeof this === 'string';
+            }, 'x');
+        } catch (e) {
+            threwException = true;
+        }
+    }
+    return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
+};
+
+defineProperties(ArrayPrototype, {
+    forEach: function forEach(callbackfn/*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var i = -1;
+        var length = ES.ToUint32(self.length);
+        var T;
+        if (arguments.length > 1) {
+          T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.forEach callback must be a function');
+        }
+
+        while (++i < length) {
+            if (i in self) {
+                // Invoke the callback function with call, passing arguments:
+                // context, property value, property key, thisArg object
+                if (typeof T === 'undefined') {
+                    callbackfn(self[i], i, object);
+                } else {
+                    callbackfn.call(T, self[i], i, object);
+                }
+            }
+        }
+    }
+}, !properlyBoxesContext(ArrayPrototype.forEach));
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+defineProperties(ArrayPrototype, {
+    map: function map(callbackfn/*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var result = $Array(length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.map callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self) {
+                if (typeof T === 'undefined') {
+                    result[i] = callbackfn(self[i], i, object);
+                } else {
+                    result[i] = callbackfn.call(T, self[i], i, object);
+                }
+            }
+        }
+        return result;
+    }
+}, !properlyBoxesContext(ArrayPrototype.map));
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+defineProperties(ArrayPrototype, {
+    filter: function filter(callbackfn/*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var result = [];
+        var value;
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.filter callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self) {
+                value = self[i];
+                if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
+                    pushCall(result, value);
+                }
+            }
+        }
+        return result;
+    }
+}, !properlyBoxesContext(ArrayPrototype.filter));
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+defineProperties(ArrayPrototype, {
+    every: function every(callbackfn/*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.every callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+                return false;
+            }
+        }
+        return true;
+    }
+}, !properlyBoxesContext(ArrayPrototype.every));
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+defineProperties(ArrayPrototype, {
+    some: function some(callbackfn/*, thisArg */) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.some callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+                return true;
+            }
+        }
+        return false;
+    }
+}, !properlyBoxesContext(ArrayPrototype.some));
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+var reduceCoercesToObject = false;
+if (ArrayPrototype.reduce) {
+    reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+    reduce: function reduce(callbackfn/*, initialValue*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.reduce callback must be a function');
+        }
+
+        // no value to return if no initial value and an empty array
+        if (length === 0 && arguments.length === 1) {
+            throw new TypeError('reduce of empty array with no initial value');
+        }
+
+        var i = 0;
+        var result;
+        if (arguments.length >= 2) {
+            result = arguments[1];
+        } else {
+            do {
+                if (i in self) {
+                    result = self[i++];
+                    break;
+                }
+
+                // if array contains no values, no initial value to return
+                if (++i >= length) {
+                    throw new TypeError('reduce of empty array with no initial value');
+                }
+            } while (true);
+        }
+
+        for (; i < length; i++) {
+            if (i in self) {
+                result = callbackfn(result, self[i], i, object);
+            }
+        }
+
+        return result;
+    }
+}, !reduceCoercesToObject);
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+var reduceRightCoercesToObject = false;
+if (ArrayPrototype.reduceRight) {
+    reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+    reduceRight: function reduceRight(callbackfn/*, initial*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.reduceRight callback must be a function');
+        }
+
+        // no value to return if no initial value, empty array
+        if (length === 0 && arguments.length === 1) {
+            throw new TypeError('reduceRight of empty array with no initial value');
+        }
+
+        var result;
+        var i = length - 1;
+        if (arguments.length >= 2) {
+            result = arguments[1];
+        } else {
+            do {
+                if (i in self) {
+                    result = self[i--];
+                    break;
+                }
+
+                // if array contains no values, no initial value to return
+                if (--i < 0) {
+                    throw new TypeError('reduceRight of empty array with no initial value');
+                }
+            } while (true);
+        }
+
+        if (i < 0) {
+            return result;
+        }
+
+        do {
+            if (i in self) {
+                result = callbackfn(result, self[i], i, object);
+            }
+        } while (i--);
+
+        return result;
+    }
+}, !reduceRightCoercesToObject);
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
+defineProperties(ArrayPrototype, {
+    indexOf: function indexOf(searchElement/*, fromIndex */) {
+        var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+        var length = ES.ToUint32(self.length);
+
+        if (length === 0) {
+            return -1;
+        }
+
+        var i = 0;
+        if (arguments.length > 1) {
+            i = ES.ToInteger(arguments[1]);
+        }
+
+        // handle negative indices
+        i = i >= 0 ? i : max(0, length + i);
+        for (; i < length; i++) {
+            if (i in self && self[i] === searchElement) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}, hasFirefox2IndexOfBug);
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
+defineProperties(ArrayPrototype, {
+    lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {
+        var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+        var length = ES.ToUint32(self.length);
+
+        if (length === 0) {
+            return -1;
+        }
+        var i = length - 1;
+        if (arguments.length > 1) {
+            i = min(i, ES.ToInteger(arguments[1]));
+        }
+        // handle negative indices
+        i = i >= 0 ? i : length - Math.abs(i);
+        for (; i >= 0; i--) {
+            if (i in self && searchElement === self[i]) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}, hasFirefox2LastIndexOfBug);
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.12
+var spliceNoopReturnsEmptyArray = (function () {
+    var a = [1, 2];
+    var result = a.splice();
+    return a.length === 2 && isArray(result) && result.length === 0;
+}());
+defineProperties(ArrayPrototype, {
+    // Safari 5.0 bug where .splice() returns undefined
+    splice: function splice(start, deleteCount) {
+        if (arguments.length === 0) {
+            return [];
+        } else {
+            return array_splice.apply(this, arguments);
+        }
+    }
+}, !spliceNoopReturnsEmptyArray);
+
+var spliceWorksWithEmptyObject = (function () {
+    var obj = {};
+    ArrayPrototype.splice.call(obj, 0, 0, 1);
+    return obj.length === 1;
+}());
+defineProperties(ArrayPrototype, {
+    splice: function splice(start, deleteCount) {
+        if (arguments.length === 0) { return []; }
+        var args = arguments;
+        this.length = max(ES.ToInteger(this.length), 0);
+        if (arguments.length > 0 && typeof deleteCount !== 'number') {
+            args = arraySlice(arguments);
+            if (args.length < 2) {
+                pushCall(args, this.length - start);
+            } else {
+                args[1] = ES.ToInteger(deleteCount);
+            }
+        }
+        return array_splice.apply(this, args);
+    }
+}, !spliceWorksWithEmptyObject);
+var spliceWorksWithLargeSparseArrays = (function () {
+    // Per https://github.com/es-shims/es5-shim/issues/295
+    // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
+    var arr = new $Array(1e5);
+    // note: the index MUST be 8 or larger or the test will false pass
+    arr[8] = 'x';
+    arr.splice(1, 1);
+    // note: this test must be defined *after* the indexOf shim
+    // per https://github.com/es-shims/es5-shim/issues/313
+    return arr.indexOf('x') === 7;
+}());
+var spliceWorksWithSmallSparseArrays = (function () {
+    // Per https://github.com/es-shims/es5-shim/issues/295
+    // Opera 12.15 breaks on this, no idea why.
+    var n = 256;
+    var arr = [];
+    arr[n] = 'a';
+    arr.splice(n + 1, 0, 'b');
+    return arr[n] === 'a';
+}());
+defineProperties(ArrayPrototype, {
+    splice: function splice(start, deleteCount) {
+        var O = ES.ToObject(this);
+        var A = [];
+        var len = ES.ToUint32(O.length);
+        var relativeStart = ES.ToInteger(start);
+        var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
+        var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
+
+        var k = 0;
+        var from;
+        while (k < actualDeleteCount) {
+            from = $String(actualStart + k);
+            if (owns(O, from)) {
+                A[k] = O[from];
+            }
+            k += 1;
+        }
+
+        var items = arraySlice(arguments, 2);
+        var itemCount = items.length;
+        var to;
+        if (itemCount < actualDeleteCount) {
+            k = actualStart;
+            while (k < (len - actualDeleteCount)) {
+                from = $String(k + actualDeleteCount);
+                to = $String(k + itemCount);
+                if (owns(O, from)) {
+                    O[to] = O[from];
+                } else {
+                    delete O[to];
+                }
+                k += 1;
+            }
+            k = len;
+            while (k > (len - actualDeleteCount + itemCount)) {
+                delete O[k - 1];
+                k -= 1;
+            }
+        } else if (itemCount > actualDeleteCount) {
+            k = len - actualDeleteCount;
+            while (k > actualStart) {
+                from = $String(k + actualDeleteCount - 1);
+                to = $String(k + itemCount - 1);
+                if (owns(O, from)) {
+                    O[to] = O[from];
+                } else {
+                    delete O[to];
+                }
+                k -= 1;
+            }
+        }
+        k = actualStart;
+        for (var i = 0; i < items.length; ++i) {
+            O[k] = items[i];
+            k += 1;
+        }
+        O.length = len - actualDeleteCount + itemCount;
+
+        return A;
+    }
+}, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
+
+var originalJoin = ArrayPrototype.join;
+var hasStringJoinBug;
+try {
+    hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';
+} catch (e) {
+    hasStringJoinBug = true;
+}
+if (hasStringJoinBug) {
+    defineProperties(ArrayPrototype, {
+        join: function join(separator) {
+            var sep = typeof separator === 'undefined' ? ',' : separator;
+            return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);
+        }
+    }, hasStringJoinBug);
+}
+
+var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';
+if (hasJoinUndefinedBug) {
+    defineProperties(ArrayPrototype, {
+        join: function join(separator) {
+            var sep = typeof separator === 'undefined' ? ',' : separator;
+            return originalJoin.call(this, sep);
+        }
+    }, hasJoinUndefinedBug);
+}
+
+var pushShim = function push(item) {
+    var O = ES.ToObject(this);
+    var n = ES.ToUint32(O.length);
+    var i = 0;
+    while (i < arguments.length) {
+        O[n + i] = arguments[i];
+        i += 1;
+    }
+    O.length = n + i;
+    return n + i;
+};
+
+var pushIsNotGeneric = (function () {
+    var obj = {};
+    var result = Array.prototype.push.call(obj, undefined);
+    return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);
+}());
+defineProperties(ArrayPrototype, {
+    push: function push(item) {
+        if (isArray(this)) {
+            return array_push.apply(this, arguments);
+        }
+        return pushShim.apply(this, arguments);
+    }
+}, pushIsNotGeneric);
+
+// This fixes a very weird bug in Opera 10.6 when pushing `undefined
+var pushUndefinedIsWeird = (function () {
+    var arr = [];
+    var result = arr.push(undefined);
+    return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);
+}());
+defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);
+
+// ES5 15.2.3.14
+// http://es5.github.io/#x15.4.4.10
+// Fix boxed string bug
+defineProperties(ArrayPrototype, {
+    slice: function (start, end) {
+        var arr = isString(this) ? strSplit(this, '') : this;
+        return arraySliceApply(arr, arguments);
+    }
+}, splitString);
+
+var sortIgnoresNonFunctions = (function () {
+    try {
+        [1, 2].sort(null);
+        [1, 2].sort({});
+        return true;
+    } catch (e) { /**/ }
+    return false;
+}());
+var sortThrowsOnRegex = (function () {
+    // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`
+    try {
+        [1, 2].sort(/a/);
+        return false;
+    } catch (e) { /**/ }
+    return true;
+}());
+var sortIgnoresUndefined = (function () {
+    // applies in IE 8, for one.
+    try {
+        [1, 2].sort(undefined);
+        return true;
+    } catch (e) { /**/ }
+    return false;
+}());
+defineProperties(ArrayPrototype, {
+    sort: function sort(compareFn) {
+        if (typeof compareFn === 'undefined') {
+            return arraySort(this);
+        }
+        if (!isCallable(compareFn)) {
+            throw new TypeError('Array.prototype.sort callback must be a function');
+        }
+        return arraySort(this, compareFn);
+    }
+}, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+
+// http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+var hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');
+var hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');
+var hasStringEnumBug = !owns('x', '0');
+var equalsConstructorPrototype = function (o) {
+    var ctor = o.constructor;
+    return ctor && ctor.prototype === o;
+};
+var blacklistedKeys = {
+    $window: true,
+    $console: true,
+    $parent: true,
+    $self: true,
+    $frame: true,
+    $frames: true,
+    $frameElement: true,
+    $webkitIndexedDB: true,
+    $webkitStorageInfo: true,
+    $external: true
+};
+var hasAutomationEqualityBug = (function () {
+    /* globals window */
+    if (typeof window === 'undefined') { return false; }
+    for (var k in window) {
+        try {
+            if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
+                equalsConstructorPrototype(window[k]);
+            }
+        } catch (e) {
+            return true;
+        }
+    }
+    return false;
+}());
+var equalsConstructorPrototypeIfNotBuggy = function (object) {
+    if (typeof window === 'undefined' || !hasAutomationEqualityBug) { return equalsConstructorPrototype(object); }
+    try {
+        return equalsConstructorPrototype(object);
+    } catch (e) {
+        return false;
+    }
+};
+var dontEnums = [
+    'toString',
+    'toLocaleString',
+    'valueOf',
+    'hasOwnProperty',
+    'isPrototypeOf',
+    'propertyIsEnumerable',
+    'constructor'
+];
+var dontEnumsLength = dontEnums.length;
+
+// taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
+// can be replaced with require('is-arguments') if we ever use a build process instead
+var isStandardArguments = function isArguments(value) {
+    return toStr(value) === '[object Arguments]';
+};
+var isLegacyArguments = function isArguments(value) {
+    return value !== null &&
+        typeof value === 'object' &&
+        typeof value.length === 'number' &&
+        value.length >= 0 &&
+        !isArray(value) &&
+        isCallable(value.callee);
+};
+var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
+
+defineProperties($Object, {
+    keys: function keys(object) {
+        var isFn = isCallable(object);
+        var isArgs = isArguments(object);
+        var isObject = object !== null && typeof object === 'object';
+        var isStr = isObject && isString(object);
+
+        if (!isObject && !isFn && !isArgs) {
+            throw new TypeError('Object.keys called on a non-object');
+        }
+
+        var theKeys = [];
+        var skipProto = hasProtoEnumBug && isFn;
+        if ((isStr && hasStringEnumBug) || isArgs) {
+            for (var i = 0; i < object.length; ++i) {
+                pushCall(theKeys, $String(i));
+            }
+        }
+
+        if (!isArgs) {
+            for (var name in object) {
+                if (!(skipProto && name === 'prototype') && owns(object, name)) {
+                    pushCall(theKeys, $String(name));
+                }
+            }
+        }
+
+        if (hasDontEnumBug) {
+            var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+            for (var j = 0; j < dontEnumsLength; j++) {
+                var dontEnum = dontEnums[j];
+                if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+                    pushCall(theKeys, dontEnum);
+                }
+            }
+        }
+        return theKeys;
+    }
+});
+
+var keysWorksWithArguments = $Object.keys && (function () {
+    // Safari 5.0 bug
+    return $Object.keys(arguments).length === 2;
+}(1, 2));
+var keysHasArgumentsLengthBug = $Object.keys && (function () {
+    var argKeys = $Object.keys(arguments);
+    return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;
+}(1));
+var originalKeys = $Object.keys;
+defineProperties($Object, {
+    keys: function keys(object) {
+        if (isArguments(object)) {
+            return originalKeys(arraySlice(object));
+        } else {
+            return originalKeys(object);
+        }
+    }
+}, !keysWorksWithArguments || keysHasArgumentsLengthBug);
+
+//
+// Date
+// ====
+//
+
+var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;
+var aNegativeTestDate = new Date(-1509842289600292);
+var aPositiveTestDate = new Date(1449662400000);
+var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';
+var hasToDateStringFormatBug;
+var hasToStringFormatBug;
+var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();
+if (timeZoneOffset < -720) {
+    hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';
+    hasToStringFormatBug = !(/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/).test(aPositiveTestDate.toString());
+} else {
+    hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';
+    hasToStringFormatBug = !(/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/).test(aPositiveTestDate.toString());
+}
+
+var originalGetFullYear = call.bind(Date.prototype.getFullYear);
+var originalGetMonth = call.bind(Date.prototype.getMonth);
+var originalGetDate = call.bind(Date.prototype.getDate);
+var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);
+var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);
+var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);
+var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);
+var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);
+var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);
+var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);
+var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);
+var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'];
+var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+var daysInMonth = function daysInMonth(month, year) {
+    return originalGetDate(new Date(year, month, 0));
+};
+
+defineProperties(Date.prototype, {
+    getFullYear: function getFullYear() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var year = originalGetFullYear(this);
+        if (year < 0 && originalGetMonth(this) > 11) {
+            return year + 1;
+        }
+        return year;
+    },
+    getMonth: function getMonth() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var year = originalGetFullYear(this);
+        var month = originalGetMonth(this);
+        if (year < 0 && month > 11) {
+            return 0;
+        }
+        return month;
+    },
+    getDate: function getDate() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var year = originalGetFullYear(this);
+        var month = originalGetMonth(this);
+        var date = originalGetDate(this);
+        if (year < 0 && month > 11) {
+            if (month === 12) {
+                return date;
+            }
+            var days = daysInMonth(0, year + 1);
+            return (days - date) + 1;
+        }
+        return date;
+    },
+    getUTCFullYear: function getUTCFullYear() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var year = originalGetUTCFullYear(this);
+        if (year < 0 && originalGetUTCMonth(this) > 11) {
+            return year + 1;
+        }
+        return year;
+    },
+    getUTCMonth: function getUTCMonth() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var year = originalGetUTCFullYear(this);
+        var month = originalGetUTCMonth(this);
+        if (year < 0 && month > 11) {
+            return 0;
+        }
+        return month;
+    },
+    getUTCDate: function getUTCDate() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var year = originalGetUTCFullYear(this);
+        var month = originalGetUTCMonth(this);
+        var date = originalGetUTCDate(this);
+        if (year < 0 && month > 11) {
+            if (month === 12) {
+                return date;
+            }
+            var days = daysInMonth(0, year + 1);
+            return (days - date) + 1;
+        }
+        return date;
+    }
+}, hasNegativeMonthYearBug);
+
+defineProperties(Date.prototype, {
+    toUTCString: function toUTCString() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var day = originalGetUTCDay(this);
+        var date = originalGetUTCDate(this);
+        var month = originalGetUTCMonth(this);
+        var year = originalGetUTCFullYear(this);
+        var hour = originalGetUTCHours(this);
+        var minute = originalGetUTCMinutes(this);
+        var second = originalGetUTCSeconds(this);
+        return dayName[day] + ', ' +
+            (date < 10 ? '0' + date : date) + ' ' +
+            monthName[month] + ' ' +
+            year + ' ' +
+            (hour < 10 ? '0' + hour : hour) + ':' +
+            (minute < 10 ? '0' + minute : minute) + ':' +
+            (second < 10 ? '0' + second : second) + ' GMT';
+    }
+}, hasNegativeMonthYearBug || hasToUTCStringFormatBug);
+
+// Opera 12 has `,`
+defineProperties(Date.prototype, {
+    toDateString: function toDateString() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var day = this.getDay();
+        var date = this.getDate();
+        var month = this.getMonth();
+        var year = this.getFullYear();
+        return dayName[day] + ' ' +
+            monthName[month] + ' ' +
+            (date < 10 ? '0' + date : date) + ' ' +
+            year;
+    }
+}, hasNegativeMonthYearBug || hasToDateStringFormatBug);
+
+// can't use defineProperties here because of toString enumeration issue in IE <= 8
+if (hasNegativeMonthYearBug || hasToStringFormatBug) {
+    Date.prototype.toString = function toString() {
+        if (!this || !(this instanceof Date)) {
+            throw new TypeError('this is not a Date object.');
+        }
+        var day = this.getDay();
+        var date = this.getDate();
+        var month = this.getMonth();
+        var year = this.getFullYear();
+        var hour = this.getHours();
+        var minute = this.getMinutes();
+        var second = this.getSeconds();
+        var timezoneOffset = this.getTimezoneOffset();
+        var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);
+        var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);
+        return dayName[day] + ' ' +
+            monthName[month] + ' ' +
+            (date < 10 ? '0' + date : date) + ' ' +
+            year + ' ' +
+            (hour < 10 ? '0' + hour : hour) + ':' +
+            (minute < 10 ? '0' + minute : minute) + ':' +
+            (second < 10 ? '0' + second : second) + ' GMT' +
+            (timezoneOffset > 0 ? '-' : '+') +
+            (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset) +
+            (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);
+    };
+    if (supportsDescriptors) {
+        $Object.defineProperty(Date.prototype, 'toString', {
+            configurable: true,
+            enumerable: false,
+            writable: true
+        });
+    }
+}
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+var negativeDate = -62198755200000;
+var negativeYearString = '-000001';
+var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
+var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
+
+defineProperties(Date.prototype, {
+    toISOString: function toISOString() {
+        if (!isFinite(this)) {
+            throw new RangeError('Date.prototype.toISOString called on non-finite value.');
+        }
+
+        var year = originalGetUTCFullYear(this);
+
+        var month = originalGetUTCMonth(this);
+        // see https://github.com/es-shims/es5-shim/issues/111
+        year += Math.floor(month / 12);
+        month = (month % 12 + 12) % 12;
+
+        // the date time string format is specified in 15.9.1.15.
+        var result = [month + 1, originalGetUTCDate(this), originalGetUTCHours(this), originalGetUTCMinutes(this), originalGetUTCSeconds(this)];
+        year = (
+            (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
+            strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
+        );
+
+        for (var i = 0; i < result.length; ++i) {
+          // pad months, days, hours, minutes, and seconds to have two digits.
+          result[i] = strSlice('00' + result[i], -2);
+        }
+        // pad milliseconds to have three digits.
+        return (
+            year + '-' + arraySlice(result, 0, 2).join('-') +
+            'T' + arraySlice(result, 2).join(':') + '.' +
+            strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'
+        );
+    }
+}, hasNegativeDateBug || hasSafari51DateBug);
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+var dateToJSONIsSupported = (function () {
+    try {
+        return Date.prototype.toJSON &&
+            new Date(NaN).toJSON() === null &&
+            new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+            Date.prototype.toJSON.call({ // generic
+                toISOString: function () { return true; }
+            });
+    } catch (e) {
+        return false;
+    }
+}());
+if (!dateToJSONIsSupported) {
+    Date.prototype.toJSON = function toJSON(key) {
+        // When the toJSON method is called with argument key, the following
+        // steps are taken:
+
+        // 1.  Let O be the result of calling ToObject, giving it the this
+        // value as its argument.
+        // 2. Let tv be ES.ToPrimitive(O, hint Number).
+        var O = $Object(this);
+        var tv = ES.ToPrimitive(O);
+        // 3. If tv is a Number and is not finite, return null.
+        if (typeof tv === 'number' && !isFinite(tv)) {
+            return null;
+        }
+        // 4. Let toISO be the result of calling the [[Get]] internal method of
+        // O with argument "toISOString".
+        var toISO = O.toISOString;
+        // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+        if (!isCallable(toISO)) {
+            throw new TypeError('toISOString property is not callable');
+        }
+        // 6. Return the result of calling the [[Call]] internal method of
+        //  toISO with O as the this value and an empty argument list.
+        return toISO.call(O);
+
+        // NOTE 1 The argument is ignored.
+
+        // NOTE 2 The toJSON function is intentionally generic; it does not
+        // require that its this value be a Date object. Therefore, it can be
+        // transferred to other kinds of objects for use as a method. However,
+        // it does require that any such object have a toISOString method. An
+        // object is free to use the argument key to filter its
+        // stringification.
+    };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
+if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+    // XXX global assignment won't work in embeddings that use
+    // an alternate object for the context.
+    /* global Date: true */
+    /* eslint-disable no-undef */
+    var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;
+    var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());
+    Date = (function (NativeDate) {
+    /* eslint-enable no-undef */
+        // Date.length === 7
+        var DateShim = function Date(Y, M, D, h, m, s, ms) {
+            var length = arguments.length;
+            var date;
+            if (this instanceof NativeDate) {
+                var seconds = s;
+                var millis = ms;
+                if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
+                    // work around a Safari 8/9 bug where it treats the seconds as signed
+                    var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+                    var sToShift = Math.floor(msToShift / 1e3);
+                    seconds += sToShift;
+                    millis -= sToShift * 1e3;
+                }
+                date = length === 1 && $String(Y) === Y ? // isString(Y)
+                    // We explicitly pass it through parse:
+                    new NativeDate(DateShim.parse(Y)) :
+                    // We have to manually make calls depending on argument
+                    // length here
+                    length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) :
+                    length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) :
+                    length >= 5 ? new NativeDate(Y, M, D, h, m) :
+                    length >= 4 ? new NativeDate(Y, M, D, h) :
+                    length >= 3 ? new NativeDate(Y, M, D) :
+                    length >= 2 ? new NativeDate(Y, M) :
+                    length >= 1 ? new NativeDate(Y) :
+                                  new NativeDate();
+            } else {
+                date = NativeDate.apply(this, arguments);
+            }
+            if (!isPrimitive(date)) {
+              // Prevent mixups with unfixed Date object
+              defineProperties(date, { constructor: DateShim }, true);
+            }
+            return date;
+        };
+
+        // 15.9.1.15 Date Time String Format.
+        var isoDateExpression = new RegExp('^' +
+            '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
+                                      // 6-digit extended year
+            '(?:-(\\d{2})' + // optional month capture
+            '(?:-(\\d{2})' + // optional day capture
+            '(?:' + // capture hours:minutes:seconds.milliseconds
+                'T(\\d{2})' + // hours capture
+                ':(\\d{2})' + // minutes capture
+                '(?:' + // optional :seconds.milliseconds
+                    ':(\\d{2})' + // seconds capture
+                    '(?:(\\.\\d{1,}))?' + // milliseconds capture
+                ')?' +
+            '(' + // capture UTC offset component
+                'Z|' + // UTC capture
+                '(?:' + // offset specifier +/-hours:minutes
+                    '([-+])' + // sign capture
+                    '(\\d{2})' + // hours offset capture
+                    ':(\\d{2})' + // minutes offset capture
+                ')' +
+            ')?)?)?)?' +
+        '$');
+
+        var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+        var dayFromMonth = function dayFromMonth(year, month) {
+            var t = month > 1 ? 1 : 0;
+            return (
+                months[month] +
+                Math.floor((year - 1969 + t) / 4) -
+                Math.floor((year - 1901 + t) / 100) +
+                Math.floor((year - 1601 + t) / 400) +
+                365 * (year - 1970)
+            );
+        };
+
+        var toUTC = function toUTC(t) {
+            var s = 0;
+            var ms = t;
+            if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {
+                // work around a Safari 8/9 bug where it treats the seconds as signed
+                var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+                var sToShift = Math.floor(msToShift / 1e3);
+                s += sToShift;
+                ms -= sToShift * 1e3;
+            }
+            return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));
+        };
+
+        // Copy any custom methods a 3rd party library may have added
+        for (var key in NativeDate) {
+            if (owns(NativeDate, key)) {
+                DateShim[key] = NativeDate[key];
+            }
+        }
+
+        // Copy "native" methods explicitly; they may be non-enumerable
+        defineProperties(DateShim, {
+            now: NativeDate.now,
+            UTC: NativeDate.UTC
+        }, true);
+        DateShim.prototype = NativeDate.prototype;
+        defineProperties(DateShim.prototype, {
+            constructor: DateShim
+        }, true);
+
+        // Upgrade Date.parse to handle simplified ISO 8601 strings
+        var parseShim = function parse(string) {
+            var match = isoDateExpression.exec(string);
+            if (match) {
+                // parse months, days, hours, minutes, seconds, and milliseconds
+                // provide default values if necessary
+                // parse the UTC offset component
+                var year = $Number(match[1]),
+                    month = $Number(match[2] || 1) - 1,
+                    day = $Number(match[3] || 1) - 1,
+                    hour = $Number(match[4] || 0),
+                    minute = $Number(match[5] || 0),
+                    second = $Number(match[6] || 0),
+                    millisecond = Math.floor($Number(match[7] || 0) * 1000),
+                    // When time zone is missed, local offset should be used
+                    // (ES 5.1 bug)
+                    // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+                    isLocalTime = Boolean(match[4] && !match[8]),
+                    signOffset = match[9] === '-' ? 1 : -1,
+                    hourOffset = $Number(match[10] || 0),
+                    minuteOffset = $Number(match[11] || 0),
+                    result;
+                var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;
+                if (
+                    hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25) &&
+                    minute < 60 && second < 60 && millisecond < 1000 &&
+                    month > -1 && month < 12 && hourOffset < 24 &&
+                    minuteOffset < 60 && // detect invalid offsets
+                    day > -1 &&
+                    day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))
+                ) {
+                    result = (
+                        (dayFromMonth(year, month) + day) * 24 +
+                        hour +
+                        hourOffset * signOffset
+                    ) * 60;
+                    result = (
+                        (result + minute + minuteOffset * signOffset) * 60 +
+                        second
+                    ) * 1000 + millisecond;
+                    if (isLocalTime) {
+                        result = toUTC(result);
+                    }
+                    if (-8.64e15 <= result && result <= 8.64e15) {
+                        return result;
+                    }
+                }
+                return NaN;
+            }
+            return NativeDate.parse.apply(this, arguments);
+        };
+        defineProperties(DateShim, { parse: parseShim });
+
+        return DateShim;
+    }(Date));
+    /* global Date: false */
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+    Date.now = function now() {
+        return new Date().getTime();
+    };
+}
+
+//
+// Number
+// ======
+//
+
+// ES5.1 15.7.4.5
+// http://es5.github.com/#x15.7.4.5
+var hasToFixedBugs = NumberPrototype.toFixed && (
+  (0.00008).toFixed(3) !== '0.000' ||
+  (0.9).toFixed(0) !== '1' ||
+  (1.255).toFixed(2) !== '1.25' ||
+  (1000000000000000128).toFixed(0) !== '1000000000000000128'
+);
+
+var toFixedHelpers = {
+  base: 1e7,
+  size: 6,
+  data: [0, 0, 0, 0, 0, 0],
+  multiply: function multiply(n, c) {
+      var i = -1;
+      var c2 = c;
+      while (++i < toFixedHelpers.size) {
+          c2 += n * toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+          c2 = Math.floor(c2 / toFixedHelpers.base);
+      }
+  },
+  divide: function divide(n) {
+      var i = toFixedHelpers.size, c = 0;
+      while (--i >= 0) {
+          c += toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = Math.floor(c / n);
+          c = (c % n) * toFixedHelpers.base;
+      }
+  },
+  numToString: function numToString() {
+      var i = toFixedHelpers.size;
+      var s = '';
+      while (--i >= 0) {
+          if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+              var t = $String(toFixedHelpers.data[i]);
+              if (s === '') {
+                  s = t;
+              } else {
+                  s += strSlice('0000000', 0, 7 - t.length) + t;
+              }
+          }
+      }
+      return s;
+  },
+  pow: function pow(x, n, acc) {
+      return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+  },
+  log: function log(x) {
+      var n = 0;
+      var x2 = x;
+      while (x2 >= 4096) {
+          n += 12;
+          x2 /= 4096;
+      }
+      while (x2 >= 2) {
+          n += 1;
+          x2 /= 2;
+      }
+      return n;
+  }
+};
+
+var toFixedShim = function toFixed(fractionDigits) {
+    var f, x, s, m, e, z, j, k;
+
+    // Test for NaN and round fractionDigits down
+    f = $Number(fractionDigits);
+    f = isActualNaN(f) ? 0 : Math.floor(f);
+
+    if (f < 0 || f > 20) {
+        throw new RangeError('Number.toFixed called with invalid number of decimals');
+    }
+
+    x = $Number(this);
+
+    if (isActualNaN(x)) {
+        return 'NaN';
+    }
+
+    // If it is too big or small, return the string value of the number
+    if (x <= -1e21 || x >= 1e21) {
+        return $String(x);
+    }
+
+    s = '';
+
+    if (x < 0) {
+        s = '-';
+        x = -x;
+    }
+
+    m = '0';
+
+    if (x > 1e-21) {
+        // 1e-21 < x < 1e21
+        // -70 < log2(x) < 70
+        e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+        z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+        z *= 0x10000000000000; // Math.pow(2, 52);
+        e = 52 - e;
+
+        // -18 < e < 122
+        // x = z / 2 ^ e
+        if (e > 0) {
+            toFixedHelpers.multiply(0, z);
+            j = f;
+
+            while (j >= 7) {
+                toFixedHelpers.multiply(1e7, 0);
+                j -= 7;
+            }
+
+            toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+            j = e - 1;
+
+            while (j >= 23) {
+                toFixedHelpers.divide(1 << 23);
+                j -= 23;
+            }
+
+            toFixedHelpers.divide(1 << j);
+            toFixedHelpers.multiply(1, 1);
+            toFixedHelpers.divide(2);
+            m = toFixedHelpers.numToString();
+        } else {
+            toFixedHelpers.multiply(0, z);
+            toFixedHelpers.multiply(1 << (-e), 0);
+            m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
+        }
+    }
+
+    if (f > 0) {
+        k = m.length;
+
+        if (k <= f) {
+            m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
+        } else {
+            m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
+        }
+    } else {
+        m = s + m;
+    }
+
+    return m;
+};
+defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);
+
+var hasToPrecisionUndefinedBug = (function () {
+    try {
+        return 1.0.toPrecision(undefined) === '1';
+    } catch (e) {
+        return true;
+    }
+}());
+var originalToPrecision = NumberPrototype.toPrecision;
+defineProperties(NumberPrototype, {
+    toPrecision: function toPrecision(precision) {
+        return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);
+    }
+}, hasToPrecisionUndefinedBug);
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.14
+// http://es5.github.com/#x15.5.4.14
+
+// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+// Many browsers do not split properly with regular expressions or they
+// do not perform the split correctly under obscure conditions.
+// See http://blog.stevenlevithan.com/archives/cross-browser-split
+// I've tested in many browsers and this seems to cover the deviant ones:
+//    'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+//    '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+//    'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+//       [undefined, "t", undefined, "e", ...]
+//    ''.split(/.?/) should be [], not [""]
+//    '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+if (
+    'ab'.split(/(?:ab)*/).length !== 2 ||
+    '.'.split(/(.?)(.?)/).length !== 4 ||
+    'tesst'.split(/(s)*/)[1] === 't' ||
+    'test'.split(/(?:)/, -1).length !== 4 ||
+    ''.split(/.?/).length ||
+    '.'.split(/()()/).length > 1
+) {
+    (function () {
+        var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
+        var maxSafe32BitInt = Math.pow(2, 32) - 1;
+
+        StringPrototype.split = function (separator, limit) {
+            var string = String(this);
+            if (typeof separator === 'undefined' && limit === 0) {
+                return [];
+            }
+
+            // If `separator` is not a regex, use native split
+            if (!isRegex(separator)) {
+                return strSplit(this, separator, limit);
+            }
+
+            var output = [];
+            var flags = (separator.ignoreCase ? 'i' : '') +
+                        (separator.multiline ? 'm' : '') +
+                        (separator.unicode ? 'u' : '') + // in ES6
+                        (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
+                lastLastIndex = 0,
+                // Make `global` and avoid `lastIndex` issues by working with a copy
+                separator2, match, lastIndex, lastLength;
+            var separatorCopy = new RegExp(separator.source, flags + 'g');
+            if (!compliantExecNpcg) {
+                // Doesn't need flags gy, but they don't hurt
+                separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+            }
+            /* Values for `limit`, per the spec:
+             * If undefined: 4294967295 // maxSafe32BitInt
+             * If 0, Infinity, or NaN: 0
+             * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+             * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+             * If other: Type-convert, then use the above rules
+             */
+            var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);
+            match = separatorCopy.exec(string);
+            while (match) {
+                // `separatorCopy.lastIndex` is not reliable cross-browser
+                lastIndex = match.index + match[0].length;
+                if (lastIndex > lastLastIndex) {
+                    pushCall(output, strSlice(string, lastLastIndex, match.index));
+                    // Fix browsers whose `exec` methods don't consistently return `undefined` for
+                    // nonparticipating capturing groups
+                    if (!compliantExecNpcg && match.length > 1) {
+                        /* eslint-disable no-loop-func */
+                        match[0].replace(separator2, function () {
+                            for (var i = 1; i < arguments.length - 2; i++) {
+                                if (typeof arguments[i] === 'undefined') {
+                                    match[i] = void 0;
+                                }
+                            }
+                        });
+                        /* eslint-enable no-loop-func */
+                    }
+                    if (match.length > 1 && match.index < string.length) {
+                        array_push.apply(output, arraySlice(match, 1));
+                    }
+                    lastLength = match[0].length;
+                    lastLastIndex = lastIndex;
+                    if (output.length >= splitLimit) {
+                        break;
+                    }
+                }
+                if (separatorCopy.lastIndex === match.index) {
+                    separatorCopy.lastIndex++; // Avoid an infinite loop
+                }
+                match = separatorCopy.exec(string);
+            }
+            if (lastLastIndex === string.length) {
+                if (lastLength || !separatorCopy.test('')) {
+                    pushCall(output, '');
+                }
+            } else {
+                pushCall(output, strSlice(string, lastLastIndex));
+            }
+            return output.length > splitLimit ? strSlice(output, 0, splitLimit) : output;
+        };
+    }());
+
+// [bugfix, chrome]
+// If separator is undefined, then the result array contains just one String,
+// which is the this value (converted to a String). If limit is not undefined,
+// then the output array is truncated so that it contains no more than limit
+// elements.
+// "0".split(undefined, 0) -> []
+} else if ('0'.split(void 0, 0).length) {
+    StringPrototype.split = function split(separator, limit) {
+        if (typeof separator === 'undefined' && limit === 0) { return []; }
+        return strSplit(this, separator, limit);
+    };
+}
+
+var str_replace = StringPrototype.replace;
+var replaceReportsGroupsCorrectly = (function () {
+    var groups = [];
+    'x'.replace(/x(.)?/g, function (match, group) {
+        pushCall(groups, group);
+    });
+    return groups.length === 1 && typeof groups[0] === 'undefined';
+}());
+
+if (!replaceReportsGroupsCorrectly) {
+    StringPrototype.replace = function replace(searchValue, replaceValue) {
+        var isFn = isCallable(replaceValue);
+        var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+        if (!isFn || !hasCapturingGroups) {
+            return str_replace.call(this, searchValue, replaceValue);
+        } else {
+            var wrappedReplaceValue = function (match) {
+                var length = arguments.length;
+                var originalLastIndex = searchValue.lastIndex;
+                searchValue.lastIndex = 0;
+                var args = searchValue.exec(match) || [];
+                searchValue.lastIndex = originalLastIndex;
+                pushCall(args, arguments[length - 2], arguments[length - 1]);
+                return replaceValue.apply(this, args);
+            };
+            return str_replace.call(this, searchValue, wrappedReplaceValue);
+        }
+    };
+}
+
+// ECMA-262, 3rd B.2.3
+// Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+// non-normative section suggesting uniform semantics and it should be
+// normalized across all browsers
+// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+var string_substr = StringPrototype.substr;
+var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
+defineProperties(StringPrototype, {
+    substr: function substr(start, length) {
+        var normalizedStart = start;
+        if (start < 0) {
+            normalizedStart = max(this.length + start, 0);
+        }
+        return string_substr.call(this, normalizedStart, length);
+    }
+}, hasNegativeSubstrBug);
+
+// ES5 15.5.4.20
+// whitespace from: http://es5.github.io/#x15.5.4.20
+var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+    '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
+    '\u2029\uFEFF';
+var zeroWidth = '\u200b';
+var wsRegexChars = '[' + ws + ']';
+var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
+var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+defineProperties(StringPrototype, {
+    // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+    // http://perfectionkills.com/whitespace-deviations/
+    trim: function trim() {
+        if (typeof this === 'undefined' || this === null) {
+            throw new TypeError("can't convert " + this + ' to object');
+        }
+        return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+    }
+}, hasTrimWhitespaceBug);
+var trim = call.bind(String.prototype.trim);
+
+var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;
+defineProperties(StringPrototype, {
+    lastIndexOf: function lastIndexOf(searchString) {
+        if (typeof this === 'undefined' || this === null) {
+            throw new TypeError("can't convert " + this + ' to object');
+        }
+        var S = $String(this);
+        var searchStr = $String(searchString);
+        var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;
+        var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);
+        var start = min(max(pos, 0), S.length);
+        var searchLen = searchStr.length;
+        var k = start + searchLen;
+        while (k > 0) {
+            k = max(0, k - searchLen);
+            var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);
+            if (index !== -1) {
+                return k + index;
+            }
+        }
+        return -1;
+    }
+}, hasLastIndexBug);
+
+var originalLastIndexOf = StringPrototype.lastIndexOf;
+defineProperties(StringPrototype, {
+    lastIndexOf: function lastIndexOf(searchString) {
+        return originalLastIndexOf.apply(this, arguments);
+    }
+}, StringPrototype.lastIndexOf.length !== 1);
+
+// ES-5 15.1.2.2
+/* eslint-disable radix */
+if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+/* eslint-enable radix */
+    /* global parseInt: true */
+    parseInt = (function (origParseInt) {
+        var hexRegex = /^[\-+]?0[xX]/;
+        return function parseInt(str, radix) {
+            var string = trim(str);
+            var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
+            return origParseInt(string, defaultedRadix);
+        };
+    }(parseInt));
+}
+
+// https://es5.github.io/#x15.1.2.3
+if (1 / parseFloat('-0') !== -Infinity) {
+    /* global parseFloat: true */
+    parseFloat = (function (origParseFloat) {
+        return function parseFloat(string) {
+            var inputString = trim(string);
+            var result = origParseFloat(inputString);
+            return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;
+        };
+    }(parseFloat));
+}
+
+if (String(new RangeError('test')) !== 'RangeError: test') {
+    var errorToStringShim = function toString() {
+        if (typeof this === 'undefined' || this === null) {
+            throw new TypeError("can't convert " + this + ' to object');
+        }
+        var name = this.name;
+        if (typeof name === 'undefined') {
+            name = 'Error';
+        } else if (typeof name !== 'string') {
+            name = $String(name);
+        }
+        var msg = this.message;
+        if (typeof msg === 'undefined') {
+            msg = '';
+        } else if (typeof msg !== 'string') {
+            msg = $String(msg);
+        }
+        if (!name) {
+            return msg;
+        }
+        if (!msg) {
+            return name;
+        }
+        return name + ': ' + msg;
+    };
+    // can't use defineProperties here because of toString enumeration issue in IE <= 8
+    Error.prototype.toString = errorToStringShim;
+}
+
+if (supportsDescriptors) {
+    var ensureNonEnumerable = function (obj, prop) {
+        if (isEnum(obj, prop)) {
+            var desc = Object.getOwnPropertyDescriptor(obj, prop);
+            desc.enumerable = false;
+            Object.defineProperty(obj, prop, desc);
+        }
+    };
+    ensureNonEnumerable(Error.prototype, 'message');
+    if (Error.prototype.message !== '') {
+      Error.prototype.message = '';
+    }
+    ensureNonEnumerable(Error.prototype, 'name');
+}
+
+if (String(/a/mig) !== '/a/gim') {
+    var regexToString = function toString() {
+        var str = '/' + this.source + '/';
+        if (this.global) {
+            str += 'g';
+        }
+        if (this.ignoreCase) {
+            str += 'i';
+        }
+        if (this.multiline) {
+            str += 'm';
+        }
+        return str;
+    };
+    // can't use defineProperties here because of toString enumeration issue in IE <= 8
+    RegExp.prototype.toString = regexToString;
+}
+
+}));
+
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js
+(function (root, factory) {
+    'use strict';
+
+    /* global define, exports, module */
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(factory);
+    } else if (typeof exports === 'object') {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like enviroments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else {
+        // Browser globals (root is window)
+        root.returnExports = factory();
+  }
+}(this, function () {
+
+var call = Function.call;
+var prototypeOfObject = Object.prototype;
+var owns = call.bind(prototypeOfObject.hasOwnProperty);
+var isEnumerable = call.bind(prototypeOfObject.propertyIsEnumerable);
+var toStr = call.bind(prototypeOfObject.toString);
+
+// If JS engine supports accessors creating shortcuts.
+var defineGetter;
+var defineSetter;
+var lookupGetter;
+var lookupSetter;
+var supportsAccessors = owns(prototypeOfObject, '__defineGetter__');
+if (supportsAccessors) {
+    /* eslint-disable no-underscore-dangle */
+    defineGetter = call.bind(prototypeOfObject.__defineGetter__);
+    defineSetter = call.bind(prototypeOfObject.__defineSetter__);
+    lookupGetter = call.bind(prototypeOfObject.__lookupGetter__);
+    lookupSetter = call.bind(prototypeOfObject.__lookupSetter__);
+    /* eslint-enable no-underscore-dangle */
+}
+
+// ES5 15.2.3.2
+// http://es5.github.com/#x15.2.3.2
+if (!Object.getPrototypeOf) {
+    // https://github.com/es-shims/es5-shim/issues#issue/2
+    // http://ejohn.org/blog/objectgetprototypeof/
+    // recommended by fschaefer on github
+    //
+    // sure, and webreflection says ^_^
+    // ... this will nerever possibly return null
+    // ... Opera Mini breaks here with infinite loops
+    Object.getPrototypeOf = function getPrototypeOf(object) {
+        /* eslint-disable no-proto */
+        var proto = object.__proto__;
+        /* eslint-enable no-proto */
+        if (proto || proto === null) {
+            return proto;
+        } else if (toStr(object.constructor) === '[object Function]') {
+            return object.constructor.prototype;
+        } else if (object instanceof Object) {
+          return prototypeOfObject;
+        } else {
+          // Correctly return null for Objects created with `Object.create(null)`
+          // (shammed or native) or `{ __proto__: null}`.  Also returns null for
+          // cross-realm objects on browsers that lack `__proto__` support (like
+          // IE <11), but that's the best we can do.
+          return null;
+        }
+    };
+}
+
+// ES5 15.2.3.3
+// http://es5.github.com/#x15.2.3.3
+
+var doesGetOwnPropertyDescriptorWork = function doesGetOwnPropertyDescriptorWork(object) {
+    try {
+        object.sentinel = 0;
+        return Object.getOwnPropertyDescriptor(object, 'sentinel').value === 0;
+    } catch (exception) {
+        return false;
+    }
+};
+
+// check whether getOwnPropertyDescriptor works if it's given. Otherwise, shim partially.
+if (Object.defineProperty) {
+    var getOwnPropertyDescriptorWorksOnObject = doesGetOwnPropertyDescriptorWork({});
+    var getOwnPropertyDescriptorWorksOnDom = typeof document === 'undefined' ||
+    doesGetOwnPropertyDescriptorWork(document.createElement('div'));
+    if (!getOwnPropertyDescriptorWorksOnDom || !getOwnPropertyDescriptorWorksOnObject) {
+        var getOwnPropertyDescriptorFallback = Object.getOwnPropertyDescriptor;
+    }
+}
+
+if (!Object.getOwnPropertyDescriptor || getOwnPropertyDescriptorFallback) {
+    var ERR_NON_OBJECT = 'Object.getOwnPropertyDescriptor called on a non-object: ';
+
+    /* eslint-disable no-proto */
+    Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) {
+        if ((typeof object !== 'object' && typeof object !== 'function') || object === null) {
+            throw new TypeError(ERR_NON_OBJECT + object);
+        }
+
+        // make a valiant attempt to use the real getOwnPropertyDescriptor
+        // for I8's DOM elements.
+        if (getOwnPropertyDescriptorFallback) {
+            try {
+                return getOwnPropertyDescriptorFallback.call(Object, object, property);
+            } catch (exception) {
+                // try the shim if the real one doesn't work
+            }
+        }
+
+        var descriptor;
+
+        // If object does not owns property return undefined immediately.
+        if (!owns(object, property)) {
+            return descriptor;
+        }
+
+        // If object has a property then it's for sure `configurable`, and
+        // probably `enumerable`. Detect enumerability though.
+        descriptor = {
+            enumerable: isEnumerable(object, property),
+            configurable: true
+        };
+
+        // If JS engine supports accessor properties then property may be a
+        // getter or setter.
+        if (supportsAccessors) {
+            // Unfortunately `__lookupGetter__` will return a getter even
+            // if object has own non getter property along with a same named
+            // inherited getter. To avoid misbehavior we temporary remove
+            // `__proto__` so that `__lookupGetter__` will return getter only
+            // if it's owned by an object.
+            var prototype = object.__proto__;
+            var notPrototypeOfObject = object !== prototypeOfObject;
+            // avoid recursion problem, breaking in Opera Mini when
+            // Object.getOwnPropertyDescriptor(Object.prototype, 'toString')
+            // or any other Object.prototype accessor
+            if (notPrototypeOfObject) {
+                object.__proto__ = prototypeOfObject;
+            }
+
+            var getter = lookupGetter(object, property);
+            var setter = lookupSetter(object, property);
+
+            if (notPrototypeOfObject) {
+                // Once we have getter and setter we can put values back.
+                object.__proto__ = prototype;
+            }
+
+            if (getter || setter) {
+                if (getter) {
+                    descriptor.get = getter;
+                }
+                if (setter) {
+                    descriptor.set = setter;
+                }
+                // If it was accessor property we're done and return here
+                // in order to avoid adding `value` to the descriptor.
+                return descriptor;
+            }
+        }
+
+        // If we got this far we know that object has an own property that is
+        // not an accessor so we set it as a value and return descriptor.
+        descriptor.value = object[property];
+        descriptor.writable = true;
+        return descriptor;
+    };
+    /* eslint-enable no-proto */
+}
+
+// ES5 15.2.3.4
+// http://es5.github.com/#x15.2.3.4
+if (!Object.getOwnPropertyNames) {
+    Object.getOwnPropertyNames = function getOwnPropertyNames(object) {
+        return Object.keys(object);
+    };
+}
+
+// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
+if (!Object.create) {
+
+    // Contributed by Brandon Benvie, October, 2012
+    var createEmpty;
+    var supportsProto = !({ __proto__: null } instanceof Object);
+                        // the following produces false positives
+                        // in Opera Mini => not a reliable check
+                        // Object.prototype.__proto__ === null
+
+    // Check for document.domain and active x support
+    // No need to use active x approach when document.domain is not set
+    // see https://github.com/es-shims/es5-shim/issues/150
+    // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
+    /* global ActiveXObject */
+    var shouldUseActiveX = function shouldUseActiveX() {
+        // return early if document.domain not set
+        if (!document.domain) {
+            return false;
+        }
+
+        try {
+            return !!new ActiveXObject('htmlfile');
+        } catch (exception) {
+            return false;
+        }
+    };
+
+    // This supports IE8 when document.domain is used
+    // see https://github.com/es-shims/es5-shim/issues/150
+    // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
+    var getEmptyViaActiveX = function getEmptyViaActiveX() {
+        var empty;
+        var xDoc;
+
+        xDoc = new ActiveXObject('htmlfile');
+
+        xDoc.write('<script><\/script>');
+        xDoc.close();
+
+        empty = xDoc.parentWindow.Object.prototype;
+        xDoc = null;
+
+        return empty;
+    };
+
+    // The original implementation using an iframe
+    // before the activex approach was added
+    // see https://github.com/es-shims/es5-shim/issues/150
+    var getEmptyViaIFrame = function getEmptyViaIFrame() {
+        var iframe = document.createElement('iframe');
+        var parent = document.body || document.documentElement;
+        var empty;
+
+        iframe.style.display = 'none';
+        parent.appendChild(iframe);
+        /* eslint-disable no-script-url */
+        iframe.src = 'javascript:';
+        /* eslint-enable no-script-url */
+
+        empty = iframe.contentWindow.Object.prototype;
+        parent.removeChild(iframe);
+        iframe = null;
+
+        return empty;
+    };
+
+    /* global document */
+    if (supportsProto || typeof document === 'undefined') {
+        createEmpty = function () {
+            return { __proto__: null };
+        };
+    } else {
+        // In old IE __proto__ can't be used to manually set `null`, nor does
+        // any other method exist to make an object that inherits from nothing,
+        // aside from Object.prototype itself. Instead, create a new global
+        // object and *steal* its Object.prototype and strip it bare. This is
+        // used as the prototype to create nullary objects.
+        createEmpty = function () {
+            // Determine which approach to use
+            // see https://github.com/es-shims/es5-shim/issues/150
+            var empty = shouldUseActiveX() ? getEmptyViaActiveX() : getEmptyViaIFrame();
+
+            delete empty.constructor;
+            delete empty.hasOwnProperty;
+            delete empty.propertyIsEnumerable;
+            delete empty.isPrototypeOf;
+            delete empty.toLocaleString;
+            delete empty.toString;
+            delete empty.valueOf;
+
+            var Empty = function Empty() {};
+            Empty.prototype = empty;
+            // short-circuit future calls
+            createEmpty = function () {
+                return new Empty();
+            };
+            return new Empty();
+        };
+    }
+
+    Object.create = function create(prototype, properties) {
+
+        var object;
+        var Type = function Type() {}; // An empty constructor.
+
+        if (prototype === null) {
+            object = createEmpty();
+        } else {
+            if (typeof prototype !== 'object' && typeof prototype !== 'function') {
+                // In the native implementation `parent` can be `null`
+                // OR *any* `instanceof Object`  (Object|Function|Array|RegExp|etc)
+                // Use `typeof` tho, b/c in old IE, DOM elements are not `instanceof Object`
+                // like they are in modern browsers. Using `Object.create` on DOM elements
+                // is...err...probably inappropriate, but the native version allows for it.
+                throw new TypeError('Object prototype may only be an Object or null'); // same msg as Chrome
+            }
+            Type.prototype = prototype;
+            object = new Type();
+            // IE has no built-in implementation of `Object.getPrototypeOf`
+            // neither `__proto__`, but this manually setting `__proto__` will
+            // guarantee that `Object.getPrototypeOf` will work as expected with
+            // objects created using `Object.create`
+            /* eslint-disable no-proto */
+            object.__proto__ = prototype;
+            /* eslint-enable no-proto */
+        }
+
+        if (properties !== void 0) {
+            Object.defineProperties(object, properties);
+        }
+
+        return object;
+    };
+}
+
+// ES5 15.2.3.6
+// http://es5.github.com/#x15.2.3.6
+
+// Patch for WebKit and IE8 standard mode
+// Designed by hax <hax.github.com>
+// related issue: https://github.com/es-shims/es5-shim/issues#issue/5
+// IE8 Reference:
+//     http://msdn.microsoft.com/en-us/library/dd282900.aspx
+//     http://msdn.microsoft.com/en-us/library/dd229916.aspx
+// WebKit Bugs:
+//     https://bugs.webkit.org/show_bug.cgi?id=36423
+
+var doesDefinePropertyWork = function doesDefinePropertyWork(object) {
+    try {
+        Object.defineProperty(object, 'sentinel', {});
+        return 'sentinel' in object;
+    } catch (exception) {
+        return false;
+    }
+};
+
+// check whether defineProperty works if it's given. Otherwise,
+// shim partially.
+if (Object.defineProperty) {
+    var definePropertyWorksOnObject = doesDefinePropertyWork({});
+    var definePropertyWorksOnDom = typeof document === 'undefined' ||
+        doesDefinePropertyWork(document.createElement('div'));
+    if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
+        var definePropertyFallback = Object.defineProperty,
+            definePropertiesFallback = Object.defineProperties;
+    }
+}
+
+if (!Object.defineProperty || definePropertyFallback) {
+    var ERR_NON_OBJECT_DESCRIPTOR = 'Property description must be an object: ';
+    var ERR_NON_OBJECT_TARGET = 'Object.defineProperty called on non-object: ';
+    var ERR_ACCESSORS_NOT_SUPPORTED = 'getters & setters can not be defined on this javascript engine';
+
+    Object.defineProperty = function defineProperty(object, property, descriptor) {
+        if ((typeof object !== 'object' && typeof object !== 'function') || object === null) {
+            throw new TypeError(ERR_NON_OBJECT_TARGET + object);
+        }
+        if ((typeof descriptor !== 'object' && typeof descriptor !== 'function') || descriptor === null) {
+            throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor);
+        }
+        // make a valiant attempt to use the real defineProperty
+        // for I8's DOM elements.
+        if (definePropertyFallback) {
+            try {
+                return definePropertyFallback.call(Object, object, property, descriptor);
+            } catch (exception) {
+                // try the shim if the real one doesn't work
+            }
+        }
+
+        // If it's a data property.
+        if ('value' in descriptor) {
+            // fail silently if 'writable', 'enumerable', or 'configurable'
+            // are requested but not supported
+            /*
+            // alternate approach:
+            if ( // can't implement these features; allow false but not true
+                ('writable' in descriptor && !descriptor.writable) ||
+                ('enumerable' in descriptor && !descriptor.enumerable) ||
+                ('configurable' in descriptor && !descriptor.configurable)
+            ))
+                throw new RangeError(
+                    'This implementation of Object.defineProperty does not support configurable, enumerable, or writable.'
+                );
+            */
+
+            if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) {
+                // As accessors are supported only on engines implementing
+                // `__proto__` we can safely override `__proto__` while defining
+                // a property to make sure that we don't hit an inherited
+                // accessor.
+                /* eslint-disable no-proto */
+                var prototype = object.__proto__;
+                object.__proto__ = prototypeOfObject;
+                // Deleting a property anyway since getter / setter may be
+                // defined on object itself.
+                delete object[property];
+                object[property] = descriptor.value;
+                // Setting original `__proto__` back now.
+                object.__proto__ = prototype;
+                /* eslint-enable no-proto */
+            } else {
+                object[property] = descriptor.value;
+            }
+        } else {
+            if (!supportsAccessors && (('get' in descriptor) || ('set' in descriptor))) {
+                throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
+            }
+            // If we got that far then getters and setters can be defined !!
+            if ('get' in descriptor) {
+                defineGetter(object, property, descriptor.get);
+            }
+            if ('set' in descriptor) {
+                defineSetter(object, property, descriptor.set);
+            }
+        }
+        return object;
+    };
+}
+
+// ES5 15.2.3.7
+// http://es5.github.com/#x15.2.3.7
+if (!Object.defineProperties || definePropertiesFallback) {
+    Object.defineProperties = function defineProperties(object, properties) {
+        // make a valiant attempt to use the real defineProperties
+        if (definePropertiesFallback) {
+            try {
+                return definePropertiesFallback.call(Object, object, properties);
+            } catch (exception) {
+                // try the shim if the real one doesn't work
+            }
+        }
+
+        Object.keys(properties).forEach(function (property) {
+            if (property !== '__proto__') {
+                Object.defineProperty(object, property, properties[property]);
+            }
+        });
+        return object;
+    };
+}
+
+// ES5 15.2.3.8
+// http://es5.github.com/#x15.2.3.8
+if (!Object.seal) {
+    Object.seal = function seal(object) {
+        if (Object(object) !== object) {
+            throw new TypeError('Object.seal can only be called on Objects.');
+        }
+        // this is misleading and breaks feature-detection, but
+        // allows "securable" code to "gracefully" degrade to working
+        // but insecure code.
+        return object;
+    };
+}
+
+// ES5 15.2.3.9
+// http://es5.github.com/#x15.2.3.9
+if (!Object.freeze) {
+    Object.freeze = function freeze(object) {
+        if (Object(object) !== object) {
+            throw new TypeError('Object.freeze can only be called on Objects.');
+        }
+        // this is misleading and breaks feature-detection, but
+        // allows "securable" code to "gracefully" degrade to working
+        // but insecure code.
+        return object;
+    };
+}
+
+// detect a Rhino bug and patch it
+try {
+    Object.freeze(function () {});
+} catch (exception) {
+    Object.freeze = (function (freezeObject) {
+        return function freeze(object) {
+            if (typeof object === 'function') {
+                return object;
+            } else {
+                return freezeObject(object);
+            }
+        };
+    }(Object.freeze));
+}
+
+// ES5 15.2.3.10
+// http://es5.github.com/#x15.2.3.10
+if (!Object.preventExtensions) {
+    Object.preventExtensions = function preventExtensions(object) {
+        if (Object(object) !== object) {
+            throw new TypeError('Object.preventExtensions can only be called on Objects.');
+        }
+        // this is misleading and breaks feature-detection, but
+        // allows "securable" code to "gracefully" degrade to working
+        // but insecure code.
+        return object;
+    };
+}
+
+// ES5 15.2.3.11
+// http://es5.github.com/#x15.2.3.11
+if (!Object.isSealed) {
+    Object.isSealed = function isSealed(object) {
+        if (Object(object) !== object) {
+            throw new TypeError('Object.isSealed can only be called on Objects.');
+        }
+        return false;
+    };
+}
+
+// ES5 15.2.3.12
+// http://es5.github.com/#x15.2.3.12
+if (!Object.isFrozen) {
+    Object.isFrozen = function isFrozen(object) {
+        if (Object(object) !== object) {
+            throw new TypeError('Object.isFrozen can only be called on Objects.');
+        }
+        return false;
+    };
+}
+
+// ES5 15.2.3.13
+// http://es5.github.com/#x15.2.3.13
+if (!Object.isExtensible) {
+    Object.isExtensible = function isExtensible(object) {
+        // 1. If Type(O) is not Object throw a TypeError exception.
+        if (Object(object) !== object) {
+            throw new TypeError('Object.isExtensible can only be called on Objects.');
+        }
+        // 2. Return the Boolean value of the [[Extensible]] internal property of O.
+        var name = '';
+        while (owns(object, name)) {
+            name += '?';
+        }
+        object[name] = true;
+        var returnValue = owns(object, name);
+        delete object[name];
+        return returnValue;
+    };
+}
+
+}));
diff --git a/static/videojs/ie8/videojs-ie8.min.js b/static/videojs/ie8/videojs-ie8.min.js
new file mode 100644
index 0000000..07ed619
--- /dev/null
+++ b/static/videojs/ie8/videojs-ie8.min.js
@@ -0,0 +1 @@
+!function(a,b){"undefined"==typeof a.HTMLVideoElement&&(b.createElement("video"),b.createElement("audio"),b.createElement("track")),function(a,b){"use strict";"function"==typeof define&&define.amd?define(b):"object"==typeof exports?module.exports=b():a.returnExports=b()}(this,function(){var b,c=Array,d=c.prototype,e=Object,f=e.prototype,g=Function.prototype,h=String,i=h.prototype,j=Number,k=j.prototype,l=d.slice,m=d.splice,n=d.push,o=d.unshift,p=d.concat,q=g.call,r=g.apply,s=Math.max,t=Math.min,u=f.toString,v="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,w=Function.prototype.toString,x=function(a){try{return w.call(a),!0}catch(b){return!1}},y="[object Function]",z="[object GeneratorFunction]";b=function(a){if("function"!=typeof a)return!1;if(v)return x(a);var b=u.call(a);return b===y||b===z};var A,B=RegExp.prototype.exec,C=function(a){try{return B.call(a),!0}catch(b){return!1}},D="[object RegExp]";A=function(a){return"object"!=typeof a?!1:v?C(a):u.call(a)===D};var E,F=String.prototype.valueOf,G=function(a){try{return F.call(a),!0}catch(b){return!1}},H="[object String]";E=function(a){return"string"==typeof a?!0:"object"!=typeof a?!1:v?G(a):u.call(a)===H};var I=e.defineProperty&&function(){try{var a={};e.defineProperty(a,"x",{enumerable:!1,value:a});for(var b in a)return!1;return a.x===a}catch(c){return!1}}(),J=function(a){var b;return b=I?function(a,b,c,d){!d&&b in a||e.defineProperty(a,b,{configurable:!0,enumerable:!1,writable:!0,value:c})}:function(a,b,c,d){!d&&b in a||(a[b]=c)},function(c,d,e){for(var f in d)a.call(d,f)&&b(c,f,d[f],e)}}(f.hasOwnProperty),K=function(a){var b=typeof a;return null===a||"object"!==b&&"function"!==b},L=j.isNaN||function(a){return a!==a},M={ToInteger:function(a){var b=+a;return L(b)?b=0:0!==b&&b!==1/0&&b!==-(1/0)&&(b=(b>0||-1)*Math.floor(Math.abs(b))),b},ToPrimitive:function(a){var c,d,e;if(K(a))return a;if(d=a.valueOf,b(d)&&(c=d.call(a),K(c)))return c;if(e=a.toString,b(e)&&(c=e.call(a),K(c)))return c;throw new TypeError},ToObject:function(a){if(null==a)throw new TypeError("can't convert "+a+" to object");return e(a)},ToUint32:function(a){return a>>>0}},N=function(){};J(g,{bind:function(a){var c=this;if(!b(c))throw new TypeError("Function.prototype.bind called on incompatible "+c);for(var d,f=l.call(arguments,1),g=function(){if(this instanceof d){var b=c.apply(this,p.call(f,l.call(arguments)));return e(b)===b?b:this}return c.apply(a,p.call(f,l.call(arguments)))},h=s(0,c.length-f.length),i=[],j=0;h>j;j++)n.call(i,"$"+j);return d=Function("binder","return function ("+i.join(",")+"){ return binder.apply(this, arguments); }")(g),c.prototype&&(N.prototype=c.prototype,d.prototype=new N,N.prototype=null),d}});var O=q.bind(f.hasOwnProperty),P=q.bind(f.toString),Q=q.bind(l),R=r.bind(l),S=q.bind(i.slice),T=q.bind(i.split),U=q.bind(i.indexOf),V=q.bind(n),W=q.bind(f.propertyIsEnumerable),X=q.bind(d.sort),Y=c.isArray||function(a){return"[object Array]"===P(a)},Z=1!==[].unshift(0);J(d,{unshift:function(){return o.apply(this,arguments),this.length}},Z),J(c,{isArray:Y});var $=e("a"),_="a"!==$[0]||!(0 in $),aa=function(a){var b=!0,c=!0,d=!1;if(a)try{a.call("foo",function(a,c,d){"object"!=typeof d&&(b=!1)}),a.call([1],function(){"use strict";c="string"==typeof this},"x")}catch(e){d=!0}return!!a&&!d&&b&&c};J(d,{forEach:function(a){var c,d=M.ToObject(this),e=_&&E(this)?T(this,""):d,f=-1,g=M.ToUint32(e.length);if(arguments.length>1&&(c=arguments[1]),!b(a))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++f<g;)f in e&&("undefined"==typeof c?a(e[f],f,d):a.call(c,e[f],f,d))}},!aa(d.forEach)),J(d,{map:function(a){var d,e=M.ToObject(this),f=_&&E(this)?T(this,""):e,g=M.ToUint32(f.length),h=c(g);if(arguments.length>1&&(d=arguments[1]),!b(a))throw new TypeError("Array.prototype.map callback must be a function");for(var i=0;g>i;i++)i in f&&("undefined"==typeof d?h[i]=a(f[i],i,e):h[i]=a.call(d,f[i],i,e));return h}},!aa(d.map)),J(d,{filter:function(a){var c,d,e=M.ToObject(this),f=_&&E(this)?T(this,""):e,g=M.ToUint32(f.length),h=[];if(arguments.length>1&&(d=arguments[1]),!b(a))throw new TypeError("Array.prototype.filter callback must be a function");for(var i=0;g>i;i++)i in f&&(c=f[i],("undefined"==typeof d?a(c,i,e):a.call(d,c,i,e))&&V(h,c));return h}},!aa(d.filter)),J(d,{every:function(a){var c,d=M.ToObject(this),e=_&&E(this)?T(this,""):d,f=M.ToUint32(e.length);if(arguments.length>1&&(c=arguments[1]),!b(a))throw new TypeError("Array.prototype.every callback must be a function");for(var g=0;f>g;g++)if(g in e&&!("undefined"==typeof c?a(e[g],g,d):a.call(c,e[g],g,d)))return!1;return!0}},!aa(d.every)),J(d,{some:function(a){var c,d=M.ToObject(this),e=_&&E(this)?T(this,""):d,f=M.ToUint32(e.length);if(arguments.length>1&&(c=arguments[1]),!b(a))throw new TypeError("Array.prototype.some callback must be a function");for(var g=0;f>g;g++)if(g in e&&("undefined"==typeof c?a(e[g],g,d):a.call(c,e[g],g,d)))return!0;return!1}},!aa(d.some));var ba=!1;d.reduce&&(ba="object"==typeof d.reduce.call("es5",function(a,b,c,d){return d})),J(d,{reduce:function(a){var c=M.ToObject(this),d=_&&E(this)?T(this,""):c,e=M.ToUint32(d.length);if(!b(a))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===e&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var f,g=0;if(arguments.length>=2)f=arguments[1];else for(;;){if(g in d){f=d[g++];break}if(++g>=e)throw new TypeError("reduce of empty array with no initial value")}for(;e>g;g++)g in d&&(f=a(f,d[g],g,c));return f}},!ba);var ca=!1;d.reduceRight&&(ca="object"==typeof d.reduceRight.call("es5",function(a,b,c,d){return d})),J(d,{reduceRight:function(a){var c=M.ToObject(this),d=_&&E(this)?T(this,""):c,e=M.ToUint32(d.length);if(!b(a))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===e&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var f,g=e-1;if(arguments.length>=2)f=arguments[1];else for(;;){if(g in d){f=d[g--];break}if(--g<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>g)return f;do g in d&&(f=a(f,d[g],g,c));while(g--);return f}},!ca);var da=d.indexOf&&-1!==[0,1].indexOf(1,2);J(d,{indexOf:function(a){var b=_&&E(this)?T(this,""):M.ToObject(this),c=M.ToUint32(b.length);if(0===c)return-1;var d=0;for(arguments.length>1&&(d=M.ToInteger(arguments[1])),d=d>=0?d:s(0,c+d);c>d;d++)if(d in b&&b[d]===a)return d;return-1}},da);var ea=d.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);J(d,{lastIndexOf:function(a){var b=_&&E(this)?T(this,""):M.ToObject(this),c=M.ToUint32(b.length);if(0===c)return-1;var d=c-1;for(arguments.length>1&&(d=t(d,M.ToInteger(arguments[1]))),d=d>=0?d:c-Math.abs(d);d>=0;d--)if(d in b&&a===b[d])return d;return-1}},ea);var fa=function(){var a=[1,2],b=a.splice();return 2===a.length&&Y(b)&&0===b.length}();J(d,{splice:function(a,b){return 0===arguments.length?[]:m.apply(this,arguments)}},!fa);var ga=function(){var a={};return d.splice.call(a,0,0,1),1===a.length}();J(d,{splice:function(a,b){if(0===arguments.length)return[];var c=arguments;return this.length=s(M.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof b&&(c=Q(arguments),c.length<2?V(c,this.length-a):c[1]=M.ToInteger(b)),m.apply(this,c)}},!ga);var ha=function(){var a=new c(1e5);return a[8]="x",a.splice(1,1),7===a.indexOf("x")}(),ia=function(){var a=256,b=[];return b[a]="a",b.splice(a+1,0,"b"),"a"===b[a]}();J(d,{splice:function(a,b){for(var c,d=M.ToObject(this),e=[],f=M.ToUint32(d.length),g=M.ToInteger(a),i=0>g?s(f+g,0):t(g,f),j=t(s(M.ToInteger(b),0),f-i),k=0;j>k;)c=h(i+k),O(d,c)&&(e[k]=d[c]),k+=1;var l,m=Q(arguments,2),n=m.length;if(j>n){for(k=i;f-j>k;)c=h(k+j),l=h(k+n),O(d,c)?d[l]=d[c]:delete d[l],k+=1;for(k=f;k>f-j+n;)delete d[k-1],k-=1}else if(n>j)for(k=f-j;k>i;)c=h(k+j-1),l=h(k+n-1),O(d,c)?d[l]=d[c]:delete d[l],k-=1;k=i;for(var o=0;o<m.length;++o)d[k]=m[o],k+=1;return d.length=f-j+n,e}},!ha||!ia);var ja,ka=d.join;try{ja="1,2,3"!==Array.prototype.join.call("123",",")}catch(la){ja=!0}ja&&J(d,{join:function(a){var b="undefined"==typeof a?",":a;return ka.call(E(this)?T(this,""):this,b)}},ja);var ma="1,2"!==[1,2].join(void 0);ma&&J(d,{join:function(a){var b="undefined"==typeof a?",":a;return ka.call(this,b)}},ma);var na=function(a){for(var b=M.ToObject(this),c=M.ToUint32(b.length),d=0;d<arguments.length;)b[c+d]=arguments[d],d+=1;return b.length=c+d,c+d},oa=function(){var a={},b=Array.prototype.push.call(a,void 0);return 1!==b||1!==a.length||"undefined"!=typeof a[0]||!O(a,0)}();J(d,{push:function(a){return Y(this)?n.apply(this,arguments):na.apply(this,arguments)}},oa);var pa=function(){var a=[],b=a.push(void 0);return 1!==b||1!==a.length||"undefined"!=typeof a[0]||!O(a,0)}();J(d,{push:na},pa),J(d,{slice:function(a,b){var c=E(this)?T(this,""):this;return R(c,arguments)}},_);var qa=function(){try{return[1,2].sort(null),[1,2].sort({}),!0}catch(a){}return!1}(),ra=function(){try{return[1,2].sort(/a/),!1}catch(a){}return!0}(),sa=function(){try{return[1,2].sort(void 0),!0}catch(a){}return!1}();J(d,{sort:function(a){if("undefined"==typeof a)return X(this);if(!b(a))throw new TypeError("Array.prototype.sort callback must be a function");return X(this,a)}},qa||!sa||!ra);var ta=!{toString:null}.propertyIsEnumerable("toString"),ua=function(){}.propertyIsEnumerable("prototype"),va=!O("x","0"),wa=function(a){var b=a.constructor;return b&&b.prototype===a},xa={$window:!0,$console:!0,$parent:!0,$self:!0,$frame:!0,$frames:!0,$frameElement:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$external:!0},ya=function(){if("undefined"==typeof a)return!1;for(var b in a)try{!xa["$"+b]&&O(a,b)&&null!==a[b]&&"object"==typeof a[b]&&wa(a[b])}catch(c){return!0}return!1}(),za=function(b){if("undefined"==typeof a||!ya)return wa(b);try{return wa(b)}catch(c){return!1}},Aa=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Ba=Aa.length,Ca=function(a){return"[object Arguments]"===P(a)},Da=function(a){return null!==a&&"object"==typeof a&&"number"==typeof a.length&&a.length>=0&&!Y(a)&&b(a.callee)},Ea=Ca(arguments)?Ca:Da;J(e,{keys:function(a){var c=b(a),d=Ea(a),e=null!==a&&"object"==typeof a,f=e&&E(a);if(!e&&!c&&!d)throw new TypeError("Object.keys called on a non-object");var g=[],i=ua&&c;if(f&&va||d)for(var j=0;j<a.length;++j)V(g,h(j));if(!d)for(var k in a)i&&"prototype"===k||!O(a,k)||V(g,h(k));if(ta)for(var l=za(a),m=0;Ba>m;m++){var n=Aa[m];l&&"constructor"===n||!O(a,n)||V(g,n)}return g}});var Fa=e.keys&&function(){return 2===e.keys(arguments).length}(1,2),Ga=e.keys&&function(){var a=e.keys(arguments);return 1!==arguments.length||1!==a.length||1!==a[0]}(1),Ha=e.keys;J(e,{keys:function(a){return Ha(Ea(a)?Q(a):a)}},!Fa||Ga);var Ia,Ja,Ka=0!==new Date(-0xc782b5b342b24).getUTCMonth(),La=new Date(-0x55d318d56a724),Ma=new Date(14496624e5),Na="Mon, 01 Jan -45875 11:59:59 GMT"!==La.toUTCString(),Oa=La.getTimezoneOffset();-720>Oa?(Ia="Tue Jan 02 -45875"!==La.toDateString(),Ja=!/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/.test(Ma.toString())):(Ia="Mon Jan 01 -45875"!==La.toDateString(),Ja=!/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-\+]\d\d\d\d(?: |$)/.test(Ma.toString()));var Pa=q.bind(Date.prototype.getFullYear),Qa=q.bind(Date.prototype.getMonth),Ra=q.bind(Date.prototype.getDate),Sa=q.bind(Date.prototype.getUTCFullYear),Ta=q.bind(Date.prototype.getUTCMonth),Ua=q.bind(Date.prototype.getUTCDate),Va=q.bind(Date.prototype.getUTCDay),Wa=q.bind(Date.prototype.getUTCHours),Xa=q.bind(Date.prototype.getUTCMinutes),Ya=q.bind(Date.prototype.getUTCSeconds),Za=q.bind(Date.prototype.getUTCMilliseconds),$a=["Sun","Mon","Tue","Wed","Thu","Fri"],_a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ab=function(a,b){return Ra(new Date(b,a,0))};J(Date.prototype,{getFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Pa(this);return 0>a&&Qa(this)>11?a+1:a},getMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Pa(this),b=Qa(this);return 0>a&&b>11?0:b},getDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Pa(this),b=Qa(this),c=Ra(this);if(0>a&&b>11){if(12===b)return c;var d=ab(0,a+1);return d-c+1}return c},getUTCFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Sa(this);return 0>a&&Ta(this)>11?a+1:a},getUTCMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Sa(this),b=Ta(this);return 0>a&&b>11?0:b},getUTCDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Sa(this),b=Ta(this),c=Ua(this);if(0>a&&b>11){if(12===b)return c;var d=ab(0,a+1);return d-c+1}return c}},Ka),J(Date.prototype,{toUTCString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=Va(this),b=Ua(this),c=Ta(this),d=Sa(this),e=Wa(this),f=Xa(this),g=Ya(this);return $a[a]+", "+(10>b?"0"+b:b)+" "+_a[c]+" "+d+" "+(10>e?"0"+e:e)+":"+(10>f?"0"+f:f)+":"+(10>g?"0"+g:g)+" GMT"}},Ka||Na),J(Date.prototype,{toDateString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=this.getDay(),b=this.getDate(),c=this.getMonth(),d=this.getFullYear();return $a[a]+" "+_a[c]+" "+(10>b?"0"+b:b)+" "+d}},Ka||Ia),(Ka||Ja)&&(Date.prototype.toString=function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var a=this.getDay(),b=this.getDate(),c=this.getMonth(),d=this.getFullYear(),e=this.getHours(),f=this.getMinutes(),g=this.getSeconds(),h=this.getTimezoneOffset(),i=Math.floor(Math.abs(h)/60),j=Math.floor(Math.abs(h)%60);return $a[a]+" "+_a[c]+" "+(10>b?"0"+b:b)+" "+d+" "+(10>e?"0"+e:e)+":"+(10>f?"0"+f:f)+":"+(10>g?"0"+g:g)+" GMT"+(h>0?"-":"+")+(10>i?"0"+i:i)+(10>j?"0"+j:j)},I&&e.defineProperty(Date.prototype,"toString",{configurable:!0,enumerable:!1,writable:!0}));var bb=-621987552e5,cb="-000001",db=Date.prototype.toISOString&&-1===new Date(bb).toISOString().indexOf(cb),eb=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();J(Date.prototype,{toISOString:function(){if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");var a=Sa(this),b=Ta(this);a+=Math.floor(b/12),b=(b%12+12)%12;var c=[b+1,Ua(this),Wa(this),Xa(this),Ya(this)];a=(0>a?"-":a>9999?"+":"")+S("00000"+Math.abs(a),a>=0&&9999>=a?-4:-6);for(var d=0;d<c.length;++d)c[d]=S("00"+c[d],-2);return a+"-"+Q(c,0,2).join("-")+"T"+Q(c,2).join(":")+"."+S("000"+Za(this),-3)+"Z"}},db||eb);var fb=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(bb).toJSON().indexOf(cb)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(a){return!1}}();fb||(Date.prototype.toJSON=function(a){var c=e(this),d=M.ToPrimitive(c);if("number"==typeof d&&!isFinite(d))return null;var f=c.toISOString;if(!b(f))throw new TypeError("toISOString property is not callable");return f.call(c)});var gb=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),hb=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),ib=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(ib||hb||!gb){var jb=Math.pow(2,31)-1,kb=L(new Date(1970,0,1,0,0,0,jb+1).getTime());Date=function(a){var b=function(c,d,e,f,g,i,j){var k,l=arguments.length;if(this instanceof a){var m=i,n=j;if(kb&&l>=7&&j>jb){var o=Math.floor(j/jb)*jb,p=Math.floor(o/1e3);m+=p,n-=1e3*p}k=1===l&&h(c)===c?new a(b.parse(c)):l>=7?new a(c,d,e,f,g,m,n):l>=6?new a(c,d,e,f,g,m):l>=5?new a(c,d,e,f,g):l>=4?new a(c,d,e,f):l>=3?new a(c,d,e):l>=2?new a(c,d):l>=1?new a(c):new a}else k=a.apply(this,arguments);return K(k)||J(k,{constructor:b},!0),k},c=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),d=[0,31,59,90,120,151,181,212,243,273,304,334,365],e=function(a,b){var c=b>1?1:0;return d[b]+Math.floor((a-1969+c)/4)-Math.floor((a-1901+c)/100)+Math.floor((a-1601+c)/400)+365*(a-1970)},f=function(b){var c=0,d=b;if(kb&&d>jb){var e=Math.floor(d/jb)*jb,f=Math.floor(e/1e3);c+=f,d-=1e3*f}return j(new a(1970,0,1,0,0,c,d))};for(var g in a)O(a,g)&&(b[g]=a[g]);J(b,{now:a.now,UTC:a.UTC},!0),b.prototype=a.prototype,J(b.prototype,{constructor:b},!0);var i=function(b){var d=c.exec(b);if(d){var g,h=j(d[1]),i=j(d[2]||1)-1,k=j(d[3]||1)-1,l=j(d[4]||0),m=j(d[5]||0),n=j(d[6]||0),o=Math.floor(1e3*j(d[7]||0)),p=Boolean(d[4]&&!d[8]),q="-"===d[9]?1:-1,r=j(d[10]||0),s=j(d[11]||0),t=m>0||n>0||o>0;return(t?24:25)>l&&60>m&&60>n&&1e3>o&&i>-1&&12>i&&24>r&&60>s&&k>-1&&k<e(h,i+1)-e(h,i)&&(g=60*(24*(e(h,i)+k)+l+r*q),g=1e3*(60*(g+m+s*q)+n)+o,p&&(g=f(g)),g>=-864e13&&864e13>=g)?g:NaN}return a.parse.apply(this,arguments)};return J(b,{parse:i}),b}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var lb=k.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),mb={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(a,b){for(var c=-1,d=b;++c<mb.size;)d+=a*mb.data[c],mb.data[c]=d%mb.base,d=Math.floor(d/mb.base)},divide:function(a){for(var b=mb.size,c=0;--b>=0;)c+=mb.data[b],mb.data[b]=Math.floor(c/a),c=c%a*mb.base},numToString:function(){for(var a=mb.size,b="";--a>=0;)if(""!==b||0===a||0!==mb.data[a]){var c=h(mb.data[a]);""===b?b=c:b+=S("0000000",0,7-c.length)+c}return b},pow:function Gb(a,b,c){return 0===b?c:b%2===1?Gb(a,b-1,c*a):Gb(a*a,b/2,c)},log:function(a){for(var b=0,c=a;c>=4096;)b+=12,c/=4096;for(;c>=2;)b+=1,c/=2;return b}},nb=function(a){var b,c,d,e,f,g,i,k;if(b=j(a),b=L(b)?0:Math.floor(b),0>b||b>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(c=j(this),L(c))return"NaN";if(-1e21>=c||c>=1e21)return h(c);if(d="",0>c&&(d="-",c=-c),e="0",c>1e-21)if(f=mb.log(c*mb.pow(2,69,1))-69,g=0>f?c*mb.pow(2,-f,1):c/mb.pow(2,f,1),g*=4503599627370496,f=52-f,f>0){for(mb.multiply(0,g),i=b;i>=7;)mb.multiply(1e7,0),i-=7;for(mb.multiply(mb.pow(10,i,1),0),i=f-1;i>=23;)mb.divide(1<<23),i-=23;mb.divide(1<<i),mb.multiply(1,1),mb.divide(2),e=mb.numToString()}else mb.multiply(0,g),mb.multiply(1<<-f,0),e=mb.numToString()+S("0.00000000000000000000",2,2+b);return b>0?(k=e.length,e=b>=k?d+S("0.0000000000000000000",0,b-k+2)+e:d+S(e,0,k-b)+"."+S(e,k-b)):e=d+e,e};J(k,{toFixed:nb},lb);var ob=function(){try{return"1"===1..toPrecision(void 0)}catch(a){return!0}}(),pb=k.toPrecision;J(k,{toPrecision:function(a){return"undefined"==typeof a?pb.call(this):pb.call(this,a)}},ob),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var a="undefined"==typeof/()??/.exec("")[1],b=Math.pow(2,32)-1;i.split=function(c,d){var e=String(this);if("undefined"==typeof c&&0===d)return[];if(!A(c))return T(this,c,d);var f,g,h,i,j=[],k=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(c.sticky?"y":""),l=0,m=new RegExp(c.source,k+"g");a||(f=new RegExp("^"+m.source+"$(?!\\s)",k));var o="undefined"==typeof d?b:M.ToUint32(d);for(g=m.exec(e);g&&(h=g.index+g[0].length,!(h>l&&(V(j,S(e,l,g.index)),!a&&g.length>1&&g[0].replace(f,function(){for(var a=1;a<arguments.length-2;a++)"undefined"==typeof arguments[a]&&(g[a]=void 0)}),g.length>1&&g.index<e.length&&n.apply(j,Q(g,1)),i=g[0].length,l=h,j.length>=o)));)m.lastIndex===g.index&&m.lastIndex++,g=m.exec(e);return l===e.length?(i||!m.test(""))&&V(j,""):V(j,S(e,l)),j.length>o?S(j,0,o):j}}():"0".split(void 0,0).length&&(i.split=function(a,b){return"undefined"==typeof a&&0===b?[]:T(this,a,b)});var qb=i.replace,rb=function(){var a=[];return"x".replace(/x(.)?/g,function(b,c){V(a,c)}),1===a.length&&"undefined"==typeof a[0]}();rb||(i.replace=function(a,c){var d=b(c),e=A(a)&&/\)[*?]/.test(a.source);if(d&&e){var f=function(b){var d=arguments.length,e=a.lastIndex;a.lastIndex=0;var f=a.exec(b)||[];return a.lastIndex=e,V(f,arguments[d-2],arguments[d-1]),c.apply(this,f)};return qb.call(this,a,f)}return qb.call(this,a,c)});var sb=i.substr,tb="".substr&&"b"!=="0b".substr(-1);J(i,{substr:function(a,b){var c=a;return 0>a&&(c=s(this.length+a,0)),sb.call(this,c,b)}},tb);var ub="	\n\f\r   ᠎              \u2028\u2029\ufeff",vb="​",wb="["+ub+"]",xb=new RegExp("^"+wb+wb+"*"),yb=new RegExp(wb+wb+"*$"),zb=i.trim&&(ub.trim()||!vb.trim());J(i,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return h(this).replace(xb,"").replace(yb,"")}},zb);var Ab=q.bind(String.prototype.trim),Bb=i.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);J(i,{lastIndexOf:function(a){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var b=h(this),c=h(a),d=arguments.length>1?j(arguments[1]):NaN,e=L(d)?1/0:M.ToInteger(d),f=t(s(e,0),b.length),g=c.length,i=f+g;i>0;){i=s(0,i-g);var k=U(S(b,i,f+g),c);if(-1!==k)return i+k}return-1}},Bb);var Cb=i.lastIndexOf;if(J(i,{lastIndexOf:function(a){return Cb.apply(this,arguments)}},1!==i.lastIndexOf.length),(8!==parseInt(ub+"08")||22!==parseInt(ub+"0x16"))&&(parseInt=function(a){var b=/^[\-+]?0[xX]/;return function(c,d){var e=Ab(c),f=j(d)||(b.test(e)?16:10);return a(e,f)}}(parseInt)),1/parseFloat("-0")!==-(1/0)&&(parseFloat=function(a){return function(b){var c=Ab(b),d=a(c);return 0===d&&"-"===S(c,0,1)?-0:d}}(parseFloat)),"RangeError: test"!==String(new RangeError("test"))){var Db=function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var a=this.name;"undefined"==typeof a?a="Error":"string"!=typeof a&&(a=h(a));var b=this.message;return"undefined"==typeof b?b="":"string"!=typeof b&&(b=h(b)),a?b?a+": "+b:a:b};Error.prototype.toString=Db}if(I){var Eb=function(a,b){if(W(a,b)){var c=Object.getOwnPropertyDescriptor(a,b);c.enumerable=!1,Object.defineProperty(a,b,c)}};Eb(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),Eb(Error.prototype,"name")}if("/a/gim"!==String(/a/gim)){var Fb=function(){var a="/"+this.source+"/";return this.global&&(a+="g"),this.ignoreCase&&(a+="i"),this.multiline&&(a+="m"),a};RegExp.prototype.toString=Fb}}),function(a,b){"use strict";"function"==typeof define&&define.amd?define(b):"object"==typeof exports?module.exports=b():a.returnExports=b()}(this,function(){var a,c,d,e,f=Function.call,g=Object.prototype,h=f.bind(g.hasOwnProperty),i=f.bind(g.propertyIsEnumerable),j=f.bind(g.toString),k=h(g,"__defineGetter__");k&&(a=f.bind(g.__defineGetter__),c=f.bind(g.__defineSetter__),d=f.bind(g.__lookupGetter__),e=f.bind(g.__lookupSetter__)),Object.getPrototypeOf||(Object.getPrototypeOf=function(a){var b=a.__proto__;return b||null===b?b:"[object Function]"===j(a.constructor)?a.constructor.prototype:a instanceof Object?g:null});var l=function(a){try{return a.sentinel=0,0===Object.getOwnPropertyDescriptor(a,"sentinel").value}catch(b){return!1}};if(Object.defineProperty){var m=l({}),n="undefined"==typeof b||l(b.createElement("div"));if(!n||!m)var o=Object.getOwnPropertyDescriptor}if(!Object.getOwnPropertyDescriptor||o){var p="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if("object"!=typeof a&&"function"!=typeof a||null===a)throw new TypeError(p+a);if(o)try{return o.call(Object,a,b)}catch(c){}var f;if(!h(a,b))return f;if(f={enumerable:i(a,b),configurable:!0},k){var j=a.__proto__,l=a!==g;l&&(a.__proto__=g);var m=d(a,b),n=e(a,b);if(l&&(a.__proto__=j),m||n)return m&&(f.get=m),n&&(f.set=n),f}return f.value=a[b],f.writable=!0,f}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),!Object.create){var q,r=!({__proto__:null}instanceof Object),s=function(){if(!b.domain)return!1;try{return!!new ActiveXObject("htmlfile")}catch(a){return!1}},t=function(){var a,b;return b=new ActiveXObject("htmlfile"),b.write("<script></script>"),b.close(),a=b.parentWindow.Object.prototype,b=null,a},u=function(){var a,c=b.createElement("iframe"),d=b.body||b.documentElement;return c.style.display="none",d.appendChild(c),c.src="javascript:",a=c.contentWindow.Object.prototype,d.removeChild(c),c=null,a};q=r||"undefined"==typeof b?function(){return{__proto__:null}}:function(){var a=s()?t():u();delete a.constructor,delete a.hasOwnProperty,delete a.propertyIsEnumerable,delete a.isPrototypeOf,delete a.toLocaleString,delete a.toString,delete a.valueOf;var b=function(){};return b.prototype=a,q=function(){return new b},new b},Object.create=function(a,b){var c,d=function(){};if(null===a)c=q();else{if("object"!=typeof a&&"function"!=typeof a)throw new TypeError("Object prototype may only be an Object or null");d.prototype=a,c=new d,c.__proto__=a}return void 0!==b&&Object.defineProperties(c,b),c}}var v=function(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){return!1}};if(Object.defineProperty){var w=v({}),x="undefined"==typeof b||v(b.createElement("div"));if(!w||!x)var y=Object.defineProperty,z=Object.defineProperties}if(!Object.defineProperty||y){var A="Property description must be an object: ",B="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(b,f,h){if("object"!=typeof b&&"function"!=typeof b||null===b)throw new TypeError(B+b);if("object"!=typeof h&&"function"!=typeof h||null===h)throw new TypeError(A+h);if(y)try{return y.call(Object,b,f,h)}catch(i){}if("value"in h)if(k&&(d(b,f)||e(b,f))){var j=b.__proto__;b.__proto__=g,delete b[f],b[f]=h.value,b.__proto__=j}else b[f]=h.value;else{if(!k&&("get"in h||"set"in h))throw new TypeError(C);"get"in h&&a(b,f,h.get),"set"in h&&c(b,f,h.set)}return b}}(!Object.defineProperties||z)&&(Object.defineProperties=function(a,b){if(z)try{return z.call(Object,a,b)}catch(c){}return Object.keys(b).forEach(function(c){"__proto__"!==c&&Object.defineProperty(a,c,b[c])}),a}),Object.seal||(Object.seal=function(a){if(Object(a)!==a)throw new TypeError("Object.seal can only be called on Objects.");return a}),Object.freeze||(Object.freeze=function(a){if(Object(a)!==a)throw new TypeError("Object.freeze can only be called on Objects.");return a});try{Object.freeze(function(){})}catch(D){Object.freeze=function(a){return function(b){return"function"==typeof b?b:a(b)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(a){if(Object(a)!==a)throw new TypeError("Object.preventExtensions can only be called on Objects.");return a}),Object.isSealed||(Object.isSealed=function(a){if(Object(a)!==a)throw new TypeError("Object.isSealed can only be called on Objects.");return!1}),Object.isFrozen||(Object.isFrozen=function(a){if(Object(a)!==a)throw new TypeError("Object.isFrozen can only be called on Objects.");return!1}),Object.isExtensible||(Object.isExtensible=function(a){if(Object(a)!==a)throw new TypeError("Object.isExtensible can only be called on Objects.");for(var b="";h(a,b);)b+="?";a[b]=!0;var c=h(a,b);return delete a[b],c})})}(window,document);
\ No newline at end of file
diff --git a/static/videojs/lang/ar.js b/static/videojs/lang/ar.js
new file mode 100644
index 0000000..4c49d62
--- /dev/null
+++ b/static/videojs/lang/ar.js
@@ -0,0 +1,34 @@
+videojs.addLanguage("ar",{
+ "Play": "تشغيل",
+ "Pause": "ايقاف",
+ "Current Time": "الوقت الحالي",
+ "Duration Time": "Dauer",
+ "Remaining Time": "الوقت المتبقي",
+ "Stream Type": "نوع التيار",
+ "LIVE": "مباشر",
+ "Loaded": "تم التحميل",
+ "Progress": "التقدم",
+ "Fullscreen": "ملء الشاشة",
+ "Non-Fullscreen": "غير ملء الشاشة",
+ "Mute": "صامت",
+ "Unmute": "غير الصامت",
+ "Playback Rate": "معدل التشغيل",
+ "Subtitles": "الترجمة",
+ "subtitles off": "ايقاف الترجمة",
+ "Captions": "التعليقات",
+ "captions off": "ايقاف التعليقات",
+ "Chapters": "فصول",
+ "You aborted the media playback": "لقد ألغيت تشغيل الفيديو",
+ "A network error caused the media download to fail part-way.": "تسبب خطأ في الشبكة بفشل تحميل الفيديو بالكامل.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "لا يمكن تحميل الفيديو بسبب فشل في الخادم أو الشبكة ، أو فشل بسبب عدم امكانية قراءة تنسيق الفيديو.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "تم ايقاف تشغيل الفيديو بسبب مشكلة فساد أو لأن الفيديو المستخدم يستخدم ميزات غير مدعومة من متصفحك.",
+ "No compatible source was found for this media.": "فشل العثور على أي مصدر متوافق مع هذا الفيديو.",
+ "Play Video": "تشغيل الفيديو",
+ "Close": "أغلق",
+ "Modal Window": "نافذة مشروطة",
+ "This is a modal window": "هذه نافذة مشروطة",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "يمكن غلق هذه النافذة المشروطة عن طريق الضغط على زر الخروج أو تفعيل زر الإغلاق",
+ ", opens captions settings dialog": ", تفتح نافذة  خيارات التعليقات",
+ ", opens subtitles settings dialog": ", تفتح نافذة  خيارات الترجمة",
+ ", selected": ", مختار"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/ba.js b/static/videojs/lang/ba.js
new file mode 100644
index 0000000..b7ca3da
--- /dev/null
+++ b/static/videojs/lang/ba.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("ba",{
+ "Play": "Pusti",
+ "Pause": "Pauza",
+ "Current Time": "Trenutno vrijeme",
+ "Duration Time": "Vrijeme trajanja",
+ "Remaining Time": "Preostalo vrijeme",
+ "Stream Type": "Način strimovanja",
+ "LIVE": "UŽIVO",
+ "Loaded": "Učitan",
+ "Progress": "Progres",
+ "Fullscreen": "Puni ekran",
+ "Non-Fullscreen": "Mali ekran",
+ "Mute": "Prigušen",
+ "Unmute": "Ne-prigušen",
+ "Playback Rate": "Stopa reprodukcije",
+ "Subtitles": "Podnaslov",
+ "subtitles off": "Podnaslov deaktiviran",
+ "Captions": "Titlovi",
+ "captions off": "Titlovi deaktivirani",
+ "Chapters": "Poglavlja",
+ "You aborted the media playback": "Isključili ste reprodukciju videa.",
+ "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
+ "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/bg.js b/static/videojs/lang/bg.js
new file mode 100644
index 0000000..34e48ec
--- /dev/null
+++ b/static/videojs/lang/bg.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("bg",{
+ "Play": "Възпроизвеждане",
+ "Pause": "Пауза",
+ "Current Time": "Текущо време",
+ "Duration Time": "Продължителност",
+ "Remaining Time": "Оставащо време",
+ "Stream Type": "Тип на потока",
+ "LIVE": "НА ЖИВО",
+ "Loaded": "Заредено",
+ "Progress": "Прогрес",
+ "Fullscreen": "Цял екран",
+ "Non-Fullscreen": "Спиране на цял екран",
+ "Mute": "Без звук",
+ "Unmute": "Със звук",
+ "Playback Rate": "Скорост на възпроизвеждане",
+ "Subtitles": "Субтитри",
+ "subtitles off": "Спряни субтитри",
+ "Captions": "Аудио надписи",
+ "captions off": "Спряни аудио надписи",
+ "Chapters": "Глави",
+ "You aborted the media playback": "Спряхте възпроизвеждането на видеото",
+ "A network error caused the media download to fail part-way.": "Грешка в мрежата провали изтеглянето на видеото.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Видеото не може да бъде заредено заради проблем със сървъра или мрежата или защото този формат не е поддържан.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Възпроизвеждането на видеото беше прекъснато заради проблем с файла или защото видеото използва опции които браузърът Ви не поддържа.",
+ "No compatible source was found for this media.": "Не беше намерен съвместим източник за това видео."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/ca.js b/static/videojs/lang/ca.js
new file mode 100644
index 0000000..03371ee
--- /dev/null
+++ b/static/videojs/lang/ca.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("ca",{
+ "Play": "Reproducció",
+ "Pause": "Pausa",
+ "Current Time": "Temps reproduït",
+ "Duration Time": "Durada total",
+ "Remaining Time": "Temps restant",
+ "Stream Type": "Tipus de seqüència",
+ "LIVE": "EN DIRECTE",
+ "Loaded": "Carregat",
+ "Progress": "Progrés",
+ "Fullscreen": "Pantalla completa",
+ "Non-Fullscreen": "Pantalla no completa",
+ "Mute": "Silencia",
+ "Unmute": "Amb so",
+ "Playback Rate": "Velocitat de reproducció",
+ "Subtitles": "Subtítols",
+ "subtitles off": "Subtítols desactivats",
+ "Captions": "Llegendes",
+ "captions off": "Llegendes desactivades",
+ "Chapters": "Capítols",
+ "You aborted the media playback": "Heu interromput la reproducció del vídeo.",
+ "A network error caused the media download to fail part-way.": "Un error de la xarxa ha interromput la baixada del vídeo.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "No s'ha pogut carregar el vídeo perquè el servidor o la xarxa han fallat, o bé perquè el seu format no és compatible.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducció de vídeo s'ha interrumput per un problema de corrupció de dades o bé perquè el vídeo demanava funcions que el vostre navegador no ofereix.",
+ "No compatible source was found for this media.": "No s'ha trobat cap font compatible amb el vídeo."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/cs.js b/static/videojs/lang/cs.js
new file mode 100644
index 0000000..f6004aa
--- /dev/null
+++ b/static/videojs/lang/cs.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("cs",{
+ "Play": "Přehrát",
+ "Pause": "Pauza",
+ "Current Time": "Aktuální čas",
+ "Duration Time": "Doba trvání",
+ "Remaining Time": "Zbývající čas",
+ "Stream Type": "Stream Type",
+ "LIVE": "ŽIVĚ",
+ "Loaded": "Načteno",
+ "Progress": "Stav",
+ "Fullscreen": "Celá obrazovka",
+ "Non-Fullscreen": "Zmenšená obrazovka",
+ "Mute": "Ztlumit zvuk",
+ "Unmute": "Přehrát zvuk",
+ "Playback Rate": "Rychlost přehrávání",
+ "Subtitles": "Titulky",
+ "subtitles off": "Titulky vypnuty",
+ "Captions": "Popisky",
+ "captions off": "Popisky vypnuty",
+ "Chapters": "Kapitoly",
+ "You aborted the media playback": "Přehrávání videa je přerušeno.",
+ "A network error caused the media download to fail part-way.": "Video nemohlo být načteno, kvůli chybě v síti.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video nemohlo být načteno, buď kvůli chybě serveru nebo sítě nebo proto, že daný formát není podporován.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Váš prohlížeč nepodporuje formát videa.",
+ "No compatible source was found for this media.": "Špatně zadaný zdroj videa."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/da.js b/static/videojs/lang/da.js
new file mode 100644
index 0000000..f6b3ada
--- /dev/null
+++ b/static/videojs/lang/da.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("da",{
+ "Play": "Afspil",
+ "Pause": "Pause",
+ "Current Time": "Aktuel tid",
+ "Duration Time": "Varighed",
+ "Remaining Time": "Resterende tid",
+ "Stream Type": "Stream-type",
+ "LIVE": "LIVE",
+ "Loaded": "Indlæst",
+ "Progress": "Status",
+ "Fullscreen": "Fuldskærm",
+ "Non-Fullscreen": "Luk fuldskærm",
+ "Mute": "Uden lyd",
+ "Unmute": "Med lyd",
+ "Playback Rate": "Afspilningsrate",
+ "Subtitles": "Undertekster",
+ "subtitles off": "Uden undertekster",
+ "Captions": "Undertekster for hørehæmmede",
+ "captions off": "Uden undertekster for hørehæmmede",
+ "Chapters": "Kapitler",
+ "You aborted the media playback": "Du afbrød videoafspilningen.",
+ "A network error caused the media download to fail part-way.": "En netværksfejl fik download af videoen til at fejle.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke indlæses, enten fordi serveren eller netværket fejlede, eller fordi formatet ikke er understøttet.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoafspilningen blev afbrudt på grund af ødelagte data eller fordi videoen benyttede faciliteter som din browser ikke understøtter.",
+ "No compatible source was found for this media.": "Fandt ikke en kompatibel kilde for denne media."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/de.js b/static/videojs/lang/de.js
new file mode 100644
index 0000000..9e79c66
--- /dev/null
+++ b/static/videojs/lang/de.js
@@ -0,0 +1,40 @@
+videojs.addLanguage("de",{
+ "Play": "Wiedergabe",
+ "Pause": "Pause",
+ "Current Time": "Aktueller Zeitpunkt",
+ "Duration Time": "Dauer",
+ "Remaining Time": "Verbleibende Zeit",
+ "Stream Type": "Streamtyp",
+ "LIVE": "LIVE",
+ "Loaded": "Geladen",
+ "Progress": "Status",
+ "Fullscreen": "Vollbild",
+ "Non-Fullscreen": "Kein Vollbild",
+ "Mute": "Ton aus",
+ "Unmute": "Ton ein",
+ "Playback Rate": "Wiedergabegeschwindigkeit",
+ "Subtitles": "Untertitel",
+ "subtitles off": "Untertitel aus",
+ "Captions": "Untertitel",
+ "captions off": "Untertitel aus",
+ "Chapters": "Kapitel",
+ "You aborted the media playback": "Sie haben die Videowiedergabe abgebrochen.",
+ "A network error caused the media download to fail part-way.": "Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.",
+ "No compatible source was found for this media.": "Für dieses Video wurde keine kompatible Quelle gefunden.",
+ "Play Video": "Video abspielen",
+ "Close": "Schließen",
+ "Modal Window": "Modales Fenster",
+ "This is a modal window": "Dies ist ein modales Fenster",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "Durch Drücken der Esc-Taste bzw. Betätigung der Schaltfläche \"Schließen\" wird dieses modale Fenster geschlossen.",
+ ", opens captions settings dialog": ", öffnet Einstellungen für Untertitel",
+ ", opens subtitles settings dialog": ", öffnet Einstellungen für Untertitel",
+ ", selected": ", ausgewählt",
+ "Close Modal Dialog": "Modales Fenster schließen",
+ "Descriptions": "Beschreibungen",
+ "descriptions off": "Beschreibungen aus",
+ "The media is encrypted and we do not have the keys to decrypt it.": "Die Entschlüsselungsschlüssel für den verschlüsselten Medieninhalt sind nicht verfügbar.",
+ ", opens descriptions settings dialog": ", öffnet Einstellungen für Beschreibungen",
+ "Audio Track": "Tonspur"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/el.js b/static/videojs/lang/el.js
new file mode 100644
index 0000000..e95433d
--- /dev/null
+++ b/static/videojs/lang/el.js
@@ -0,0 +1,34 @@
+videojs.addLanguage("el",{
+ "Play": "Aναπαραγωγή",
+ "Pause": "Παύση",
+ "Current Time": "Τρέχων χρόνος",
+ "Duration Time": "Συνολικός χρόνος",
+ "Remaining Time": "Υπολοιπόμενος χρόνος",
+ "Stream Type": "Τύπος ροής",
+ "LIVE": "ΖΩΝΤΑΝΑ",
+ "Loaded": "Φόρτωση επιτυχής",
+ "Progress": "Πρόοδος",
+ "Fullscreen": "Πλήρης οθόνη",
+ "Non-Fullscreen": "Έξοδος από πλήρη οθόνη",
+ "Mute": "Σίγαση",
+ "Unmute": "Kατάργηση σίγασης",
+ "Playback Rate": "Ρυθμός αναπαραγωγής",
+ "Subtitles": "Υπότιτλοι",
+ "subtitles off": "απόκρυψη υπότιτλων",
+ "Captions": "Λεζάντες",
+ "captions off": "απόκρυψη λεζάντων",
+ "Chapters": "Κεφάλαια",
+ "You aborted the media playback": "Ακυρώσατε την αναπαραγωγή",
+ "A network error caused the media download to fail part-way.": "Ένα σφάλμα δικτύου προκάλεσε την αποτυχία μεταφόρτωσης του αρχείου προς αναπαραγωγή.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Το αρχείο προς αναπαραγωγή δεν ήταν δυνατό να φορτωθεί είτε γιατί υπήρξε σφάλμα στον διακομιστή ή το δίκτυο, είτε γιατί ο τύπος του αρχείου δεν υποστηρίζεται.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Η αναπαραγωγή ακυρώθηκε είτε λόγω κατεστραμμένου αρχείου, είτε γιατί το αρχείο απαιτεί λειτουργίες που δεν υποστηρίζονται από το πρόγραμμα περιήγησης που χρησιμοποιείτε.",
+ "No compatible source was found for this media.": "Δεν βρέθηκε συμβατή πηγή αναπαραγωγής για το συγκεκριμένο αρχείο.",
+ "Play video": "Αναπαραγωγή βίντεο",
+ "Close": "Κλείσιμο",
+ "Modal Window": "Aναδυόμενο παράθυρο",
+ "This is a modal window": "Το παρών είναι ένα αναδυόμενο παράθυρο",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "Αυτό το παράθυρο μπορεί να εξαφανιστεί πατώντας το πλήκτρο Escape ή πατώντας το κουμπί κλεισίματος.",
+ ", opens captions settings dialog": ", εμφανίζει τις ρυθμίσεις για τις λεζάντες",
+ ", opens subtitles settings dialog": ", εμφανίζει τις ρυθμίσεις για τους υπότιτλους",
+ ", selected": ", επιλεγμένο"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/en.js b/static/videojs/lang/en.js
new file mode 100644
index 0000000..3cfb236
--- /dev/null
+++ b/static/videojs/lang/en.js
@@ -0,0 +1,40 @@
+videojs.addLanguage("en",{
+ "Play": "Play",
+ "Pause": "Pause",
+ "Current Time": "Current Time",
+ "Duration Time": "Duration Time",
+ "Remaining Time": "Remaining Time",
+ "Stream Type": "Stream Type",
+ "LIVE": "LIVE",
+ "Loaded": "Loaded",
+ "Progress": "Progress",
+ "Fullscreen": "Fullscreen",
+ "Non-Fullscreen": "Non-Fullscreen",
+ "Mute": "Mute",
+ "Unmute": "Unmute",
+ "Playback Rate": "Playback Rate",
+ "Subtitles": "Subtitles",
+ "subtitles off": "subtitles off",
+ "Captions": "Captions",
+ "captions off": "captions off",
+ "Chapters": "Chapters",
+ "Close Modal Dialog": "Close Modal Dialog",
+ "Descriptions": "Descriptions",
+ "descriptions off": "descriptions off",
+ "Audio Track": "Audio Track",
+ "You aborted the media playback": "You aborted the media playback",
+ "A network error caused the media download to fail part-way.": "A network error caused the media download to fail part-way.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "The media could not be loaded, either because the server or network failed or because the format is not supported.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",
+ "No compatible source was found for this media.": "No compatible source was found for this media.",
+ "The media is encrypted and we do not have the keys to decrypt it.": "The media is encrypted and we do not have the keys to decrypt it.",
+ "Play Video": "Play Video",
+ "Close": "Close",
+ "Modal Window": "Modal Window",
+ "This is a modal window": "This is a modal window",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "This modal can be closed by pressing the Escape key or activating the close button.",
+ ", opens captions settings dialog": ", opens captions settings dialog",
+ ", opens subtitles settings dialog": ", opens subtitles settings dialog",
+ ", opens descriptions settings dialog": ", opens descriptions settings dialog",
+ ", selected": ", selected"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/es.js b/static/videojs/lang/es.js
new file mode 100644
index 0000000..4096973
--- /dev/null
+++ b/static/videojs/lang/es.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("es",{
+ "Play": "Reproducción",
+ "Pause": "Pausa",
+ "Current Time": "Tiempo reproducido",
+ "Duration Time": "Duración total",
+ "Remaining Time": "Tiempo restante",
+ "Stream Type": "Tipo de secuencia",
+ "LIVE": "DIRECTO",
+ "Loaded": "Cargado",
+ "Progress": "Progreso",
+ "Fullscreen": "Pantalla completa",
+ "Non-Fullscreen": "Pantalla no completa",
+ "Mute": "Silenciar",
+ "Unmute": "No silenciado",
+ "Playback Rate": "Velocidad de reproducción",
+ "Subtitles": "Subtítulos",
+ "subtitles off": "Subtítulos desactivados",
+ "Captions": "Subtítulos especiales",
+ "captions off": "Subtítulos especiales desactivados",
+ "Chapters": "Capítulos",
+ "You aborted the media playback": "Ha interrumpido la reproducción del vídeo.",
+ "A network error caused the media download to fail part-way.": "Un error de red ha interrumpido la descarga del vídeo.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "No se ha podido cargar el vídeo debido a un fallo de red o del servidor o porque el formato es incompatible.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducción de vídeo se ha interrumpido por un problema de corrupción de datos o porque el vídeo precisa funciones que su navegador no ofrece.",
+ "No compatible source was found for this media.": "No se ha encontrado ninguna fuente compatible con este vídeo."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/fa.js b/static/videojs/lang/fa.js
new file mode 100644
index 0000000..b2e818e
--- /dev/null
+++ b/static/videojs/lang/fa.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("fa",{
+ "Play": "پخش",
+ "Pause": "وقفه",
+ "Current Time": "زمان کنونی",
+ "Duration Time": "مدت زمان",
+ "Remaining Time": "زمان باقیمانده",
+ "Stream Type": "نوع استریم",
+ "LIVE": "زنده",
+ "Loaded": "فراخوانی شده",
+ "Progress": "پیشرفت",
+ "Fullscreen": "تمام صفحه",
+ "Non-Fullscreen": "نمایش عادی",
+ "Mute": "بی صدا",
+ "Unmute": "بهمراه صدا",
+ "Playback Rate": "سرعت پخش",
+ "Subtitles": "زیرنویس",
+ "subtitles off": "بدون زیرنویس",
+ "Captions": "عنوان",
+ "captions off": "بدون عنوان",
+ "Chapters": "فصل",
+ "You aborted the media playback": "شما پخش را متوقف کردید.",
+ "A network error caused the media download to fail part-way.": "مشکل در دریافت ویدئو ...",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "فرمت پشتیبانی نمیشود یا خطایی روی داده است.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "مشکل در دریافت ویدئو ...",
+ "No compatible source was found for this media.": "هیچ ورودی ای برای این رسانه شناسایی نشد."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/fi.js b/static/videojs/lang/fi.js
new file mode 100644
index 0000000..157c3ac
--- /dev/null
+++ b/static/videojs/lang/fi.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("fi",{
+ "Play": "Toisto",
+ "Pause": "Tauko",
+ "Current Time": "Tämänhetkinen aika",
+ "Duration Time": "Kokonaisaika",
+ "Remaining Time": "Jäljellä oleva aika",
+ "Stream Type": "Lähetystyyppi",
+ "LIVE": "LIVE",
+ "Loaded": "Ladattu",
+ "Progress": "Edistyminen",
+ "Fullscreen": "Koko näyttö",
+ "Non-Fullscreen": "Koko näyttö pois",
+ "Mute": "Ääni pois",
+ "Unmute": "Ääni päällä",
+ "Playback Rate": "Toistonopeus",
+ "Subtitles": "Tekstitys",
+ "subtitles off": "Tekstitys pois",
+ "Captions": "Tekstitys",
+ "captions off": "Tekstitys pois",
+ "Chapters": "Kappaleet",
+ "You aborted the media playback": "Olet keskeyttänyt videotoiston.",
+ "A network error caused the media download to fail part-way.": "Verkkovirhe keskeytti videon latauksen.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videon lataus ei onnistunut joko palvelin- tai verkkovirheestä tai väärästä formaatista johtuen.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videon toisto keskeytyi, koska media on vaurioitunut tai käyttää käyttää toimintoja, joita selaimesi ei tue.",
+ "No compatible source was found for this media.": "Tälle videolle ei löytynyt yhteensopivaa lähdettä."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/fr.js b/static/videojs/lang/fr.js
new file mode 100644
index 0000000..ed59288
--- /dev/null
+++ b/static/videojs/lang/fr.js
@@ -0,0 +1,39 @@
+videojs.addLanguage("fr",{
+ "Play": "Lecture",
+ "Pause": "Pause",
+ "Current Time": "Temps actuel",
+ "Duration Time": "Durée",
+ "Remaining Time": "Temps restant",
+ "Stream Type": "Type de flux",
+ "LIVE": "EN DIRECT",
+ "Loaded": "Chargé",
+ "Progress": "Progression",
+ "Fullscreen": "Plein écran",
+ "Non-Fullscreen": "Fenêtré",
+ "Mute": "Sourdine",
+ "Unmute": "Son activé",
+ "Playback Rate": "Vitesse de lecture",
+ "Subtitles": "Sous-titres",
+ "subtitles off": "Sous-titres désactivés",
+ "Captions": "Sous-titres transcrits",
+ "captions off": "Sous-titres transcrits désactivés",
+ "Chapters": "Chapitres",
+ "Close Modal Dialog": "Fermer la boîte de dialogue modale",
+ "Descriptions": "Descriptions",
+ "descriptions off": "descriptions désactivées",
+ "Audio Track": "Piste audio",
+ "You aborted the media playback": "Vous avez interrompu la lecture de la vidéo.",
+ "A network error caused the media download to fail part-way.": "Une erreur de réseau a interrompu le téléchargement de la vidéo.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.",
+ "No compatible source was found for this media.": "Aucune source compatible n'a été trouvée pour cette vidéo.",
+ "Play Video": "Lire la vidéo",
+ "Close": "Fermer",
+ "Modal Window": "Fenêtre modale",
+ "This is a modal window": "Ceci est une fenêtre modale",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "Ce modal peut être fermé en appuyant sur la touche Échap ou activer le bouton de fermeture.",
+ ", opens captions settings dialog": ", ouvrir les paramètres des sous-titres transcrits",
+ ", opens subtitles settings dialog": ", ouvrir les paramètres des sous-titres",
+ ", opens descriptions settings dialog": ", ouvrir les paramètres des descriptions",
+ ", selected": ", sélectionné"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/hr.js b/static/videojs/lang/hr.js
new file mode 100644
index 0000000..5e32a22
--- /dev/null
+++ b/static/videojs/lang/hr.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("hr",{
+ "Play": "Pusti",
+ "Pause": "Pauza",
+ "Current Time": "Trenutno vrijeme",
+ "Duration Time": "Vrijeme trajanja",
+ "Remaining Time": "Preostalo vrijeme",
+ "Stream Type": "Način strimovanja",
+ "LIVE": "UŽIVO",
+ "Loaded": "Učitan",
+ "Progress": "Progres",
+ "Fullscreen": "Puni ekran",
+ "Non-Fullscreen": "Mali ekran",
+ "Mute": "Prigušen",
+ "Unmute": "Ne-prigušen",
+ "Playback Rate": "Stopa reprodukcije",
+ "Subtitles": "Podnaslov",
+ "subtitles off": "Podnaslov deaktiviran",
+ "Captions": "Titlovi",
+ "captions off": "Titlovi deaktivirani",
+ "Chapters": "Poglavlja",
+ "You aborted the media playback": "Isključili ste reprodukciju videa.",
+ "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
+ "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/hu.js b/static/videojs/lang/hu.js
new file mode 100644
index 0000000..5b5123d
--- /dev/null
+++ b/static/videojs/lang/hu.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("hu",{
+ "Play": "Lejátszás",
+ "Pause": "Szünet",
+ "Current Time": "Aktuális időpont",
+ "Duration Time": "Hossz",
+ "Remaining Time": "Hátralévő idő",
+ "Stream Type": "Adatfolyam típusa",
+ "LIVE": "ÉLŐ",
+ "Loaded": "Betöltve",
+ "Progress": "Állapot",
+ "Fullscreen": "Teljes képernyő",
+ "Non-Fullscreen": "Normál méret",
+ "Mute": "Némítás",
+ "Unmute": "Némítás kikapcsolva",
+ "Playback Rate": "Lejátszási sebesség",
+ "Subtitles": "Feliratok",
+ "subtitles off": "Feliratok kikapcsolva",
+ "Captions": "Magyarázó szöveg",
+ "captions off": "Magyarázó szöveg kikapcsolva",
+ "Chapters": "Fejezetek",
+ "You aborted the media playback": "Leállította a lejátszást",
+ "A network error caused the media download to fail part-way.": "Hálózati hiba miatt a videó részlegesen töltődött le.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "A videó nem tölthető be hálózati vagy kiszolgálói hiba miatt, vagy a formátuma nem támogatott.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A lejátszás adatsérülés miatt leállt, vagy a videó egyes tulajdonságait a böngészője nem támogatja.",
+ "No compatible source was found for this media.": "Nincs kompatibilis forrás ehhez a videóhoz."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/it.js b/static/videojs/lang/it.js
new file mode 100644
index 0000000..1f7394b
--- /dev/null
+++ b/static/videojs/lang/it.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("it",{
+ "Play": "Play",
+ "Pause": "Pausa",
+ "Current Time": "Orario attuale",
+ "Duration Time": "Durata",
+ "Remaining Time": "Tempo rimanente",
+ "Stream Type": "Tipo del Streaming",
+ "LIVE": "LIVE",
+ "Loaded": "Caricato",
+ "Progress": "Stato",
+ "Fullscreen": "Schermo intero",
+ "Non-Fullscreen": "Chiudi schermo intero",
+ "Mute": "Muto",
+ "Unmute": "Audio",
+ "Playback Rate": "Tasso di riproduzione",
+ "Subtitles": "Sottotitoli",
+ "subtitles off": "Senza sottotitoli",
+ "Captions": "Sottotitoli non udenti",
+ "captions off": "Senza sottotitoli non udenti",
+ "Chapters": "Capitolo",
+ "You aborted the media playback": "La riproduzione del filmato è stata interrotta.",
+ "A network error caused the media download to fail part-way.": "Il download del filmato è stato interrotto a causa di un problema rete.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Il filmato non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La riproduzione del filmato è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.",
+ "No compatible source was found for this media.": "Non ci sono fonti compatibili per questo filmato."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/ja.js b/static/videojs/lang/ja.js
new file mode 100644
index 0000000..6c853b5
--- /dev/null
+++ b/static/videojs/lang/ja.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("ja",{
+ "Play": "再生",
+ "Pause": "一時停止",
+ "Current Time": "現在の時間",
+ "Duration Time": "長さ",
+ "Remaining Time": "残りの時間",
+ "Stream Type": "ストリームの種類",
+ "LIVE": "ライブ",
+ "Loaded": "ロード済み",
+ "Progress": "進行状況",
+ "Fullscreen": "フルスクリーン",
+ "Non-Fullscreen": "フルスクリーン以外",
+ "Mute": "ミュート",
+ "Unmute": "ミュート解除",
+ "Playback Rate": "再生レート",
+ "Subtitles": "サブタイトル",
+ "subtitles off": "サブタイトル オフ",
+ "Captions": "キャプション",
+ "captions off": "キャプション オフ",
+ "Chapters": "チャプター",
+ "You aborted the media playback": "動画再生を中止しました",
+ "A network error caused the media download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました",
+ "No compatible source was found for this media.": "この動画に対して互換性のあるソースが見つかりませんでした"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/ko.js b/static/videojs/lang/ko.js
new file mode 100644
index 0000000..ee3ce2a
--- /dev/null
+++ b/static/videojs/lang/ko.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("ko",{
+ "Play": "재생",
+ "Pause": "일시중지",
+ "Current Time": "현재 시간",
+ "Duration Time": "지정 기간",
+ "Remaining Time": "남은 시간",
+ "Stream Type": "스트리밍 유형",
+ "LIVE": "라이브",
+ "Loaded": "로드됨",
+ "Progress": "진행",
+ "Fullscreen": "전체 화면",
+ "Non-Fullscreen": "전체 화면 해제",
+ "Mute": "음소거",
+ "Unmute": "음소거 해제",
+ "Playback Rate": "재생 비율",
+ "Subtitles": "서브타이틀",
+ "subtitles off": "서브타이틀 끄기",
+ "Captions": "자막",
+ "captions off": "자막 끄기",
+ "Chapters": "챕터",
+ "You aborted the media playback": "비디오 재생을 취소했습니다.",
+ "A network error caused the media download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.",
+ "No compatible source was found for this media.": "비디오에 호환되지 않는 소스가 있습니다."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/nb.js b/static/videojs/lang/nb.js
new file mode 100644
index 0000000..e4bbcc9
--- /dev/null
+++ b/static/videojs/lang/nb.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("nb",{
+ "Play": "Spill",
+ "Pause": "Pause",
+ "Current Time": "Aktuell tid",
+ "Duration Time": "Varighet",
+ "Remaining Time": "Gjenstående tid",
+ "Stream Type": "Type strøm",
+ "LIVE": "DIREKTE",
+ "Loaded": "Lastet inn",
+ "Progress": "Status",
+ "Fullscreen": "Fullskjerm",
+ "Non-Fullscreen": "Lukk fullskjerm",
+ "Mute": "Lyd av",
+ "Unmute": "Lyd på",
+ "Playback Rate": "Avspillingsrate",
+ "Subtitles": "Undertekst på",
+ "subtitles off": "Undertekst av",
+ "Captions": "Undertekst for hørselshemmede på",
+ "captions off": "Undertekst for hørselshemmede av",
+ "Chapters": "Kapitler",
+ "You aborted the media playback": "Du avbrøt avspillingen.",
+ "A network error caused the media download to fail part-way.": "En nettverksfeil avbrøt nedlasting av videoen.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke lastes ned, på grunn av nettverksfeil eller serverfeil, eller fordi formatet ikke er støttet.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspillingen ble avbrudt på grunn av ødelagte data eller fordi videoen ville gjøre noe som nettleseren din ikke har støtte for.",
+ "No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/nl.js b/static/videojs/lang/nl.js
new file mode 100644
index 0000000..6834766
--- /dev/null
+++ b/static/videojs/lang/nl.js
@@ -0,0 +1,37 @@
+videojs.addLanguage("nl",{
+ "Play": "Afspelen",
+ "Pause": "Pauze",
+ "Current Time": "Huidige tijd",
+ "Duration Time": "Looptijd",
+ "Remaining Time": "Resterende tijd",
+ "Stream Type": "Streamtype",
+ "LIVE": "LIVE",
+ "Loaded": "Geladen",
+ "Progress": "Status",
+ "Fullscreen": "Volledig scherm",
+ "Non-Fullscreen": "Geen volledig scherm",
+ "Mute": "Geluid uit",
+ "Unmute": "Geluid aan",
+ "Playback Rate": "Weergavesnelheid",
+ "Subtitles": "Ondertiteling",
+ "subtitles off": "ondertiteling uit",
+ "Captions": "Bijschriften",
+ "captions off": "bijschriften uit",
+ "Chapters": "Hoofdstukken",
+ "Descriptions": "Beschrijvingen",
+ "descriptions off": "beschrijvingen off",
+ "You aborted the media playback": "U hebt de mediaweergave afgebroken.",
+ "A network error caused the media download to fail part-way.": "De mediadownload is mislukt door een netwerkfout.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "De media kon niet worden geladen, vanwege een server- of netwerkfout of doordat het formaat niet wordt ondersteund.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "De mediaweergave is afgebroken vanwege beschadigde data of het mediabestand gebruikt functies die niet door uw browser worden ondersteund.",
+ "No compatible source was found for this media.": "Voor deze media is geen ondersteunde bron gevonden.",
+ "Play Video": "Video Afspelen",
+ "Close": "Sluiten",
+ "Modal Window": "Modal Venster",
+ "This is a modal window": "Dit is een modaal venster",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "Dit modaal venster kan gesloten worden door op Escape te drukken of de 'sluiten' knop te activeren.",
+ ", opens captions settings dialog": ", opent bijschriften instellingen venster",
+ ", opens subtitles settings dialog": ", opent ondertiteling instellingen venster",
+ ", opens descriptions settings dialog": ", opent beschrijvingen instellingen venster",
+ ", selected": ", selected"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/nn.js b/static/videojs/lang/nn.js
new file mode 100644
index 0000000..19f625e
--- /dev/null
+++ b/static/videojs/lang/nn.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("nn",{
+ "Play": "Spel",
+ "Pause": "Pause",
+ "Current Time": "Aktuell tid",
+ "Duration Time": "Varigheit",
+ "Remaining Time": "Tid attende",
+ "Stream Type": "Type straum",
+ "LIVE": "DIREKTE",
+ "Loaded": "Lasta inn",
+ "Progress": "Status",
+ "Fullscreen": "Fullskjerm",
+ "Non-Fullscreen": "Stenga fullskjerm",
+ "Mute": "Ljod av",
+ "Unmute": "Ljod på",
+ "Playback Rate": "Avspelingsrate",
+ "Subtitles": "Teksting på",
+ "subtitles off": "Teksting av",
+ "Captions": "Teksting for høyrselshemma på",
+ "captions off": "Teksting for høyrselshemma av",
+ "Chapters": "Kapitel",
+ "You aborted the media playback": "Du avbraut avspelinga.",
+ "A network error caused the media download to fail part-way.": "Ein nettverksfeil avbraut nedlasting av videoen.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikkje lastas ned, på grunn av ein nettverksfeil eller serverfeil, eller av di formatet ikkje er stoda.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspelinga blei broten på grunn av øydelagde data eller av di videoen ville gjera noe som nettlesaren din ikkje stodar.",
+ "No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/pl.js b/static/videojs/lang/pl.js
new file mode 100644
index 0000000..1946728
--- /dev/null
+++ b/static/videojs/lang/pl.js
@@ -0,0 +1,34 @@
+videojs.addLanguage("pl",{
+ "Play": "Odtwarzaj",
+ "Pause": "Pauza",
+ "Current Time": "Aktualny czas",
+ "Duration Time": "Czas trwania",
+ "Remaining Time": "Pozostały czas",
+ "Stream Type": "Typ strumienia",
+ "LIVE": "NA ŻYWO",
+ "Loaded": "Załadowany",
+ "Progress": "Status",
+ "Fullscreen": "Pełny ekran",
+ "Non-Fullscreen": "Pełny ekran niedostępny",
+ "Mute": "Wyłącz dźwięk",
+ "Unmute": "Włącz dźwięk",
+ "Playback Rate": "Szybkość odtwarzania",
+ "Subtitles": "Napisy",
+ "subtitles off": "Napisy wyłączone",
+ "Captions": "Transkrypcja",
+ "captions off": "Transkrypcja wyłączona",
+ "Chapters": "Rozdziały",
+ "You aborted the media playback": "Odtwarzanie zostało przerwane",
+ "A network error caused the media download to fail part-way.": "Problemy z siecią spowodowały błąd przy pobieraniu materiału wideo.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Materiał wideo nie może być załadowany, ponieważ wystąpił problem z siecią lub format nie jest obsługiwany",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Odtwarzanie materiału wideo zostało przerwane z powodu uszkodzonego pliku wideo lub z powodu błędu funkcji, które nie są wspierane przez przeglądarkę.",
+ "No compatible source was found for this media.": "Dla tego materiału wideo nie znaleziono kompatybilnego źródła.",
+ "Play video": "Odtwarzaj wideo",
+ "Close": "Zamknij",
+ "Modal Window": "Okno Modala",
+ "This is a modal window": "To jest okno modala",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "Ten modal możesz zamknąć naciskając przycisk Escape albo wybierając przycisk Zamknij.",
+ ", opens captions settings dialog": ", otwiera okno dialogowe ustawień transkrypcji",
+ ", opens subtitles settings dialog": ", otwiera okno dialogowe napisów",
+ ", selected": ", zaznaczone"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/pt-BR.js b/static/videojs/lang/pt-BR.js
new file mode 100644
index 0000000..5e94fa1
--- /dev/null
+++ b/static/videojs/lang/pt-BR.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("pt-BR",{
+ "Play": "Tocar",
+ "Pause": "Pausar",
+ "Current Time": "Tempo",
+ "Duration Time": "Duração",
+ "Remaining Time": "Tempo Restante",
+ "Stream Type": "Tipo de Stream",
+ "LIVE": "AO VIVO",
+ "Loaded": "Carregado",
+ "Progress": "Progresso",
+ "Fullscreen": "Tela Cheia",
+ "Non-Fullscreen": "Tela Normal",
+ "Mute": "Mudo",
+ "Unmute": "Habilitar Som",
+ "Playback Rate": "Velocidade",
+ "Subtitles": "Legendas",
+ "subtitles off": "Sem Legendas",
+ "Captions": "Anotações",
+ "captions off": "Sem Anotações",
+ "Chapters": "Capítulos",
+ "You aborted the media playback": "Você parou a execução do vídeo.",
+ "A network error caused the media download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.",
+ "No compatible source was found for this media.": "Não foi encontrada fonte de vídeo compatível."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/ru.js b/static/videojs/lang/ru.js
new file mode 100644
index 0000000..4125eea
--- /dev/null
+++ b/static/videojs/lang/ru.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("ru",{
+ "Play": "Воспроизвести",
+ "Pause": "Приостановить",
+ "Current Time": "Текущее время",
+ "Duration Time": "Продолжительность",
+ "Remaining Time": "Оставшееся время",
+ "Stream Type": "Тип потока",
+ "LIVE": "ОНЛАЙН",
+ "Loaded": "Загрузка",
+ "Progress": "Прогресс",
+ "Fullscreen": "Полноэкранный режим",
+ "Non-Fullscreen": "Неполноэкранный режим",
+ "Mute": "Без звука",
+ "Unmute": "Со звуком",
+ "Playback Rate": "Скорость воспроизведения",
+ "Subtitles": "Субтитры",
+ "subtitles off": "Субтитры выкл.",
+ "Captions": "Подписи",
+ "captions off": "Подписи выкл.",
+ "Chapters": "Главы",
+ "You aborted the media playback": "Вы прервали воспроизведение видео",
+ "A network error caused the media download to fail part-way.": "Ошибка сети вызвала сбой во время загрузки видео.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Невозможно загрузить видео из-за сетевого или серверного сбоя либо формат не поддерживается.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Воспроизведение видео было приостановлено из-за повреждения либо в связи с тем, что видео использует функции, неподдерживаемые вашим браузером.",
+ "No compatible source was found for this media.": "Совместимые источники для этого видео отсутствуют."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/sr.js b/static/videojs/lang/sr.js
new file mode 100644
index 0000000..7c042b2
--- /dev/null
+++ b/static/videojs/lang/sr.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("sr",{
+ "Play": "Pusti",
+ "Pause": "Pauza",
+ "Current Time": "Trenutno vrijeme",
+ "Duration Time": "Vrijeme trajanja",
+ "Remaining Time": "Preostalo vrijeme",
+ "Stream Type": "Način strimovanja",
+ "LIVE": "UŽIVO",
+ "Loaded": "Učitan",
+ "Progress": "Progres",
+ "Fullscreen": "Puni ekran",
+ "Non-Fullscreen": "Mali ekran",
+ "Mute": "Prigušen",
+ "Unmute": "Ne-prigušen",
+ "Playback Rate": "Stopa reprodukcije",
+ "Subtitles": "Podnaslov",
+ "subtitles off": "Podnaslov deaktiviran",
+ "Captions": "Titlovi",
+ "captions off": "Titlovi deaktivirani",
+ "Chapters": "Poglavlja",
+ "You aborted the media playback": "Isključili ste reprodukciju videa.",
+ "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.",
+ "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/sv.js b/static/videojs/lang/sv.js
new file mode 100644
index 0000000..48ea77b
--- /dev/null
+++ b/static/videojs/lang/sv.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("sv",{
+ "Play": "Spela",
+ "Pause": "Pausa",
+ "Current Time": "Aktuell tid",
+ "Duration Time": "Total tid",
+ "Remaining Time": "Återstående tid",
+ "Stream Type": "Strömningstyp",
+ "LIVE": "LIVE",
+ "Loaded": "Laddad",
+ "Progress": "Förlopp",
+ "Fullscreen": "Fullskärm",
+ "Non-Fullscreen": "Ej fullskärm",
+ "Mute": "Ljud av",
+ "Unmute": "Ljud på",
+ "Playback Rate": "Uppspelningshastighet",
+ "Subtitles": "Text på",
+ "subtitles off": "Text av",
+ "Captions": "Text på",
+ "captions off": "Text av",
+ "Chapters": "Kapitel",
+ "You aborted the media playback": "Du har avbrutit videouppspelningen.",
+ "A network error caused the media download to fail part-way.": "Ett nätverksfel gjorde att nedladdningen av videon avbröts.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Det gick inte att ladda videon, antingen på grund av ett server- eller nätverksfel, eller för att formatet inte stöds.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Uppspelningen avbröts på grund av att videon är skadad, eller också för att videon använder funktioner som din webbläsare inte stöder.",
+ "No compatible source was found for this media.": "Det gick inte att hitta någon kompatibel källa för den här videon."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/tr.js b/static/videojs/lang/tr.js
new file mode 100644
index 0000000..8a160dc
--- /dev/null
+++ b/static/videojs/lang/tr.js
@@ -0,0 +1,34 @@
+videojs.addLanguage("tr",{
+ "Play": "Oynat",
+ "Pause": "Duraklat",
+ "Current Time": "Süre",
+ "Duration Time": "Toplam Süre",
+ "Remaining Time": "Kalan Süre",
+ "Stream Type": "Yayın Tipi",
+ "LIVE": "CANLI",
+ "Loaded": "Yüklendi",
+ "Progress": "Yükleniyor",
+ "Fullscreen": "Tam Ekran",
+ "Non-Fullscreen": "Küçük Ekran",
+ "Mute": "Ses Kapa",
+ "Unmute": "Ses Aç",
+ "Playback Rate": "Oynatma Hızı",
+ "Subtitles": "Altyazı",
+ "subtitles off": "Altyazı Kapalı",
+ "Captions": "Ek Açıklamalar",
+ "captions off": "Ek Açıklamalar Kapalı",
+ "Chapters": "Bölümler",
+ "You aborted the media playback": "Video oynatmayı iptal ettiniz",
+ "A network error caused the media download to fail part-way.": "Video indirilirken bağlantı sorunu oluştu.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video oynatılamadı, ağ ya da sunucu hatası veya belirtilen format desteklenmiyor.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Tarayıcınız desteklemediği için videoda hata oluştu.",
+ "No compatible source was found for this media.": "Video için kaynak bulunamadı.",
+ "Play Video": "Videoyu Oynat",
+ "Close": "Kapat",
+ "Modal Window": "Modal Penceresi",
+ "This is a modal window": "Bu bir modal penceresidir",
+ "This modal can be closed by pressing the Escape key or activating the close button.": "Bu modal ESC tuşuna basarak ya da kapata tıklanarak kapatılabilir.",
+ ", opens captions settings dialog": ", ek açıklama ayarları menüsünü açar",
+ ", opens subtitles settings dialog": ", altyazı ayarları menüsünü açar",
+ ", selected": ", seçildi"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/uk.js b/static/videojs/lang/uk.js
new file mode 100644
index 0000000..626924a
--- /dev/null
+++ b/static/videojs/lang/uk.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("uk",{
+ "Play": "Відтворити",
+ "Pause": "Призупинити",
+ "Current Time": "Поточний час",
+ "Duration Time": "Тривалість",
+ "Remaining Time": "Час, що залишився",
+ "Stream Type": "Тип потоку",
+ "LIVE": "НАЖИВО",
+ "Loaded": "Завантаження",
+ "Progress": "Прогрес",
+ "Fullscreen": "Повноекранний режим",
+ "Non-Fullscreen": "Неповноекранний режим",
+ "Mute": "Без звуку",
+ "Unmute": "Зі звуком",
+ "Playback Rate": "Швидкість відтворення",
+ "Subtitles": "Субтитри",
+ "subtitles off": "Без субтитрів",
+ "Captions": "Підписи",
+ "captions off": "Без підписів",
+ "Chapters": "Розділи",
+ "You aborted the media playback": "Ви припинили відтворення відео",
+ "A network error caused the media download to fail part-way.": "Помилка мережі викликала збій під час завантаження відео.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Неможливо завантажити відео через мережевий чи серверний збій або формат не підтримується.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Відтворення відео було припинено через пошкодження або у зв'язку з тим, що відео використовує функції, які не підтримуються вашим браузером.",
+ "No compatible source was found for this media.": "Сумісні джерела для цього відео відсутні."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/vi.js b/static/videojs/lang/vi.js
new file mode 100644
index 0000000..246710c
--- /dev/null
+++ b/static/videojs/lang/vi.js
@@ -0,0 +1,26 @@
+videojs.addLanguage("vi",{
+ "Play": "Phát",
+ "Pause": "Tạm dừng",
+ "Current Time": "Thời gian hiện tại",
+ "Duration Time": "Độ dài",
+ "Remaining Time": "Thời gian còn lại",
+ "Stream Type": "Kiểu Stream",
+ "LIVE": "TRỰC TIẾP",
+ "Loaded": "Đã tải",
+ "Progress": "Tiến trình",
+ "Fullscreen": "Toàn màn hình",
+ "Non-Fullscreen": "Thoát toàn màn hình",
+ "Mute": "Tắt tiếng",
+ "Unmute": "Bật âm thanh",
+ "Playback Rate": "Tốc độ phát",
+ "Subtitles": "Phụ đề",
+ "subtitles off": "Tắt phụ đề",
+ "Captions": "Chú thích",
+ "captions off": "Tắt chú thích",
+ "Chapters": "Chương",
+ "You aborted the media playback": "Bạn đã hủy việc phát media.",
+ "A network error caused the media download to fail part-way.": "Một lỗi mạng dẫn đến việc tải media bị lỗi.",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video không tải được, mạng hay server có lỗi hoặc định dạng không được hỗ trợ.",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Phát media đã bị hủy do một sai lỗi hoặc media sử dụng những tính năng trình duyệt không hỗ trợ.",
+ "No compatible source was found for this media.": "Không có nguồn tương thích cho media này."
+});
\ No newline at end of file
diff --git a/static/videojs/lang/zh-CN.js b/static/videojs/lang/zh-CN.js
new file mode 100644
index 0000000..043c2a2
--- /dev/null
+++ b/static/videojs/lang/zh-CN.js
@@ -0,0 +1,27 @@
+videojs.addLanguage("zh-CN",{
+ "Play": "播放",
+ "Pause": "暂停",
+ "Current Time": "当前时间",
+ "Duration Time": "时长",
+ "Remaining Time": "剩余时间",
+ "Stream Type": "媒体流类型",
+ "LIVE": "直播",
+ "Loaded": "加载完毕",
+ "Progress": "进度",
+ "Fullscreen": "全屏",
+ "Non-Fullscreen": "退出全屏",
+ "Mute": "静音",
+ "Unmute": "取消静音",
+ "Playback Rate": "播放码率",
+ "Subtitles": "字幕",
+ "subtitles off": "字幕关闭",
+ "Captions": "内嵌字幕",
+ "captions off": "内嵌字幕关闭",
+ "Chapters": "节目段落",
+ "You aborted the media playback": "视频播放被终止",
+ "A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
+ "No compatible source was found for this media.": "无法找到此视频兼容的源。",
+ "The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。"
+});
\ No newline at end of file
diff --git a/static/videojs/lang/zh-TW.js b/static/videojs/lang/zh-TW.js
new file mode 100644
index 0000000..bfb3e23
--- /dev/null
+++ b/static/videojs/lang/zh-TW.js
@@ -0,0 +1,27 @@
+videojs.addLanguage("zh-TW",{
+ "Play": "播放",
+ "Pause": "暫停",
+ "Current Time": "目前時間",
+ "Duration Time": "總共時間",
+ "Remaining Time": "剩餘時間",
+ "Stream Type": "串流類型",
+ "LIVE": "直播",
+ "Loaded": "載入完畢",
+ "Progress": "進度",
+ "Fullscreen": "全螢幕",
+ "Non-Fullscreen": "退出全螢幕",
+ "Mute": "靜音",
+ "Unmute": "取消靜音",
+ "Playback Rate": " 播放速率",
+ "Subtitles": "字幕",
+ "subtitles off": "關閉字幕",
+ "Captions": "內嵌字幕",
+ "captions off": "關閉內嵌字幕",
+ "Chapters": "章節",
+ "You aborted the media playback": "影片播放已終止",
+ "A network error caused the media download to fail part-way.": "網路錯誤導致影片下載失敗。",
+ "The media could not be loaded, either because the server or network failed or because the format is not supported.": "影片因格式不支援或者伺服器或網路的問題無法載入。",
+ "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由於影片檔案損毀或是該影片使用了您的瀏覽器不支援的功能,播放終止。",
+ "No compatible source was found for this media.": "無法找到相容此影片的來源。",
+ "The media is encrypted and we do not have the keys to decrypt it.": "影片已加密,無法解密。"
+});
\ No newline at end of file
diff --git a/static/videojs/video-js.css b/static/videojs/video-js.css
new file mode 100644
index 0000000..ef9ff8a
--- /dev/null
+++ b/static/videojs/video-js.css
@@ -0,0 +1,1326 @@
+.video-js .vjs-big-play-button:before, .video-js .vjs-control:before, .video-js .vjs-modal-dialog, .vjs-modal-dialog .vjs-modal-dialog-content {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%; }
+
+.video-js .vjs-big-play-button:before, .video-js .vjs-control:before {
+  text-align: center; }
+
+@font-face {
+  font-family: VideoJS;
+  src: url("font/VideoJS.eot?#iefix") format("eot"); }
+
+@font-face {
+  font-family: VideoJS;
+  src: url(data:application/font-woff;charset=utf-8;base64,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) format("woff"), url(data:application/x-font-ttf;charset=utf-8;base64,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FjY3PgE3LgEnIwYfAR4BFw4BBTM/ARUzESMGAyUVJwMchM2UWwgNq4JHrQgBAapUaAoJcWMBfiIhDiMrAQJLMB0BBAokNAIBPmMiIQ4iLAECSzAeAQUKJDQBP2MiIQ4iLAECSzAeAQUKJDQBAT75g+5B4arNLNIBJ44ByQL9BQ9mvYCKwA8FBQMDwwJVTGdzBf6VB8IHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvVJkAWUDDEf+tYP5AQAAAAEAAAAABiAGtgAbAAABBAADER4BFzMRITU2ADcWABcVIREzPgE3EQIAA4D+4v6FBwJ/X+D+1QYBJ97eAScG/tXgX38CB/6FBrUH/oX+4v32X38CAlWV3gEnBgb+2d6V/asCf18CCgEeAXsAAAAAEADGAAEAAAAAAAEABwAAAAEAAAAAAAIABwAHAAEAAAAAAAMABwAOAAEAAAAAAAQABwAVAAEAAAAAAAUACwAcAAEAAAAAAAYABwAnAAEAAAAAAAoAKwAuAAEAAAAAAAsAEwBZAAMAAQQJAAEADgBsAAMAAQQJAAIADgB6AAMAAQQJAAMADgCIAAMAAQQJAAQADgCWAAMAAQQJAAUAFgCkAAMAAQQJAAYADgC6AAMAAQQJAAoAVgDIAAMAAQQJAAsAJgEeVmlkZW9KU1JlZ3VsYXJWaWRlb0pTVmlkZW9KU1ZlcnNpb24gMS4wVmlkZW9KU0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAFYAaQBkAGUAbwBKAFMAUgBlAGcAdQBsAGEAcgBWAGkAZABlAG8ASgBTAFYAaQBkAGUAbwBKAFMAVgBlAHIAcwBpAG8AbgAgADEALgAwAFYAaQBkAGUAbwBKAFMARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgVhdWRpbwAAAAAA) format("truetype");
+  font-weight: normal;
+  font-style: normal; }
+
+.vjs-icon-play, .video-js .vjs-big-play-button, .video-js .vjs-play-control {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-play:before, .video-js .vjs-big-play-button:before, .video-js .vjs-play-control:before {
+    content: "\f101"; }
+
+.vjs-icon-play-circle {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-play-circle:before {
+    content: "\f102"; }
+
+.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing:before {
+    content: "\f103"; }
+
+.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0,
+.video-js .vjs-volume-menu-button.vjs-vol-0 {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0:before,
+  .video-js .vjs-volume-menu-button.vjs-vol-0:before {
+    content: "\f104"; }
+
+.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1,
+.video-js .vjs-volume-menu-button.vjs-vol-1 {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1:before,
+  .video-js .vjs-volume-menu-button.vjs-vol-1:before {
+    content: "\f105"; }
+
+.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2,
+.video-js .vjs-volume-menu-button.vjs-vol-2 {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2:before,
+  .video-js .vjs-volume-menu-button.vjs-vol-2:before {
+    content: "\f106"; }
+
+.vjs-icon-volume-high, .video-js .vjs-mute-control,
+.video-js .vjs-volume-menu-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-volume-high:before, .video-js .vjs-mute-control:before,
+  .video-js .vjs-volume-menu-button:before {
+    content: "\f107"; }
+
+.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control:before {
+    content: "\f108"; }
+
+.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control:before {
+    content: "\f109"; }
+
+.vjs-icon-square {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-square:before {
+    content: "\f10a"; }
+
+.vjs-icon-spinner {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-spinner:before {
+    content: "\f10b"; }
+
+.vjs-icon-subtitles, .video-js .vjs-subtitles-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-subtitles:before, .video-js .vjs-subtitles-button:before {
+    content: "\f10c"; }
+
+.vjs-icon-captions, .video-js .vjs-captions-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-captions:before, .video-js .vjs-captions-button:before {
+    content: "\f10d"; }
+
+.vjs-icon-chapters, .video-js .vjs-chapters-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-chapters:before, .video-js .vjs-chapters-button:before {
+    content: "\f10e"; }
+
+.vjs-icon-share {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-share:before {
+    content: "\f10f"; }
+
+.vjs-icon-cog {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-cog:before {
+    content: "\f110"; }
+
+.vjs-icon-circle, .video-js .vjs-mouse-display, .video-js .vjs-play-progress, .video-js .vjs-volume-level {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-circle:before, .video-js .vjs-mouse-display:before, .video-js .vjs-play-progress:before, .video-js .vjs-volume-level:before {
+    content: "\f111"; }
+
+.vjs-icon-circle-outline {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-circle-outline:before {
+    content: "\f112"; }
+
+.vjs-icon-circle-inner-circle {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-circle-inner-circle:before {
+    content: "\f113"; }
+
+.vjs-icon-hd {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-hd:before {
+    content: "\f114"; }
+
+.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button:before {
+    content: "\f115"; }
+
+.vjs-icon-replay {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-replay:before {
+    content: "\f116"; }
+
+.vjs-icon-facebook {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-facebook:before {
+    content: "\f117"; }
+
+.vjs-icon-gplus {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-gplus:before {
+    content: "\f118"; }
+
+.vjs-icon-linkedin {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-linkedin:before {
+    content: "\f119"; }
+
+.vjs-icon-twitter {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-twitter:before {
+    content: "\f11a"; }
+
+.vjs-icon-tumblr {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-tumblr:before {
+    content: "\f11b"; }
+
+.vjs-icon-pinterest {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-pinterest:before {
+    content: "\f11c"; }
+
+.vjs-icon-audio-description, .video-js .vjs-descriptions-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-audio-description:before, .video-js .vjs-descriptions-button:before {
+    content: "\f11d"; }
+
+.vjs-icon-audio, .video-js .vjs-audio-button {
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal; }
+  .vjs-icon-audio:before, .video-js .vjs-audio-button:before {
+    content: "\f11e"; }
+
+.video-js {
+  display: block;
+  vertical-align: top;
+  box-sizing: border-box;
+  color: #fff;
+  background-color: #000;
+  position: relative;
+  padding: 0;
+  font-size: 10px;
+  line-height: 1;
+  font-weight: normal;
+  font-style: normal;
+  font-family: Arial, Helvetica, sans-serif;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none; }
+  .video-js:-moz-full-screen {
+    position: absolute; }
+  .video-js:-webkit-full-screen {
+    width: 100% !important;
+    height: 100% !important; }
+
+.video-js *,
+.video-js *:before,
+.video-js *:after {
+  box-sizing: inherit; }
+
+.video-js ul {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+  list-style-position: outside;
+  margin-left: 0;
+  margin-right: 0;
+  margin-top: 0;
+  margin-bottom: 0; }
+
+.video-js.vjs-fluid,
+.video-js.vjs-16-9,
+.video-js.vjs-4-3 {
+  width: 100%;
+  max-width: 100%;
+  height: 0; }
+
+.video-js.vjs-16-9 {
+  padding-top: 56.25%; }
+
+.video-js.vjs-4-3 {
+  padding-top: 75%; }
+
+.video-js.vjs-fill {
+  width: 100%;
+  height: 100%; }
+
+.video-js .vjs-tech {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%; }
+
+body.vjs-full-window {
+  padding: 0;
+  margin: 0;
+  height: 100%;
+  overflow-y: auto; }
+
+.vjs-full-window .video-js.vjs-fullscreen {
+  position: fixed;
+  overflow: hidden;
+  z-index: 1000;
+  left: 0;
+  top: 0;
+  bottom: 0;
+  right: 0; }
+
+.video-js.vjs-fullscreen {
+  width: 100% !important;
+  height: 100% !important;
+  padding-top: 0 !important; }
+
+.video-js.vjs-fullscreen.vjs-user-inactive {
+  cursor: none; }
+
+.vjs-hidden {
+  display: none !important; }
+
+.vjs-disabled {
+  opacity: 0.5;
+  cursor: default; }
+
+.video-js .vjs-offscreen {
+  height: 1px;
+  left: -9999px;
+  position: absolute;
+  top: 0;
+  width: 1px; }
+
+.vjs-lock-showing {
+  display: block !important;
+  opacity: 1;
+  visibility: visible; }
+
+.vjs-no-js {
+  padding: 20px;
+  color: #fff;
+  background-color: #000;
+  font-size: 18px;
+  font-family: Arial, Helvetica, sans-serif;
+  text-align: center;
+  width: 300px;
+  height: 150px;
+  margin: 0px auto; }
+
+.vjs-no-js a,
+.vjs-no-js a:visited {
+  color: #66A8CC; }
+
+.video-js .vjs-big-play-button {
+  font-size: 3em;
+  line-height: 1.5em;
+  height: 1.5em;
+  width: 3em;
+  display: block;
+  position: absolute;
+  top: 10px;
+  left: 10px;
+  padding: 0;
+  cursor: pointer;
+  opacity: 1;
+  border: 0.06666em solid #fff;
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.7);
+  -webkit-border-radius: 0.3em;
+  -moz-border-radius: 0.3em;
+  border-radius: 0.3em;
+  -webkit-transition: all 0.4s;
+  -moz-transition: all 0.4s;
+  -o-transition: all 0.4s;
+  transition: all 0.4s; }
+
+.vjs-big-play-centered .vjs-big-play-button {
+  top: 50%;
+  left: 50%;
+  margin-top: -0.75em;
+  margin-left: -1.5em; }
+
+.video-js:hover .vjs-big-play-button,
+.video-js .vjs-big-play-button:focus {
+  outline: 0;
+  border-color: #fff;
+  background-color: #73859f;
+  background-color: rgba(115, 133, 159, 0.5);
+  -webkit-transition: all 0s;
+  -moz-transition: all 0s;
+  -o-transition: all 0s;
+  transition: all 0s; }
+
+.vjs-controls-disabled .vjs-big-play-button,
+.vjs-has-started .vjs-big-play-button,
+.vjs-using-native-controls .vjs-big-play-button,
+.vjs-error .vjs-big-play-button {
+  display: none; }
+
+.video-js button {
+  background: none;
+  border: none;
+  color: inherit;
+  display: inline-block;
+  overflow: visible;
+  font-size: inherit;
+  line-height: inherit;
+  text-transform: none;
+  text-decoration: none;
+  transition: none;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none; }
+
+.video-js .vjs-control.vjs-close-button {
+  cursor: pointer;
+  height: 3em;
+  position: absolute;
+  right: 0;
+  top: 0.5em;
+  z-index: 2; }
+
+.vjs-menu-button {
+  cursor: pointer; }
+
+.vjs-menu-button.vjs-disabled {
+  cursor: default; }
+
+.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu {
+  display: none; }
+
+.vjs-menu .vjs-menu-content {
+  display: block;
+  padding: 0;
+  margin: 0;
+  overflow: auto;
+  font-family: Arial, Helvetica, sans-serif; }
+
+.vjs-scrubbing .vjs-menu-button:hover .vjs-menu {
+  display: none; }
+
+.vjs-menu li {
+  list-style: none;
+  margin: 0;
+  padding: 0.2em 0;
+  line-height: 1.4em;
+  font-size: 1.2em;
+  text-align: center;
+  text-transform: lowercase; }
+
+.vjs-menu li:focus,
+.vjs-menu li:hover {
+  outline: 0;
+  background-color: #73859f;
+  background-color: rgba(115, 133, 159, 0.5); }
+
+.vjs-menu li.vjs-selected,
+.vjs-menu li.vjs-selected:focus,
+.vjs-menu li.vjs-selected:hover {
+  background-color: #fff;
+  color: #2B333F; }
+
+.vjs-menu li.vjs-menu-title {
+  text-align: center;
+  text-transform: uppercase;
+  font-size: 1em;
+  line-height: 2em;
+  padding: 0;
+  margin: 0 0 0.3em 0;
+  font-weight: bold;
+  cursor: default; }
+
+.vjs-menu-button-popup .vjs-menu {
+  display: none;
+  position: absolute;
+  bottom: 0;
+  width: 10em;
+  left: -3em;
+  height: 0em;
+  margin-bottom: 1.5em;
+  border-top-color: rgba(43, 51, 63, 0.7); }
+
+.vjs-menu-button-popup .vjs-menu .vjs-menu-content {
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.7);
+  position: absolute;
+  width: 100%;
+  bottom: 1.5em;
+  max-height: 15em; }
+
+.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu,
+.vjs-menu-button-popup .vjs-menu.vjs-lock-showing {
+  display: block; }
+
+.video-js .vjs-menu-button-inline {
+  -webkit-transition: all 0.4s;
+  -moz-transition: all 0.4s;
+  -o-transition: all 0.4s;
+  transition: all 0.4s;
+  overflow: hidden; }
+
+.video-js .vjs-menu-button-inline:before {
+  width: 2.222222222em; }
+
+.video-js .vjs-menu-button-inline:hover,
+.video-js .vjs-menu-button-inline:focus,
+.video-js .vjs-menu-button-inline.vjs-slider-active,
+.video-js.vjs-no-flex .vjs-menu-button-inline {
+  width: 12em; }
+
+.video-js .vjs-menu-button-inline.vjs-slider-active {
+  -webkit-transition: none;
+  -moz-transition: none;
+  -o-transition: none;
+  transition: none; }
+
+.vjs-menu-button-inline .vjs-menu {
+  opacity: 0;
+  height: 100%;
+  width: auto;
+  position: absolute;
+  left: 4em;
+  top: 0;
+  padding: 0;
+  margin: 0;
+  -webkit-transition: all 0.4s;
+  -moz-transition: all 0.4s;
+  -o-transition: all 0.4s;
+  transition: all 0.4s; }
+
+.vjs-menu-button-inline:hover .vjs-menu,
+.vjs-menu-button-inline:focus .vjs-menu,
+.vjs-menu-button-inline.vjs-slider-active .vjs-menu {
+  display: block;
+  opacity: 1; }
+
+.vjs-no-flex .vjs-menu-button-inline .vjs-menu {
+  display: block;
+  opacity: 1;
+  position: relative;
+  width: auto; }
+
+.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,
+.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,
+.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu {
+  width: auto; }
+
+.vjs-menu-button-inline .vjs-menu-content {
+  width: auto;
+  height: 100%;
+  margin: 0;
+  overflow: hidden; }
+
+.video-js .vjs-control-bar {
+  display: none;
+  width: 100%;
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  height: 3.0em;
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.7); }
+
+.vjs-has-started .vjs-control-bar {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  visibility: visible;
+  opacity: 1;
+  -webkit-transition: visibility 0.1s, opacity 0.1s;
+  -moz-transition: visibility 0.1s, opacity 0.1s;
+  -o-transition: visibility 0.1s, opacity 0.1s;
+  transition: visibility 0.1s, opacity 0.1s; }
+
+.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
+  visibility: visible;
+  opacity: 0;
+  -webkit-transition: visibility 1s, opacity 1s;
+  -moz-transition: visibility 1s, opacity 1s;
+  -o-transition: visibility 1s, opacity 1s;
+  transition: visibility 1s, opacity 1s; }
+
+.vjs-controls-disabled .vjs-control-bar,
+.vjs-using-native-controls .vjs-control-bar,
+.vjs-error .vjs-control-bar {
+  display: none !important; }
+
+.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
+  opacity: 1;
+  visibility: visible; }
+
+.vjs-has-started.vjs-no-flex .vjs-control-bar {
+  display: table; }
+
+.video-js .vjs-control {
+  outline: none;
+  position: relative;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  height: 100%;
+  width: 4em;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+  .video-js .vjs-control:before {
+    font-size: 1.8em;
+    line-height: 1.67; }
+
+.video-js .vjs-control:focus:before,
+.video-js .vjs-control:hover:before,
+.video-js .vjs-control:focus {
+  text-shadow: 0em 0em 1em white; }
+
+.video-js .vjs-control-text {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px; }
+
+.vjs-no-flex .vjs-control {
+  display: table-cell;
+  vertical-align: middle; }
+
+.video-js .vjs-custom-control-spacer {
+  display: none; }
+
+.video-js .vjs-progress-control {
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+  min-width: 4em; }
+
+.vjs-live .vjs-progress-control {
+  display: none; }
+
+.video-js .vjs-progress-holder {
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto;
+  -webkit-transition: all 0.2s;
+  -moz-transition: all 0.2s;
+  -o-transition: all 0.2s;
+  transition: all 0.2s;
+  height: 0.3em; }
+
+.video-js .vjs-progress-control:hover .vjs-progress-holder {
+  font-size: 1.666666666666666666em; }
+
+/* If we let the font size grow as much as everything else, the current time tooltip ends up
+ ginormous. If you'd like to enable the current time tooltip all the time, this should be disabled
+ to avoid a weird hitch when you roll off the hover. */
+.video-js .vjs-progress-control:hover .vjs-time-tooltip,
+.video-js .vjs-progress-control:hover .vjs-mouse-display:after,
+.video-js .vjs-progress-control:hover .vjs-play-progress:after {
+  font-family: Arial, Helvetica, sans-serif;
+  visibility: visible;
+  font-size: 0.6em; }
+
+.video-js .vjs-progress-holder .vjs-play-progress,
+.video-js .vjs-progress-holder .vjs-load-progress,
+.video-js .vjs-progress-holder .vjs-tooltip-progress-bar,
+.video-js .vjs-progress-holder .vjs-load-progress div {
+  position: absolute;
+  display: block;
+  height: 0.3em;
+  margin: 0;
+  padding: 0;
+  width: 0;
+  left: 0;
+  top: 0; }
+
+.video-js .vjs-mouse-display:before {
+  display: none; }
+
+.video-js .vjs-play-progress {
+  background-color: #fff; }
+  .video-js .vjs-play-progress:before {
+    position: absolute;
+    top: -0.333333333333333em;
+    right: -0.5em;
+    font-size: 0.9em; }
+
+.video-js .vjs-time-tooltip,
+.video-js .vjs-mouse-display:after,
+.video-js .vjs-play-progress:after {
+  visibility: hidden;
+  pointer-events: none;
+  position: absolute;
+  top: -3.4em;
+  right: -1.9em;
+  font-size: 0.9em;
+  color: #000;
+  content: attr(data-current-time);
+  padding: 6px 8px 8px 8px;
+  background-color: #fff;
+  background-color: rgba(255, 255, 255, 0.8);
+  -webkit-border-radius: 0.3em;
+  -moz-border-radius: 0.3em;
+  border-radius: 0.3em; }
+
+.video-js .vjs-time-tooltip,
+.video-js .vjs-play-progress:before,
+.video-js .vjs-play-progress:after {
+  z-index: 1; }
+
+.video-js .vjs-progress-control .vjs-keep-tooltips-inside:after {
+  display: none; }
+
+.video-js .vjs-load-progress {
+  background: #bfc7d3;
+  background: rgba(115, 133, 159, 0.5); }
+
+.video-js .vjs-load-progress div {
+  background: white;
+  background: rgba(115, 133, 159, 0.75); }
+
+.video-js.vjs-no-flex .vjs-progress-control {
+  width: auto; }
+
+.video-js .vjs-time-tooltip {
+  display: inline-block;
+  height: 2.4em;
+  position: relative;
+  float: right;
+  right: -1.9em; }
+
+.vjs-tooltip-progress-bar {
+  visibility: hidden; }
+
+.video-js .vjs-progress-control .vjs-mouse-display {
+  display: none;
+  position: absolute;
+  width: 1px;
+  height: 100%;
+  background-color: #000;
+  z-index: 1; }
+
+.vjs-no-flex .vjs-progress-control .vjs-mouse-display {
+  z-index: 0; }
+
+.video-js .vjs-progress-control:hover .vjs-mouse-display {
+  display: block; }
+
+.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,
+.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display:after {
+  visibility: hidden;
+  opacity: 0;
+  -webkit-transition: visibility 1s, opacity 1s;
+  -moz-transition: visibility 1s, opacity 1s;
+  -o-transition: visibility 1s, opacity 1s;
+  transition: visibility 1s, opacity 1s; }
+
+.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display,
+.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display:after {
+  display: none; }
+
+.vjs-mouse-display .vjs-time-tooltip,
+.video-js .vjs-progress-control .vjs-mouse-display:after {
+  color: #fff;
+  background-color: #000;
+  background-color: rgba(0, 0, 0, 0.8); }
+
+.video-js .vjs-slider {
+  outline: 0;
+  position: relative;
+  cursor: pointer;
+  padding: 0;
+  margin: 0 0.45em 0 0.45em;
+  background-color: #73859f;
+  background-color: rgba(115, 133, 159, 0.5); }
+
+.video-js .vjs-slider:focus {
+  text-shadow: 0em 0em 1em white;
+  -webkit-box-shadow: 0 0 1em #fff;
+  -moz-box-shadow: 0 0 1em #fff;
+  box-shadow: 0 0 1em #fff; }
+
+.video-js .vjs-mute-control,
+.video-js .vjs-volume-menu-button {
+  cursor: pointer;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+
+.video-js .vjs-volume-control {
+  width: 5em;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center; }
+
+.video-js .vjs-volume-bar {
+  margin: 1.35em 0.45em; }
+
+.vjs-volume-bar.vjs-slider-horizontal {
+  width: 5em;
+  height: 0.3em; }
+
+.vjs-volume-bar.vjs-slider-vertical {
+  width: 0.3em;
+  height: 5em;
+  margin: 1.35em auto; }
+
+.video-js .vjs-volume-level {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  background-color: #fff; }
+  .video-js .vjs-volume-level:before {
+    position: absolute;
+    font-size: 0.9em; }
+
+.vjs-slider-vertical .vjs-volume-level {
+  width: 0.3em; }
+  .vjs-slider-vertical .vjs-volume-level:before {
+    top: -0.5em;
+    left: -0.3em; }
+
+.vjs-slider-horizontal .vjs-volume-level {
+  height: 0.3em; }
+  .vjs-slider-horizontal .vjs-volume-level:before {
+    top: -0.3em;
+    right: -0.5em; }
+
+.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level {
+  height: 100%; }
+
+.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level {
+  width: 100%; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu {
+  display: block;
+  width: 0;
+  height: 0;
+  border-top-color: transparent; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu {
+  left: 0.5em;
+  height: 8em; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu {
+  left: -2em; }
+
+.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content {
+  height: 0;
+  width: 0;
+  overflow-x: hidden;
+  overflow-y: hidden; }
+
+.vjs-volume-menu-button-vertical:hover .vjs-menu-content,
+.vjs-volume-menu-button-vertical:focus .vjs-menu-content,
+.vjs-volume-menu-button-vertical.vjs-slider-active .vjs-menu-content,
+.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content {
+  height: 8em;
+  width: 2.9em; }
+
+.vjs-volume-menu-button-horizontal:hover .vjs-menu-content,
+.vjs-volume-menu-button-horizontal:focus .vjs-menu-content,
+.vjs-volume-menu-button-horizontal .vjs-slider-active .vjs-menu-content,
+.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content {
+  height: 2.9em;
+  width: 8em; }
+
+.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content {
+  background-color: transparent !important; }
+
+.vjs-poster {
+  display: inline-block;
+  vertical-align: middle;
+  background-repeat: no-repeat;
+  background-position: 50% 50%;
+  background-size: contain;
+  background-color: #000000;
+  cursor: pointer;
+  margin: 0;
+  padding: 0;
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  height: 100%; }
+
+.vjs-poster img {
+  display: block;
+  vertical-align: middle;
+  margin: 0 auto;
+  max-height: 100%;
+  padding: 0;
+  width: 100%; }
+
+.vjs-has-started .vjs-poster {
+  display: none; }
+
+.vjs-audio.vjs-has-started .vjs-poster {
+  display: block; }
+
+.vjs-controls-disabled .vjs-poster {
+  display: none; }
+
+.vjs-using-native-controls .vjs-poster {
+  display: none; }
+
+.video-js .vjs-live-control {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: flex-start;
+  -webkit-align-items: flex-start;
+  -ms-flex-align: flex-start;
+  align-items: flex-start;
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto;
+  font-size: 1em;
+  line-height: 3em; }
+
+.vjs-no-flex .vjs-live-control {
+  display: table-cell;
+  width: auto;
+  text-align: left; }
+
+.video-js .vjs-time-control {
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none;
+  font-size: 1em;
+  line-height: 3em;
+  min-width: 2em;
+  width: auto;
+  padding-left: 1em;
+  padding-right: 1em; }
+
+.vjs-live .vjs-time-control {
+  display: none; }
+
+.video-js .vjs-current-time,
+.vjs-no-flex .vjs-current-time {
+  display: none; }
+
+.video-js .vjs-duration,
+.vjs-no-flex .vjs-duration {
+  display: none; }
+
+.vjs-time-divider {
+  display: none;
+  line-height: 3em; }
+
+.vjs-live .vjs-time-divider {
+  display: none; }
+
+.video-js .vjs-play-control {
+  cursor: pointer;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+
+.vjs-text-track-display {
+  position: absolute;
+  bottom: 3em;
+  left: 0;
+  right: 0;
+  top: 0;
+  pointer-events: none; }
+
+.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {
+  bottom: 1em; }
+
+.video-js .vjs-text-track {
+  font-size: 1.4em;
+  text-align: center;
+  margin-bottom: 0.1em;
+  background-color: #000;
+  background-color: rgba(0, 0, 0, 0.5); }
+
+.vjs-subtitles {
+  color: #fff; }
+
+.vjs-captions {
+  color: #fc6; }
+
+.vjs-tt-cue {
+  display: block; }
+
+video::-webkit-media-text-track-display {
+  -moz-transform: translateY(-3em);
+  -ms-transform: translateY(-3em);
+  -o-transform: translateY(-3em);
+  -webkit-transform: translateY(-3em);
+  transform: translateY(-3em); }
+
+.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display {
+  -moz-transform: translateY(-1.5em);
+  -ms-transform: translateY(-1.5em);
+  -o-transform: translateY(-1.5em);
+  -webkit-transform: translateY(-1.5em);
+  transform: translateY(-1.5em); }
+
+.video-js .vjs-fullscreen-control {
+  cursor: pointer;
+  -webkit-box-flex: none;
+  -moz-box-flex: none;
+  -webkit-flex: none;
+  -ms-flex: none;
+  flex: none; }
+
+.vjs-playback-rate .vjs-playback-rate-value {
+  font-size: 1.5em;
+  line-height: 2;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  text-align: center; }
+
+.vjs-playback-rate .vjs-menu {
+  width: 4em;
+  left: 0em; }
+
+.vjs-error .vjs-error-display .vjs-modal-dialog-content {
+  font-size: 1.4em;
+  text-align: center; }
+
+.vjs-error .vjs-error-display:before {
+  color: #fff;
+  content: 'X';
+  font-family: Arial, Helvetica, sans-serif;
+  font-size: 4em;
+  left: 0;
+  line-height: 1;
+  margin-top: -0.5em;
+  position: absolute;
+  text-shadow: 0.05em 0.05em 0.1em #000;
+  text-align: center;
+  top: 50%;
+  vertical-align: middle;
+  width: 100%; }
+
+.vjs-loading-spinner {
+  display: none;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin: -25px 0 0 -25px;
+  opacity: 0.85;
+  text-align: left;
+  border: 6px solid rgba(43, 51, 63, 0.7);
+  box-sizing: border-box;
+  background-clip: padding-box;
+  width: 50px;
+  height: 50px;
+  border-radius: 25px; }
+
+.vjs-seeking .vjs-loading-spinner,
+.vjs-waiting .vjs-loading-spinner {
+  display: block; }
+
+.vjs-loading-spinner:before,
+.vjs-loading-spinner:after {
+  content: "";
+  position: absolute;
+  margin: -6px;
+  box-sizing: inherit;
+  width: inherit;
+  height: inherit;
+  border-radius: inherit;
+  opacity: 1;
+  border: inherit;
+  border-color: transparent;
+  border-top-color: white; }
+
+.vjs-seeking .vjs-loading-spinner:before,
+.vjs-seeking .vjs-loading-spinner:after,
+.vjs-waiting .vjs-loading-spinner:before,
+.vjs-waiting .vjs-loading-spinner:after {
+  -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;
+  animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; }
+
+.vjs-seeking .vjs-loading-spinner:before,
+.vjs-waiting .vjs-loading-spinner:before {
+  border-top-color: white; }
+
+.vjs-seeking .vjs-loading-spinner:after,
+.vjs-waiting .vjs-loading-spinner:after {
+  border-top-color: white;
+  -webkit-animation-delay: 0.44s;
+  animation-delay: 0.44s; }
+
+@keyframes vjs-spinner-spin {
+  100% {
+    transform: rotate(360deg); } }
+
+@-webkit-keyframes vjs-spinner-spin {
+  100% {
+    -webkit-transform: rotate(360deg); } }
+
+@keyframes vjs-spinner-fade {
+  0% {
+    border-top-color: #73859f; }
+  20% {
+    border-top-color: #73859f; }
+  35% {
+    border-top-color: white; }
+  60% {
+    border-top-color: #73859f; }
+  100% {
+    border-top-color: #73859f; } }
+
+@-webkit-keyframes vjs-spinner-fade {
+  0% {
+    border-top-color: #73859f; }
+  20% {
+    border-top-color: #73859f; }
+  35% {
+    border-top-color: white; }
+  60% {
+    border-top-color: #73859f; }
+  100% {
+    border-top-color: #73859f; } }
+
+.vjs-chapters-button .vjs-menu ul {
+  width: 24em; }
+
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer {
+  -webkit-box-flex: auto;
+  -moz-box-flex: auto;
+  -webkit-flex: auto;
+  -ms-flex: auto;
+  flex: auto; }
+
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer {
+  width: auto; }
+
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,
+.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-audio-button {
+  display: none; }
+
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-menu-button,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,
+.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-audio-button {
+  display: none; }
+
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-descriptions-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,
+.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button .vjs-audio-button {
+  display: none; }
+
+.vjs-caption-settings {
+  position: relative;
+  top: 1em;
+  background-color: #2B333F;
+  background-color: rgba(43, 51, 63, 0.75);
+  color: #fff;
+  margin: 0 auto;
+  padding: 0.5em;
+  height: 16em;
+  font-size: 12px;
+  width: 40em; }
+
+.vjs-caption-settings .vjs-tracksettings {
+  top: 0;
+  bottom: 1em;
+  left: 0;
+  right: 0;
+  position: absolute;
+  overflow: auto; }
+
+.vjs-caption-settings .vjs-tracksettings-colors,
+.vjs-caption-settings .vjs-tracksettings-font {
+  float: left; }
+
+.vjs-caption-settings .vjs-tracksettings-colors:after,
+.vjs-caption-settings .vjs-tracksettings-font:after,
+.vjs-caption-settings .vjs-tracksettings-controls:after {
+  clear: both; }
+
+.vjs-caption-settings .vjs-tracksettings-controls {
+  position: absolute;
+  bottom: 1em;
+  right: 1em; }
+
+.vjs-caption-settings .vjs-tracksetting {
+  margin: 5px;
+  padding: 3px;
+  min-height: 40px;
+  border: none; }
+
+.vjs-caption-settings .vjs-tracksetting label,
+.vjs-caption-settings .vjs-tracksetting legend {
+  display: block;
+  width: 100px;
+  margin-bottom: 5px; }
+
+.vjs-caption-settings .vjs-tracksetting span {
+  display: inline;
+  margin-left: 5px;
+  vertical-align: top;
+  float: right; }
+
+.vjs-caption-settings .vjs-tracksetting > div {
+  margin-bottom: 5px;
+  min-height: 20px; }
+
+.vjs-caption-settings .vjs-tracksetting > div:last-child {
+  margin-bottom: 0;
+  padding-bottom: 0;
+  min-height: 0; }
+
+.vjs-caption-settings label > input {
+  margin-right: 10px; }
+
+.vjs-caption-settings fieldset {
+  margin-top: 1em;
+  margin-left: .5em; }
+
+.vjs-caption-settings fieldset .vjs-label {
+  position: absolute;
+  clip: rect(1px 1px 1px 1px);
+  /* for Internet Explorer */
+  clip: rect(1px, 1px, 1px, 1px);
+  padding: 0;
+  border: 0;
+  height: 1px;
+  width: 1px;
+  overflow: hidden; }
+
+.vjs-caption-settings input[type="button"] {
+  width: 40px;
+  height: 40px; }
+
+.video-js .vjs-modal-dialog {
+  background: rgba(0, 0, 0, 0.8);
+  background: -webkit-linear-gradient(-90deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0));
+  background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); }
+
+.vjs-modal-dialog .vjs-modal-dialog-content {
+  font-size: 1.2em;
+  line-height: 1.5;
+  padding: 20px 24px;
+  z-index: 1; }
+
+@media print {
+  .video-js > *:not(.vjs-tech):not(.vjs-poster) {
+    visibility: hidden; } }
+
+/**
+// IE 8 hack for media queries which the sass parser can encounter problems with
+$ie8screen: "\\0screen";
+
+// original home: css/components/_control-bar.scss
+// IE8 is flakey with fonts, and you have to change the actual content to force
+// fonts to show/hide properly.
+// - "\9" IE8 hack didn't work for this
+// Found in XP IE8 from http://modern.ie. Does not show up in "IE8 mode" in IE9
+.vjs-user-inactive.vjs-playing .vjs-control-bar :before {
+  @media #{$ie8screen} { content: ""; }
+}
+
+// Video has started playing AND user is inactive
+.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
+
+  // Make controls hidden in IE8 for now
+  @media #{$ie8screen} {
+    visibility: hidden;
+  }
+}
+*/
+
+@media \0screen {
+  .vjs-user-inactive.vjs-playing .vjs-control-bar :before {
+    content: ""; } }
+
+@media \0screen {
+  .vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {
+    visibility: hidden; } }
diff --git a/static/videojs/video-js.min.css b/static/videojs/video-js.min.css
new file mode 100644
index 0000000..c8bdec8
--- /dev/null
+++ b/static/videojs/video-js.min.css
@@ -0,0 +1 @@
+.video-js .vjs-big-play-button:before,.video-js .vjs-control:before,.video-js .vjs-modal-dialog,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button:before,.video-js .vjs-control:before{text-align:center}@font-face{font-family:VideoJS;src:url(font/VideoJS.eot?#iefix) format("eot")}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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) format("woff"),url(data:application/x-font-ttf;charset=utf-8;base64,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FjY3PgE3LgEnIwYfAR4BFw4BBTM/ARUzESMGAyUVJwMchM2UWwgNq4JHrQgBAapUaAoJcWMBfiIhDiMrAQJLMB0BBAokNAIBPmMiIQ4iLAECSzAeAQUKJDQBP2MiIQ4iLAECSzAeAQUKJDQBAT75g+5B4arNLNIBJ44ByQL9BQ9mvYCKwA8FBQMDwwJVTGdzBf6VB8IHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvUwHNR08lld9uT4LCRA/qGNxvVJkAWUDDEf+tYP5AQAAAAEAAAAABiAGtgAbAAABBAADER4BFzMRITU2ADcWABcVIREzPgE3EQIAA4D+4v6FBwJ/X+D+1QYBJ97eAScG/tXgX38CB/6FBrUH/oX+4v32X38CAlWV3gEnBgb+2d6V/asCf18CCgEeAXsAAAAAEADGAAEAAAAAAAEABwAAAAEAAAAAAAIABwAHAAEAAAAAAAMABwAOAAEAAAAAAAQABwAVAAEAAAAAAAUACwAcAAEAAAAAAAYABwAnAAEAAAAAAAoAKwAuAAEAAAAAAAsAEwBZAAMAAQQJAAEADgBsAAMAAQQJAAIADgB6AAMAAQQJAAMADgCIAAMAAQQJAAQADgCWAAMAAQQJAAUAFgCkAAMAAQQJAAYADgC6AAMAAQQJAAoAVgDIAAMAAQQJAAsAJgEeVmlkZW9KU1JlZ3VsYXJWaWRlb0pTVmlkZW9KU1ZlcnNpb24gMS4wVmlkZW9KU0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAFYAaQBkAGUAbwBKAFMAUgBlAGcAdQBsAGEAcgBWAGkAZABlAG8ASgBTAFYAaQBkAGUAbwBKAFMAVgBlAHIAcwBpAG8AbgAgADEALgAwAFYAaQBkAGUAbwBKAFMARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAgAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgVhdWRpbwAAAAAA) format("truetype");font-weight:400;font-style:normal}.vjs-icon-play,.video-js .vjs-big-play-button,.video-js .vjs-play-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play:before,.video-js .vjs-big-play-button:before,.video-js .vjs-play-control:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing:before{content:"\f103"}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0,.video-js .vjs-volume-menu-button.vjs-vol-0{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0:before,.video-js .vjs-volume-menu-button.vjs-vol-0:before{content:"\f104"}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1,.video-js .vjs-volume-menu-button.vjs-vol-1{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1:before,.video-js .vjs-volume-menu-button.vjs-vol-1:before{content:"\f105"}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2,.video-js .vjs-volume-menu-button.vjs-vol-2{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2:before,.video-js .vjs-volume-menu-button.vjs-vol-2:before{content:"\f106"}.vjs-icon-volume-high,.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control:before,.video-js .vjs-volume-menu-button:before{content:"\f107"}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control:before{content:"\f108"}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\f10b"}.vjs-icon-subtitles,.video-js .vjs-subtitles-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subtitles-button:before{content:"\f10c"}.vjs-icon-captions,.video-js .vjs-captions-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-captions:before,.video-js .vjs-captions-button:before{content:"\f10d"}.vjs-icon-chapters,.video-js .vjs-chapters-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\f110"}.vjs-icon-circle,.video-js .vjs-mouse-display,.video-js .vjs-play-progress,.video-js .vjs-volume-level{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle:before,.video-js .vjs-mouse-display:before,.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\f114"}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button:before{content:"\f115"}.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-replay:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\f11c"}.vjs-icon-audio-description,.video-js .vjs-descriptions-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button:before{content:"\f11d"}.vjs-icon-audio,.video-js .vjs-audio-button{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio:before,.video-js .vjs-audio-button:before{content:"\f11e"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js *,.video-js :before,.video-js :after{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen{width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1;visibility:visible}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66A8CC}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.5em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2B333F;background-color:rgba(43,51,63,.7);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.75em;margin-left:-1.5em}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.video-js button{background:0 0;border:0;color:inherit;display:inline-block;overflow:visible;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;overflow:auto;font-family:Arial,Helvetica,sans-serif}.vjs-scrubbing .vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li:focus,.vjs-menu li:hover{outline:0;background-color:#73859f;background-color:rgba(115,133,159,.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2B333F}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2B333F;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline{-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.video-js .vjs-menu-button-inline.vjs-slider-active{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2B333F;background-color:rgba(43,51,63,.7)}.vjs-has-started .vjs-control-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:visible;opacity:1;-webkit-transition:visibility .1s,opacity .1s;-moz-transition:visibility .1s,opacity .1s;-o-transition:visibility .1s,opacity .1s;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{outline:0;position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-control:before{font-size:1.8em;line-height:1.67}.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.video-js .vjs-control:focus{text-shadow:0 0 1em #fff}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-width:4em}.vjs-live .vjs-progress-control{display:none}.video-js .vjs-progress-holder{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s;height:.3em}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.666666666666666666em}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-mouse-display:after,.video-js .vjs-progress-control:hover .vjs-play-progress:after{font-family:Arial,Helvetica,sans-serif;visibility:visible;font-size:.6em}.video-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-tooltip-progress-bar,.video-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:.3em;margin:0;padding:0;width:0;left:0;top:0}.video-js .vjs-mouse-display:before{display:none}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{position:absolute;top:-.333333333333333em;right:-.5em;font-size:.9em}.video-js .vjs-time-tooltip,.video-js .vjs-mouse-display:after,.video-js .vjs-play-progress:after{visibility:hidden;pointer-events:none;position:absolute;top:-3.4em;right:-1.9em;font-size:.9em;color:#000;content:attr(data-current-time);padding:6px 8px 8px;background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-time-tooltip,.video-js .vjs-play-progress:before,.video-js .vjs-play-progress:after{z-index:1}.video-js .vjs-progress-control .vjs-keep-tooltips-inside:after{display:none}.video-js .vjs-load-progress{background:#bfc7d3;background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:#fff;background:rgba(115,133,159,.75)}.video-js.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-time-tooltip{display:inline-block;height:2.4em;position:relative;float:right;right:-1.9em}.vjs-tooltip-progress-bar{visibility:hidden}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display:after{visibility:hidden;opacity:0;-webkit-transition:visibility 1s,opacity 1s;-moz-transition:visibility 1s,opacity 1s;-o-transition:visibility 1s,opacity 1s;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display,.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display:after{display:none}.vjs-mouse-display .vjs-time-tooltip,.video-js .vjs-progress-control .vjs-mouse-display:after{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;margin:0 .45em;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;-webkit-box-shadow:0 0 1em #fff;-moz-box-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control,.video-js .vjs-volume-menu-button{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .vjs-volume-control{width:5em;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu{left:.5em;height:8em}.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu{left:-2em}.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content{height:0;width:0;overflow-x:hidden;overflow-y:hidden}.vjs-volume-menu-button-vertical:hover .vjs-menu-content,.vjs-volume-menu-button-vertical:focus .vjs-menu-content,.vjs-volume-menu-button-vertical.vjs-slider-active .vjs-menu-content,.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content{height:8em;width:2.9em}.vjs-volume-menu-button-horizontal:hover .vjs-menu-content,.vjs-volume-menu-button-horizontal:focus .vjs-menu-content,.vjs-volume-menu-button-horizontal .vjs-slider-active .vjs-menu-content,.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content{height:2.9em;width:8em}.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content{background-color:transparent!important}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-poster img{display:block;vertical-align:middle;margin:0 auto;max-height:100%;padding:0;width:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-controls-disabled .vjs-poster{display:none}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js .vjs-time-control{-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em;background-color:#000;background-color:rgba(0,0,0,.5)}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-moz-transform:translateY(-3em);-ms-transform:translateY(-3em);-o-transform:translateY(-3em);-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-moz-transform:translateY(-1.5em);-ms-transform:translateY(-1.5em);-o-transform:translateY(-1.5em);-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-fullscreen-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(0.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer{-webkit-box-flex:auto;-moz-box-flex:auto;-webkit-flex:auto;-ms-flex:auto;flex:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-audio-button{display:none}.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-menu-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-audio-button{display:none}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-descriptions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button .vjs-audio-button{display:none}.vjs-caption-settings{position:relative;top:1em;background-color:#2B333F;background-color:rgba(43,51,63,.75);color:#fff;margin:0 auto;padding:.5em;height:16em;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:1em;left:0;right:0;position:absolute;overflow:auto}.vjs-caption-settings .vjs-tracksettings-colors,.vjs-caption-settings .vjs-tracksettings-font{float:left}.vjs-caption-settings .vjs-tracksettings-colors:after,.vjs-caption-settings .vjs-tracksettings-font:after,.vjs-caption-settings .vjs-tracksettings-controls:after{clear:both}.vjs-caption-settings .vjs-tracksettings-controls{position:absolute;bottom:1em;right:1em}.vjs-caption-settings .vjs-tracksetting{margin:5px;padding:3px;min-height:40px;border:0}.vjs-caption-settings .vjs-tracksetting label,.vjs-caption-settings .vjs-tracksetting legend{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px;vertical-align:top;float:right}.vjs-caption-settings .vjs-tracksetting>div{margin-bottom:5px;min-height:20px}.vjs-caption-settings .vjs-tracksetting>div:last-child{margin-bottom:0;padding-bottom:0;min-height:0}.vjs-caption-settings label>input{margin-right:10px}.vjs-caption-settings fieldset{margin-top:1em;margin-left:.5em}.vjs-caption-settings fieldset .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-caption-settings input[type=button]{width:40px;height:40px}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:-webkit-linear-gradient(-90deg,rgba(0,0,0,.8),rgba(255,255,255,0));background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0))}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}@media \0screen{.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}@media \0screen{.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:hidden}}
\ No newline at end of file
diff --git a/static/videojs/video-js.swf b/static/videojs/video-js.swf
new file mode 100644
index 0000000000000000000000000000000000000000..34ca9dc0b4adc3dda9e34cd7718503709f158052
GIT binary patch
literal 16916
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
L`5*u88@`VLY(Zmp

literal 0
HcmV?d00001

diff --git a/static/videojs/video.js b/static/videojs/video.js
new file mode 100644
index 0000000..9419308
--- /dev/null
+++ b/static/videojs/video.js
@@ -0,0 +1,24946 @@
+/**
+ * @license
+ * Video.js 5.12.1 <http://videojs.com/>
+ * Copyright Brightcove, Inc. <https://www.brightcove.com/>
+ * Available under Apache License Version 2.0
+ * <https://github.com/videojs/video.js/blob/master/LICENSE>
+ *
+ * Includes vtt.js <https://github.com/mozilla/vtt.js>
+ * Available under Apache License Version 2.0
+ * <https://github.com/mozilla/vtt.js/blob/master/LICENSE>
+ */
+
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.videojs = f()}})(function(){var define,module,exports;return (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})({1:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('./button.js');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('./component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file big-play-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Initial play button. Shows before the video has played. The hiding of the
+ * big play button is done via CSS and player states.
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends Button
+ * @class BigPlayButton
+ */
+var BigPlayButton = function (_Button) {
+  _inherits(BigPlayButton, _Button);
+
+  function BigPlayButton(player, options) {
+    _classCallCheck(this, BigPlayButton);
+
+    return _possibleConstructorReturn(this, _Button.call(this, player, options));
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  BigPlayButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-big-play-button';
+  };
+
+  /**
+   * Handles click for play
+   *
+   * @method handleClick
+   */
+
+
+  BigPlayButton.prototype.handleClick = function handleClick() {
+    this.player_.play();
+  };
+
+  return BigPlayButton;
+}(_button2['default']);
+
+BigPlayButton.prototype.controlText_ = 'Play Video';
+
+_component2['default'].registerComponent('BigPlayButton', BigPlayButton);
+exports['default'] = BigPlayButton;
+
+},{"./button.js":2,"./component.js":5}],2:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('./clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Base class for all buttons
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends ClickableComponent
+ * @class Button
+ */
+var Button = function (_ClickableComponent) {
+  _inherits(Button, _ClickableComponent);
+
+  function Button(player, options) {
+    _classCallCheck(this, Button);
+
+    return _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String=} type Element's node type. e.g. 'div'
+   * @param {Object=} props An object of properties that should be set on the element
+   * @param {Object=} attributes An object of attributes that should be set on the element
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Button.prototype.createEl = function createEl() {
+    var tag = arguments.length <= 0 || arguments[0] === undefined ? 'button' : arguments[0];
+    var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+    props = (0, _object2['default'])({
+      className: this.buildCSSClass()
+    }, props);
+
+    if (tag !== 'button') {
+      _log2['default'].warn('Creating a Button with an HTML element of ' + tag + ' is deprecated; use ClickableComponent instead.');
+
+      // Add properties for clickable element which is not a native HTML button
+      props = (0, _object2['default'])({
+        tabIndex: 0
+      }, props);
+
+      // Add ARIA attributes for clickable element which is not a native HTML button
+      attributes = (0, _object2['default'])({
+        role: 'button'
+      }, attributes);
+    }
+
+    // Add attributes for button element
+    attributes = (0, _object2['default'])({
+
+      // Necessary since the default button type is "submit"
+      'type': 'button',
+
+      // let the screen reader user know that the text of the button may change
+      'aria-live': 'polite'
+    }, attributes);
+
+    var el = _component2['default'].prototype.createEl.call(this, tag, props, attributes);
+
+    this.createControlTextEl(el);
+
+    return el;
+  };
+
+  /**
+   * Adds a child component inside this button
+   *
+   * @param {String|Component} child The class name or instance of a child to add
+   * @param {Object=} options Options, including options to be passed to children of the child.
+   * @return {Component} The child component (created by this process if a string was used)
+   * @deprecated
+   * @method addChild
+   */
+
+
+  Button.prototype.addChild = function addChild(child) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    var className = this.constructor.name;
+
+    _log2['default'].warn('Adding an actionable (user controllable) child to a Button (' + className + ') is not supported; use a ClickableComponent instead.');
+
+    // Avoid the error message generated by ClickableComponent's addChild method
+    return _component2['default'].prototype.addChild.call(this, child, options);
+  };
+
+  /**
+   * Handle KeyPress (document level) - Extend with specific functionality for button
+   *
+   * @method handleKeyPress
+   */
+
+
+  Button.prototype.handleKeyPress = function handleKeyPress(event) {
+
+    // Ignore Space (32) or Enter (13) key operation, which is handled by the browser for a button.
+    if (event.which === 32 || event.which === 13) {
+      return;
+    }
+
+    // Pass keypress handling up for unsupported keys
+    _ClickableComponent.prototype.handleKeyPress.call(this, event);
+  };
+
+  return Button;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('Button', Button);
+exports['default'] = Button;
+
+},{"./clickable-component.js":3,"./component":5,"./utils/log.js":85,"object.assign":136}],3:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Clickable Component which is clickable or keyboard actionable, but is not a native HTML button
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends Component
+ * @class ClickableComponent
+ */
+var ClickableComponent = function (_Component) {
+  _inherits(ClickableComponent, _Component);
+
+  function ClickableComponent(player, options) {
+    _classCallCheck(this, ClickableComponent);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.emitTapEvents();
+
+    _this.on('tap', _this.handleClick);
+    _this.on('click', _this.handleClick);
+    _this.on('focus', _this.handleFocus);
+    _this.on('blur', _this.handleBlur);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String=} type Element's node type. e.g. 'div'
+   * @param {Object=} props An object of properties that should be set on the element
+   * @param {Object=} attributes An object of attributes that should be set on the element
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  ClickableComponent.prototype.createEl = function createEl() {
+    var tag = arguments.length <= 0 || arguments[0] === undefined ? 'div' : arguments[0];
+    var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+    props = (0, _object2['default'])({
+      className: this.buildCSSClass(),
+      tabIndex: 0
+    }, props);
+
+    if (tag === 'button') {
+      _log2['default'].error('Creating a ClickableComponent with an HTML element of ' + tag + ' is not supported; use a Button instead.');
+    }
+
+    // Add ARIA attributes for clickable element which is not a native HTML button
+    attributes = (0, _object2['default'])({
+      'role': 'button',
+
+      // let the screen reader user know that the text of the element may change
+      'aria-live': 'polite'
+    }, attributes);
+
+    var el = _Component.prototype.createEl.call(this, tag, props, attributes);
+
+    this.createControlTextEl(el);
+
+    return el;
+  };
+
+  /**
+   * create control text
+   *
+   * @param {Element} el Parent element for the control text
+   * @return {Element}
+   * @method controlText
+   */
+
+
+  ClickableComponent.prototype.createControlTextEl = function createControlTextEl(el) {
+    this.controlTextEl_ = Dom.createEl('span', {
+      className: 'vjs-control-text'
+    });
+
+    if (el) {
+      el.appendChild(this.controlTextEl_);
+    }
+
+    this.controlText(this.controlText_, el);
+
+    return this.controlTextEl_;
+  };
+
+  /**
+   * Controls text - both request and localize
+   *
+   * @param {String}  text Text for element
+   * @param {Element=} el Element to set the title on
+   * @return {String}
+   * @method controlText
+   */
+
+
+  ClickableComponent.prototype.controlText = function controlText(text) {
+    var el = arguments.length <= 1 || arguments[1] === undefined ? this.el() : arguments[1];
+
+    if (!text) {
+      return this.controlText_ || 'Need Text';
+    }
+
+    var localizedText = this.localize(text);
+
+    this.controlText_ = text;
+    this.controlTextEl_.innerHTML = localizedText;
+    el.setAttribute('title', localizedText);
+
+    return this;
+  };
+
+  /**
+   * Allows sub components to stack CSS class names
+   *
+   * @return {String}
+   * @method buildCSSClass
+   */
+
+
+  ClickableComponent.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-control vjs-button ' + _Component.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Adds a child component inside this clickable-component
+   *
+   * @param {String|Component} child The class name or instance of a child to add
+   * @param {Object=} options Options, including options to be passed to children of the child.
+   * @return {Component} The child component (created by this process if a string was used)
+   * @method addChild
+   */
+
+
+  ClickableComponent.prototype.addChild = function addChild(child) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    // TODO: Fix adding an actionable child to a ClickableComponent; currently
+    // it will cause issues with assistive technology (e.g. screen readers)
+    // which support ARIA, since an element with role="button" cannot have
+    // actionable child elements.
+
+    // let className = this.constructor.name;
+    // 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.`);
+
+    return _Component.prototype.addChild.call(this, child, options);
+  };
+
+  /**
+   * Enable the component element
+   *
+   * @return {Component}
+   * @method enable
+   */
+
+
+  ClickableComponent.prototype.enable = function enable() {
+    this.removeClass('vjs-disabled');
+    this.el_.setAttribute('aria-disabled', 'false');
+    return this;
+  };
+
+  /**
+   * Disable the component element
+   *
+   * @return {Component}
+   * @method disable
+   */
+
+
+  ClickableComponent.prototype.disable = function disable() {
+    this.addClass('vjs-disabled');
+    this.el_.setAttribute('aria-disabled', 'true');
+    return this;
+  };
+
+  /**
+   * Handle Click - Override with specific functionality for component
+   *
+   * @method handleClick
+   */
+
+
+  ClickableComponent.prototype.handleClick = function handleClick() {};
+
+  /**
+   * Handle Focus - Add keyboard functionality to element
+   *
+   * @method handleFocus
+   */
+
+
+  ClickableComponent.prototype.handleFocus = function handleFocus() {
+    Events.on(_document2['default'], 'keydown', Fn.bind(this, this.handleKeyPress));
+  };
+
+  /**
+   * Handle KeyPress (document level) - Trigger click when Space or Enter key is pressed
+   *
+   * @method handleKeyPress
+   */
+
+
+  ClickableComponent.prototype.handleKeyPress = function handleKeyPress(event) {
+
+    // Support Space (32) or Enter (13) key operation to fire a click event
+    if (event.which === 32 || event.which === 13) {
+      event.preventDefault();
+      this.handleClick(event);
+    } else if (_Component.prototype.handleKeyPress) {
+
+      // Pass keypress handling up for unsupported keys
+      _Component.prototype.handleKeyPress.call(this, event);
+    }
+  };
+
+  /**
+   * Handle Blur - Remove keyboard triggers
+   *
+   * @method handleBlur
+   */
+
+
+  ClickableComponent.prototype.handleBlur = function handleBlur() {
+    Events.off(_document2['default'], 'keydown', Fn.bind(this, this.handleKeyPress));
+  };
+
+  return ClickableComponent;
+}(_component2['default']);
+
+_component2['default'].registerComponent('ClickableComponent', ClickableComponent);
+exports['default'] = ClickableComponent;
+
+},{"./component":5,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/log.js":85,"global/document":92,"object.assign":136}],4:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * The `CloseButton` component is a button which fires a "close" event
+ * when it is activated.
+ *
+ * @extends Button
+ * @class CloseButton
+ */
+var CloseButton = function (_Button) {
+  _inherits(CloseButton, _Button);
+
+  function CloseButton(player, options) {
+    _classCallCheck(this, CloseButton);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.controlText(options && options.controlText || _this.localize('Close'));
+    return _this;
+  }
+
+  CloseButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-close-button ' + _Button.prototype.buildCSSClass.call(this);
+  };
+
+  CloseButton.prototype.handleClick = function handleClick() {
+    this.trigger({ type: 'close', bubbles: false });
+  };
+
+  return CloseButton;
+}(_button2['default']);
+
+_component2['default'].registerComponent('CloseButton', CloseButton);
+exports['default'] = CloseButton;
+
+},{"./button":2,"./component":5}],5:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _guid = _dereq_('./utils/guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _toTitleCase = _dereq_('./utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+var _mergeOptions = _dereq_('./utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * @file component.js
+                                                                                                                                                           *
+                                                                                                                                                           * Player Component - Base class for all UI objects
+                                                                                                                                                           */
+
+
+/**
+ * Base UI Component class
+ * Components are embeddable UI objects that are represented by both a
+ * javascript object and an element in the DOM. They can be children of other
+ * components, and can have many children themselves.
+ * ```js
+ *     // adding a button to the player
+ *     var button = player.addChild('button');
+ *     button.el(); // -> button element
+ * ```
+ * ```html
+ *     <div class="video-js">
+ *       <div class="vjs-button">Button</div>
+ *     </div>
+ * ```
+ * Components are also event targets.
+ * ```js
+ *     button.on('click', function() {
+ *       console.log('Button Clicked!');
+ *     });
+ *     button.trigger('customevent');
+ * ```
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @class Component
+ */
+var Component = function () {
+  function Component(player, options, ready) {
+    _classCallCheck(this, Component);
+
+    // The component might be the player itself and we can't pass `this` to super
+    if (!player && this.play) {
+      this.player_ = player = this; // eslint-disable-line
+    } else {
+      this.player_ = player;
+    }
+
+    // Make a copy of prototype.options_ to protect against overriding defaults
+    this.options_ = (0, _mergeOptions2['default'])({}, this.options_);
+
+    // Updated options with supplied options
+    options = this.options_ = (0, _mergeOptions2['default'])(this.options_, options);
+
+    // Get ID from options or options element if one is supplied
+    this.id_ = options.id || options.el && options.el.id;
+
+    // If there was no ID from the options, generate one
+    if (!this.id_) {
+      // Don't require the player ID function in the case of mock players
+      var id = player && player.id && player.id() || 'no_player';
+
+      this.id_ = id + '_component_' + Guid.newGUID();
+    }
+
+    this.name_ = options.name || null;
+
+    // Create element if one wasn't provided in options
+    if (options.el) {
+      this.el_ = options.el;
+    } else if (options.createEl !== false) {
+      this.el_ = this.createEl();
+    }
+
+    this.children_ = [];
+    this.childIndex_ = {};
+    this.childNameIndex_ = {};
+
+    // Add any child components in options
+    if (options.initChildren !== false) {
+      this.initChildren();
+    }
+
+    this.ready(ready);
+    // Don't want to trigger ready here or it will before init is actually
+    // finished for all children that run this constructor
+
+    if (options.reportTouchActivity !== false) {
+      this.enableTouchActivity();
+    }
+  }
+
+  /**
+   * Dispose of the component and all child components
+   *
+   * @method dispose
+   */
+
+
+  Component.prototype.dispose = function dispose() {
+    this.trigger({ type: 'dispose', bubbles: false });
+
+    // Dispose all children.
+    if (this.children_) {
+      for (var i = this.children_.length - 1; i >= 0; i--) {
+        if (this.children_[i].dispose) {
+          this.children_[i].dispose();
+        }
+      }
+    }
+
+    // Delete child references
+    this.children_ = null;
+    this.childIndex_ = null;
+    this.childNameIndex_ = null;
+
+    // Remove all event listeners.
+    this.off();
+
+    // Remove element from DOM
+    if (this.el_.parentNode) {
+      this.el_.parentNode.removeChild(this.el_);
+    }
+
+    Dom.removeElData(this.el_);
+    this.el_ = null;
+  };
+
+  /**
+   * Return the component's player
+   *
+   * @return {Player}
+   * @method player
+   */
+
+
+  Component.prototype.player = function player() {
+    return this.player_;
+  };
+
+  /**
+   * Deep merge of options objects
+   * Whenever a property is an object on both options objects
+   * the two properties will be merged using mergeOptions.
+   *
+   * ```js
+   *     Parent.prototype.options_ = {
+   *       optionSet: {
+   *         'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },
+   *         'childTwo': {},
+   *         'childThree': {}
+   *       }
+   *     }
+   *     newOptions = {
+   *       optionSet: {
+   *         'childOne': { 'foo': 'baz', 'abc': '123' }
+   *         'childTwo': null,
+   *         'childFour': {}
+   *       }
+   *     }
+   *
+   *     this.options(newOptions);
+   * ```
+   * RESULT
+   * ```js
+   *     {
+   *       optionSet: {
+   *         'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },
+   *         'childTwo': null, // Disabled. Won't be initialized.
+   *         'childThree': {},
+   *         'childFour': {}
+   *       }
+   *     }
+   * ```
+   *
+   * @param  {Object} obj Object of new option values
+   * @return {Object}     A NEW object of this.options_ and obj merged
+   * @method options
+   */
+
+
+  Component.prototype.options = function options(obj) {
+    _log2['default'].warn('this.options() has been deprecated and will be moved to the constructor in 6.0');
+
+    if (!obj) {
+      return this.options_;
+    }
+
+    this.options_ = (0, _mergeOptions2['default'])(this.options_, obj);
+    return this.options_;
+  };
+
+  /**
+   * Get the component's DOM element
+   * ```js
+   *     var domEl = myComponent.el();
+   * ```
+   *
+   * @return {Element}
+   * @method el
+   */
+
+
+  Component.prototype.el = function el() {
+    return this.el_;
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param  {String=} tagName  Element's node type. e.g. 'div'
+   * @param  {Object=} properties An object of properties that should be set
+   * @param  {Object=} attributes An object of attributes that should be set
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Component.prototype.createEl = function createEl(tagName, properties, attributes) {
+    return Dom.createEl(tagName, properties, attributes);
+  };
+
+  Component.prototype.localize = function localize(string) {
+    var code = this.player_.language && this.player_.language();
+    var languages = this.player_.languages && this.player_.languages();
+
+    if (!code || !languages) {
+      return string;
+    }
+
+    var language = languages[code];
+
+    if (language && language[string]) {
+      return language[string];
+    }
+
+    var primaryCode = code.split('-')[0];
+    var primaryLang = languages[primaryCode];
+
+    if (primaryLang && primaryLang[string]) {
+      return primaryLang[string];
+    }
+
+    return string;
+  };
+
+  /**
+   * Return the component's DOM element where children are inserted.
+   * Will either be the same as el() or a new element defined in createEl().
+   *
+   * @return {Element}
+   * @method contentEl
+   */
+
+
+  Component.prototype.contentEl = function contentEl() {
+    return this.contentEl_ || this.el_;
+  };
+
+  /**
+   * Get the component's ID
+   * ```js
+   *     var id = myComponent.id();
+   * ```
+   *
+   * @return {String}
+   * @method id
+   */
+
+
+  Component.prototype.id = function id() {
+    return this.id_;
+  };
+
+  /**
+   * Get the component's name. The name is often used to reference the component.
+   * ```js
+   *     var name = myComponent.name();
+   * ```
+   *
+   * @return {String}
+   * @method name
+   */
+
+
+  Component.prototype.name = function name() {
+    return this.name_;
+  };
+
+  /**
+   * Get an array of all child components
+   * ```js
+   *     var kids = myComponent.children();
+   * ```
+   *
+   * @return {Array} The children
+   * @method children
+   */
+
+
+  Component.prototype.children = function children() {
+    return this.children_;
+  };
+
+  /**
+   * Returns a child component with the provided ID
+   *
+   * @return {Component}
+   * @method getChildById
+   */
+
+
+  Component.prototype.getChildById = function getChildById(id) {
+    return this.childIndex_[id];
+  };
+
+  /**
+   * Returns a child component with the provided name
+   *
+   * @return {Component}
+   * @method getChild
+   */
+
+
+  Component.prototype.getChild = function getChild(name) {
+    return this.childNameIndex_[name];
+  };
+
+  /**
+   * Adds a child component inside this component
+   * ```js
+   *     myComponent.el();
+   *     // -> <div class='my-component'></div>
+   *     myComponent.children();
+   *     // [empty array]
+   *
+   *     var myButton = myComponent.addChild('MyButton');
+   *     // -> <div class='my-component'><div class="my-button">myButton<div></div>
+   *     // -> myButton === myComponent.children()[0];
+   * ```
+   * Pass in options for child constructors and options for children of the child
+   * ```js
+   *     var myButton = myComponent.addChild('MyButton', {
+   *       text: 'Press Me',
+   *       buttonChildExample: {
+   *         buttonChildOption: true
+   *       }
+   *     });
+   * ```
+   *
+   * @param {String|Component} child The class name or instance of a child to add
+   * @param {Object=} options Options, including options to be passed to children of the child.
+   * @param {Number} index into our children array to attempt to add the child
+   * @return {Component} The child component (created by this process if a string was used)
+   * @method addChild
+   */
+
+
+  Component.prototype.addChild = function addChild(child) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var index = arguments.length <= 2 || arguments[2] === undefined ? this.children_.length : arguments[2];
+
+    var component = void 0;
+    var componentName = void 0;
+
+    // If child is a string, create nt with options
+    if (typeof child === 'string') {
+      componentName = child;
+
+      // Options can also be specified as a boolean, so convert to an empty object if false.
+      if (!options) {
+        options = {};
+      }
+
+      // Same as above, but true is deprecated so show a warning.
+      if (options === true) {
+        _log2['default'].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`.');
+        options = {};
+      }
+
+      // If no componentClass in options, assume componentClass is the name lowercased
+      // (e.g. playButton)
+      var componentClassName = options.componentClass || (0, _toTitleCase2['default'])(componentName);
+
+      // Set name through options
+      options.name = componentName;
+
+      // Create a new object & element for this controls set
+      // If there's no .player_, this is a player
+      var ComponentClass = Component.getComponent(componentClassName);
+
+      if (!ComponentClass) {
+        throw new Error('Component ' + componentClassName + ' does not exist');
+      }
+
+      // data stored directly on the videojs object may be
+      // misidentified as a component to retain
+      // backwards-compatibility with 4.x. check to make sure the
+      // component class can be instantiated.
+      if (typeof ComponentClass !== 'function') {
+        return null;
+      }
+
+      component = new ComponentClass(this.player_ || this, options);
+
+      // child is a component instance
+    } else {
+      component = child;
+    }
+
+    this.children_.splice(index, 0, component);
+
+    if (typeof component.id === 'function') {
+      this.childIndex_[component.id()] = component;
+    }
+
+    // If a name wasn't used to create the component, check if we can use the
+    // name function of the component
+    componentName = componentName || component.name && component.name();
+
+    if (componentName) {
+      this.childNameIndex_[componentName] = component;
+    }
+
+    // Add the UI object's element to the container div (box)
+    // Having an element is not required
+    if (typeof component.el === 'function' && component.el()) {
+      var childNodes = this.contentEl().children;
+      var refNode = childNodes[index] || null;
+
+      this.contentEl().insertBefore(component.el(), refNode);
+    }
+
+    // Return so it can stored on parent object if desired.
+    return component;
+  };
+
+  /**
+   * Remove a child component from this component's list of children, and the
+   * child component's element from this component's element
+   *
+   * @param  {Component} component Component to remove
+   * @method removeChild
+   */
+
+
+  Component.prototype.removeChild = function removeChild(component) {
+    if (typeof component === 'string') {
+      component = this.getChild(component);
+    }
+
+    if (!component || !this.children_) {
+      return;
+    }
+
+    var childFound = false;
+
+    for (var i = this.children_.length - 1; i >= 0; i--) {
+      if (this.children_[i] === component) {
+        childFound = true;
+        this.children_.splice(i, 1);
+        break;
+      }
+    }
+
+    if (!childFound) {
+      return;
+    }
+
+    this.childIndex_[component.id()] = null;
+    this.childNameIndex_[component.name()] = null;
+
+    var compEl = component.el();
+
+    if (compEl && compEl.parentNode === this.contentEl()) {
+      this.contentEl().removeChild(component.el());
+    }
+  };
+
+  /**
+   * Add and initialize default child components from options
+   * ```js
+   *     // when an instance of MyComponent is created, all children in options
+   *     // will be added to the instance by their name strings and options
+   *     MyComponent.prototype.options_ = {
+   *       children: [
+   *         'myChildComponent'
+   *       ],
+   *       myChildComponent: {
+   *         myChildOption: true
+   *       }
+   *     };
+   *
+   *     // Or when creating the component
+   *     var myComp = new MyComponent(player, {
+   *       children: [
+   *         'myChildComponent'
+   *       ],
+   *       myChildComponent: {
+   *         myChildOption: true
+   *       }
+   *     });
+   * ```
+   * The children option can also be an array of
+   * child options objects (that also include a 'name' key).
+   * This can be used if you have two child components of the
+   * same type that need different options.
+   * ```js
+   *     var myComp = new MyComponent(player, {
+   *       children: [
+   *         'button',
+   *         {
+   *           name: 'button',
+   *           someOtherOption: true
+   *         },
+   *         {
+   *           name: 'button',
+   *           someOtherOption: false
+   *         }
+   *       ]
+   *     });
+   * ```
+   *
+   * @method initChildren
+   */
+
+
+  Component.prototype.initChildren = function initChildren() {
+    var _this = this;
+
+    var children = this.options_.children;
+
+    if (children) {
+      (function () {
+        // `this` is `parent`
+        var parentOptions = _this.options_;
+
+        var handleAdd = function handleAdd(child) {
+          var name = child.name;
+          var opts = child.opts;
+
+          // Allow options for children to be set at the parent options
+          // e.g. videojs(id, { controlBar: false });
+          // instead of videojs(id, { children: { controlBar: false });
+          if (parentOptions[name] !== undefined) {
+            opts = parentOptions[name];
+          }
+
+          // Allow for disabling default components
+          // e.g. options['children']['posterImage'] = false
+          if (opts === false) {
+            return;
+          }
+
+          // Allow options to be passed as a simple boolean if no configuration
+          // is necessary.
+          if (opts === true) {
+            opts = {};
+          }
+
+          // We also want to pass the original player options to each component as well so they don't need to
+          // reach back into the player for options later.
+          opts.playerOptions = _this.options_.playerOptions;
+
+          // Create and add the child component.
+          // Add a direct reference to the child by name on the parent instance.
+          // If two of the same component are used, different names should be supplied
+          // for each
+          var newChild = _this.addChild(name, opts);
+
+          if (newChild) {
+            _this[name] = newChild;
+          }
+        };
+
+        // Allow for an array of children details to passed in the options
+        var workingChildren = void 0;
+        var Tech = Component.getComponent('Tech');
+
+        if (Array.isArray(children)) {
+          workingChildren = children;
+        } else {
+          workingChildren = Object.keys(children);
+        }
+
+        workingChildren
+        // children that are in this.options_ but also in workingChildren  would
+        // give us extra children we do not want. So, we want to filter them out.
+        .concat(Object.keys(_this.options_).filter(function (child) {
+          return !workingChildren.some(function (wchild) {
+            if (typeof wchild === 'string') {
+              return child === wchild;
+            }
+            return child === wchild.name;
+          });
+        })).map(function (child) {
+          var name = void 0;
+          var opts = void 0;
+
+          if (typeof child === 'string') {
+            name = child;
+            opts = children[name] || _this.options_[name] || {};
+          } else {
+            name = child.name;
+            opts = child;
+          }
+
+          return { name: name, opts: opts };
+        }).filter(function (child) {
+          // we have to make sure that child.name isn't in the techOrder since
+          // techs are registerd as Components but can't aren't compatible
+          // See https://github.com/videojs/video.js/issues/2772
+          var c = Component.getComponent(child.opts.componentClass || (0, _toTitleCase2['default'])(child.name));
+
+          return c && !Tech.isTech(c);
+        }).forEach(handleAdd);
+      })();
+    }
+  };
+
+  /**
+   * Allows sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  Component.prototype.buildCSSClass = function buildCSSClass() {
+    // Child classes can include a function that does:
+    // return 'CLASS NAME' + this._super();
+    return '';
+  };
+
+  /**
+   * Add an event listener to this component's element
+   * ```js
+   *     var myFunc = function() {
+   *       var myComponent = this;
+   *       // Do something when the event is fired
+   *     };
+   *
+   *     myComponent.on('eventType', myFunc);
+   * ```
+   * The context of myFunc will be myComponent unless previously bound.
+   * Alternatively, you can add a listener to another element or component.
+   * ```js
+   *     myComponent.on(otherElement, 'eventName', myFunc);
+   *     myComponent.on(otherComponent, 'eventName', myFunc);
+   * ```
+   * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`
+   * and `otherComponent.on('eventName', myFunc)` is that this way the listeners
+   * will be automatically cleaned up when either component is disposed.
+   * It will also bind myComponent as the context of myFunc.
+   * **NOTE**: When using this on elements in the page other than window
+   * and document (both permanent), if you remove the element from the DOM
+   * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up
+   * references to it and allow the browser to garbage collect it.
+   *
+   * @param  {String|Component} first   The event type or other component
+   * @param  {Function|String}      second  The event handler or event type
+   * @param  {Function}             third   The event handler
+   * @return {Component}
+   * @method on
+   */
+
+
+  Component.prototype.on = function on(first, second, third) {
+    var _this2 = this;
+
+    if (typeof first === 'string' || Array.isArray(first)) {
+      Events.on(this.el_, first, Fn.bind(this, second));
+
+      // Targeting another component or element
+    } else {
+      (function () {
+        var target = first;
+        var type = second;
+        var fn = Fn.bind(_this2, third);
+
+        // When this component is disposed, remove the listener from the other component
+        var removeOnDispose = function removeOnDispose() {
+          return _this2.off(target, type, fn);
+        };
+
+        // Use the same function ID so we can remove it later it using the ID
+        // of the original listener
+        removeOnDispose.guid = fn.guid;
+        _this2.on('dispose', removeOnDispose);
+
+        // If the other component is disposed first we need to clean the reference
+        // to the other component in this component's removeOnDispose listener
+        // Otherwise we create a memory leak.
+        var cleanRemover = function cleanRemover() {
+          return _this2.off('dispose', removeOnDispose);
+        };
+
+        // Add the same function ID so we can easily remove it later
+        cleanRemover.guid = fn.guid;
+
+        // Check if this is a DOM node
+        if (first.nodeName) {
+          // Add the listener to the other element
+          Events.on(target, type, fn);
+          Events.on(target, 'dispose', cleanRemover);
+
+          // Should be a component
+          // Not using `instanceof Component` because it makes mock players difficult
+        } else if (typeof first.on === 'function') {
+          // Add the listener to the other component
+          target.on(type, fn);
+          target.on('dispose', cleanRemover);
+        }
+      })();
+    }
+
+    return this;
+  };
+
+  /**
+   * Remove an event listener from this component's element
+   * ```js
+   *     myComponent.off('eventType', myFunc);
+   * ```
+   * If myFunc is excluded, ALL listeners for the event type will be removed.
+   * If eventType is excluded, ALL listeners will be removed from the component.
+   * Alternatively you can use `off` to remove listeners that were added to other
+   * elements or components using `myComponent.on(otherComponent...`.
+   * In this case both the event type and listener function are REQUIRED.
+   * ```js
+   *     myComponent.off(otherElement, 'eventType', myFunc);
+   *     myComponent.off(otherComponent, 'eventType', myFunc);
+   * ```
+   *
+   * @param  {String=|Component}  first  The event type or other component
+   * @param  {Function=|String}       second The listener function or event type
+   * @param  {Function=}              third  The listener for other component
+   * @return {Component}
+   * @method off
+   */
+
+
+  Component.prototype.off = function off(first, second, third) {
+    if (!first || typeof first === 'string' || Array.isArray(first)) {
+      Events.off(this.el_, first, second);
+    } else {
+      var target = first;
+      var type = second;
+      // Ensure there's at least a guid, even if the function hasn't been used
+      var fn = Fn.bind(this, third);
+
+      // Remove the dispose listener on this component,
+      // which was given the same guid as the event listener
+      this.off('dispose', fn);
+
+      if (first.nodeName) {
+        // Remove the listener
+        Events.off(target, type, fn);
+        // Remove the listener for cleaning the dispose listener
+        Events.off(target, 'dispose', fn);
+      } else {
+        target.off(type, fn);
+        target.off('dispose', fn);
+      }
+    }
+
+    return this;
+  };
+
+  /**
+   * Add an event listener to be triggered only once and then removed
+   * ```js
+   *     myComponent.one('eventName', myFunc);
+   * ```
+   * Alternatively you can add a listener to another element or component
+   * that will be triggered only once.
+   * ```js
+   *     myComponent.one(otherElement, 'eventName', myFunc);
+   *     myComponent.one(otherComponent, 'eventName', myFunc);
+   * ```
+   *
+   * @param  {String|Component}  first   The event type or other component
+   * @param  {Function|String}       second  The listener function or event type
+   * @param  {Function=}             third   The listener function for other component
+   * @return {Component}
+   * @method one
+   */
+
+
+  Component.prototype.one = function one(first, second, third) {
+    var _this3 = this,
+        _arguments = arguments;
+
+    if (typeof first === 'string' || Array.isArray(first)) {
+      Events.one(this.el_, first, Fn.bind(this, second));
+    } else {
+      (function () {
+        var target = first;
+        var type = second;
+        var fn = Fn.bind(_this3, third);
+
+        var newFunc = function newFunc() {
+          _this3.off(target, type, newFunc);
+          fn.apply(null, _arguments);
+        };
+
+        // Keep the same function ID so we can remove it later
+        newFunc.guid = fn.guid;
+
+        _this3.on(target, type, newFunc);
+      })();
+    }
+
+    return this;
+  };
+
+  /**
+   * Trigger an event on an element
+   * ```js
+   *     myComponent.trigger('eventName');
+   *     myComponent.trigger({'type':'eventName'});
+   *     myComponent.trigger('eventName', {data: 'some data'});
+   *     myComponent.trigger({'type':'eventName'}, {data: 'some data'});
+   * ```
+   *
+   * @param  {Event|Object|String} event  A string (the type) or an event object with a type attribute
+   * @param  {Object} [hash] data hash to pass along with the event
+   * @return {Component}       self
+   * @method trigger
+   */
+
+
+  Component.prototype.trigger = function trigger(event, hash) {
+    Events.trigger(this.el_, event, hash);
+    return this;
+  };
+
+  /**
+   * Bind a listener to the component's ready state.
+   * Different from event listeners in that if the ready event has already happened
+   * it will trigger the function immediately.
+   *
+   * @param  {Function} fn Ready listener
+   * @param  {Boolean} sync Exec the listener synchronously if component is ready
+   * @return {Component}
+   * @method ready
+   */
+
+
+  Component.prototype.ready = function ready(fn) {
+    var sync = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
+
+    if (fn) {
+      if (this.isReady_) {
+        if (sync) {
+          fn.call(this);
+        } else {
+          // Call the function asynchronously by default for consistency
+          this.setTimeout(fn, 1);
+        }
+      } else {
+        this.readyQueue_ = this.readyQueue_ || [];
+        this.readyQueue_.push(fn);
+      }
+    }
+    return this;
+  };
+
+  /**
+   * Trigger the ready listeners
+   *
+   * @return {Component}
+   * @method triggerReady
+   */
+
+
+  Component.prototype.triggerReady = function triggerReady() {
+    this.isReady_ = true;
+
+    // Ensure ready is triggerd asynchronously
+    this.setTimeout(function () {
+      var readyQueue = this.readyQueue_;
+
+      // Reset Ready Queue
+      this.readyQueue_ = [];
+
+      if (readyQueue && readyQueue.length > 0) {
+        readyQueue.forEach(function (fn) {
+          fn.call(this);
+        }, this);
+      }
+
+      // Allow for using event listeners also
+      this.trigger('ready');
+    }, 1);
+  };
+
+  /**
+   * Finds a single DOM element matching `selector` within the component's
+   * `contentEl` or another custom context.
+   *
+   * @method $
+   * @param  {String} selector
+   *         A valid CSS selector, which will be passed to `querySelector`.
+   *
+   * @param  {Element|String} [context=document]
+   *         A DOM element within which to query. Can also be a selector
+   *         string in which case the first matching element will be used
+   *         as context. If missing (or no element matches selector), falls
+   *         back to `document`.
+   *
+   * @return {Element|null}
+   */
+
+
+  Component.prototype.$ = function $(selector, context) {
+    return Dom.$(selector, context || this.contentEl());
+  };
+
+  /**
+   * Finds a all DOM elements matching `selector` within the component's
+   * `contentEl` or another custom context.
+   *
+   * @method $$
+   * @param  {String} selector
+   *         A valid CSS selector, which will be passed to `querySelectorAll`.
+   *
+   * @param  {Element|String} [context=document]
+   *         A DOM element within which to query. Can also be a selector
+   *         string in which case the first matching element will be used
+   *         as context. If missing (or no element matches selector), falls
+   *         back to `document`.
+   *
+   * @return {NodeList}
+   */
+
+
+  Component.prototype.$$ = function $$(selector, context) {
+    return Dom.$$(selector, context || this.contentEl());
+  };
+
+  /**
+   * Check if a component's element has a CSS class name
+   *
+   * @param {String} classToCheck Classname to check
+   * @return {Component}
+   * @method hasClass
+   */
+
+
+  Component.prototype.hasClass = function hasClass(classToCheck) {
+    return Dom.hasElClass(this.el_, classToCheck);
+  };
+
+  /**
+   * Add a CSS class name to the component's element
+   *
+   * @param {String} classToAdd Classname to add
+   * @return {Component}
+   * @method addClass
+   */
+
+
+  Component.prototype.addClass = function addClass(classToAdd) {
+    Dom.addElClass(this.el_, classToAdd);
+    return this;
+  };
+
+  /**
+   * Remove a CSS class name from the component's element
+   *
+   * @param {String} classToRemove Classname to remove
+   * @return {Component}
+   * @method removeClass
+   */
+
+
+  Component.prototype.removeClass = function removeClass(classToRemove) {
+    Dom.removeElClass(this.el_, classToRemove);
+    return this;
+  };
+
+  /**
+   * Add or remove a CSS class name from the component's element
+   *
+   * @param  {String} classToToggle
+   * @param  {Boolean|Function} [predicate]
+   *         Can be a function that returns a Boolean. If `true`, the class
+   *         will be added; if `false`, the class will be removed. If not
+   *         given, the class will be added if not present and vice versa.
+   *
+   * @return {Component}
+   * @method toggleClass
+   */
+
+
+  Component.prototype.toggleClass = function toggleClass(classToToggle, predicate) {
+    Dom.toggleElClass(this.el_, classToToggle, predicate);
+    return this;
+  };
+
+  /**
+   * Show the component element if hidden
+   *
+   * @return {Component}
+   * @method show
+   */
+
+
+  Component.prototype.show = function show() {
+    this.removeClass('vjs-hidden');
+    return this;
+  };
+
+  /**
+   * Hide the component element if currently showing
+   *
+   * @return {Component}
+   * @method hide
+   */
+
+
+  Component.prototype.hide = function hide() {
+    this.addClass('vjs-hidden');
+    return this;
+  };
+
+  /**
+   * Lock an item in its visible state
+   * To be used with fadeIn/fadeOut.
+   *
+   * @return {Component}
+   * @private
+   * @method lockShowing
+   */
+
+
+  Component.prototype.lockShowing = function lockShowing() {
+    this.addClass('vjs-lock-showing');
+    return this;
+  };
+
+  /**
+   * Unlock an item to be hidden
+   * To be used with fadeIn/fadeOut.
+   *
+   * @return {Component}
+   * @private
+   * @method unlockShowing
+   */
+
+
+  Component.prototype.unlockShowing = function unlockShowing() {
+    this.removeClass('vjs-lock-showing');
+    return this;
+  };
+
+  /**
+   * Set or get the width of the component (CSS values)
+   * Setting the video tag dimension values only works with values in pixels.
+   * Percent values will not work.
+   * Some percents can be used, but width()/height() will return the number + %,
+   * not the actual computed width/height.
+   *
+   * @param  {Number|String=} num   Optional width number
+   * @param  {Boolean} skipListeners Skip the 'resize' event trigger
+   * @return {Component} This component, when setting the width
+   * @return {Number|String} The width, when getting
+   * @method width
+   */
+
+
+  Component.prototype.width = function width(num, skipListeners) {
+    return this.dimension('width', num, skipListeners);
+  };
+
+  /**
+   * Get or set the height of the component (CSS values)
+   * Setting the video tag dimension values only works with values in pixels.
+   * Percent values will not work.
+   * Some percents can be used, but width()/height() will return the number + %,
+   * not the actual computed width/height.
+   *
+   * @param  {Number|String=} num     New component height
+   * @param  {Boolean=} skipListeners Skip the resize event trigger
+   * @return {Component} This component, when setting the height
+   * @return {Number|String} The height, when getting
+   * @method height
+   */
+
+
+  Component.prototype.height = function height(num, skipListeners) {
+    return this.dimension('height', num, skipListeners);
+  };
+
+  /**
+   * Set both width and height at the same time
+   *
+   * @param  {Number|String} width Width of player
+   * @param  {Number|String} height Height of player
+   * @return {Component} The component
+   * @method dimensions
+   */
+
+
+  Component.prototype.dimensions = function dimensions(width, height) {
+    // Skip resize listeners on width for optimization
+    return this.width(width, true).height(height);
+  };
+
+  /**
+   * Get or set width or height
+   * This is the shared code for the width() and height() methods.
+   * All for an integer, integer + 'px' or integer + '%';
+   * Known issue: Hidden elements officially have a width of 0. We're defaulting
+   * to the style.width value and falling back to computedStyle which has the
+   * hidden element issue. Info, but probably not an efficient fix:
+   * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/
+   *
+   * @param  {String} widthOrHeight  'width' or 'height'
+   * @param  {Number|String=} num     New dimension
+   * @param  {Boolean=} skipListeners Skip resize event trigger
+   * @return {Component} The component if a dimension was set
+   * @return {Number|String} The dimension if nothing was set
+   * @private
+   * @method dimension
+   */
+
+
+  Component.prototype.dimension = function dimension(widthOrHeight, num, skipListeners) {
+    if (num !== undefined) {
+      // Set to zero if null or literally NaN (NaN !== NaN)
+      if (num === null || num !== num) {
+        num = 0;
+      }
+
+      // Check if using css width/height (% or px) and adjust
+      if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {
+        this.el_.style[widthOrHeight] = num;
+      } else if (num === 'auto') {
+        this.el_.style[widthOrHeight] = '';
+      } else {
+        this.el_.style[widthOrHeight] = num + 'px';
+      }
+
+      // skipListeners allows us to avoid triggering the resize event when setting both width and height
+      if (!skipListeners) {
+        this.trigger('resize');
+      }
+
+      // Return component
+      return this;
+    }
+
+    // Not setting a value, so getting it
+    // Make sure element exists
+    if (!this.el_) {
+      return 0;
+    }
+
+    // Get dimension value from style
+    var val = this.el_.style[widthOrHeight];
+    var pxIndex = val.indexOf('px');
+
+    if (pxIndex !== -1) {
+      // Return the pixel value with no 'px'
+      return parseInt(val.slice(0, pxIndex), 10);
+    }
+
+    // No px so using % or no style was set, so falling back to offsetWidth/height
+    // If component has display:none, offset will return 0
+    // TODO: handle display:none and no dimension style using px
+    return parseInt(this.el_['offset' + (0, _toTitleCase2['default'])(widthOrHeight)], 10);
+  };
+
+  /**
+   * Get width or height of computed style
+   * @param  {String} widthOrHeight  'width' or 'height'
+   * @return {Number|Boolean} The bolean false if nothing was set
+   * @method currentDimension
+   */
+
+
+  Component.prototype.currentDimension = function currentDimension(widthOrHeight) {
+    var computedWidthOrHeight = 0;
+
+    if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {
+      throw new Error('currentDimension only accepts width or height value');
+    }
+
+    if (typeof _window2['default'].getComputedStyle === 'function') {
+      var computedStyle = _window2['default'].getComputedStyle(this.el_);
+
+      computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight];
+    } else if (this.el_.currentStyle) {
+      // ie 8 doesn't support computed style, shim it
+      // return clientWidth or clientHeight instead for better accuracy
+      var rule = 'offset' + (0, _toTitleCase2['default'])(widthOrHeight);
+
+      computedWidthOrHeight = this.el_[rule];
+    }
+
+    // remove 'px' from variable and parse as integer
+    computedWidthOrHeight = parseFloat(computedWidthOrHeight);
+    return computedWidthOrHeight;
+  };
+
+  /**
+   * Get an object which contains width and height values of computed style
+   * @return {Object} The dimensions of element
+   * @method currentDimensions
+   */
+
+
+  Component.prototype.currentDimensions = function currentDimensions() {
+    return {
+      width: this.currentDimension('width'),
+      height: this.currentDimension('height')
+    };
+  };
+
+  /**
+   * Get width of computed style
+   * @return {Integer}
+   * @method currentWidth
+   */
+
+
+  Component.prototype.currentWidth = function currentWidth() {
+    return this.currentDimension('width');
+  };
+
+  /**
+   * Get height of computed style
+   * @return {Integer}
+   * @method currentHeight
+   */
+
+
+  Component.prototype.currentHeight = function currentHeight() {
+    return this.currentDimension('height');
+  };
+
+  /**
+   * Emit 'tap' events when touch events are supported
+   * This is used to support toggling the controls through a tap on the video.
+   * We're requiring them to be enabled because otherwise every component would
+   * have this extra overhead unnecessarily, on mobile devices where extra
+   * overhead is especially bad.
+   *
+   * @private
+   * @method emitTapEvents
+   */
+
+
+  Component.prototype.emitTapEvents = function emitTapEvents() {
+    // Track the start time so we can determine how long the touch lasted
+    var touchStart = 0;
+    var firstTouch = null;
+
+    // Maximum movement allowed during a touch event to still be considered a tap
+    // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.
+    var tapMovementThreshold = 10;
+
+    // The maximum length a touch can be while still being considered a tap
+    var touchTimeThreshold = 200;
+
+    var couldBeTap = void 0;
+
+    this.on('touchstart', function (event) {
+      // If more than one finger, don't consider treating this as a click
+      if (event.touches.length === 1) {
+        // Copy pageX/pageY from the object
+        firstTouch = {
+          pageX: event.touches[0].pageX,
+          pageY: event.touches[0].pageY
+        };
+        // Record start time so we can detect a tap vs. "touch and hold"
+        touchStart = new Date().getTime();
+        // Reset couldBeTap tracking
+        couldBeTap = true;
+      }
+    });
+
+    this.on('touchmove', function (event) {
+      // If more than one finger, don't consider treating this as a click
+      if (event.touches.length > 1) {
+        couldBeTap = false;
+      } else if (firstTouch) {
+        // Some devices will throw touchmoves for all but the slightest of taps.
+        // So, if we moved only a small distance, this could still be a tap
+        var xdiff = event.touches[0].pageX - firstTouch.pageX;
+        var ydiff = event.touches[0].pageY - firstTouch.pageY;
+        var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);
+
+        if (touchDistance > tapMovementThreshold) {
+          couldBeTap = false;
+        }
+      }
+    });
+
+    var noTap = function noTap() {
+      couldBeTap = false;
+    };
+
+    // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s
+    this.on('touchleave', noTap);
+    this.on('touchcancel', noTap);
+
+    // When the touch ends, measure how long it took and trigger the appropriate
+    // event
+    this.on('touchend', function (event) {
+      firstTouch = null;
+      // Proceed only if the touchmove/leave/cancel event didn't happen
+      if (couldBeTap === true) {
+        // Measure how long the touch lasted
+        var touchTime = new Date().getTime() - touchStart;
+
+        // Make sure the touch was less than the threshold to be considered a tap
+        if (touchTime < touchTimeThreshold) {
+          // Don't let browser turn this into a click
+          event.preventDefault();
+          this.trigger('tap');
+          // It may be good to copy the touchend event object and change the
+          // type to tap, if the other event properties aren't exact after
+          // Events.fixEvent runs (e.g. event.target)
+        }
+      }
+    });
+  };
+
+  /**
+   * Report user touch activity when touch events occur
+   * User activity is used to determine when controls should show/hide. It's
+   * relatively simple when it comes to mouse events, because any mouse event
+   * should show the controls. So we capture mouse events that bubble up to the
+   * player and report activity when that happens.
+   * With touch events it isn't as easy. We can't rely on touch events at the
+   * player level, because a tap (touchstart + touchend) on the video itself on
+   * mobile devices is meant to turn controls off (and on). User activity is
+   * checked asynchronously, so what could happen is a tap event on the video
+   * turns the controls off, then the touchend event bubbles up to the player,
+   * which if it reported user activity, would turn the controls right back on.
+   * (We also don't want to completely block touch events from bubbling up)
+   * Also a touchmove, touch+hold, and anything other than a tap is not supposed
+   * to turn the controls back on on a mobile device.
+   * Here we're setting the default component behavior to report user activity
+   * whenever touch events happen, and this can be turned off by components that
+   * want touch events to act differently.
+   *
+   * @method enableTouchActivity
+   */
+
+
+  Component.prototype.enableTouchActivity = function enableTouchActivity() {
+    // Don't continue if the root player doesn't support reporting user activity
+    if (!this.player() || !this.player().reportUserActivity) {
+      return;
+    }
+
+    // listener for reporting that the user is active
+    var report = Fn.bind(this.player(), this.player().reportUserActivity);
+
+    var touchHolding = void 0;
+
+    this.on('touchstart', function () {
+      report();
+      // For as long as the they are touching the device or have their mouse down,
+      // we consider them active even if they're not moving their finger or mouse.
+      // So we want to continue to update that they are active
+      this.clearInterval(touchHolding);
+      // report at the same interval as activityCheck
+      touchHolding = this.setInterval(report, 250);
+    });
+
+    var touchEnd = function touchEnd(event) {
+      report();
+      // stop the interval that maintains activity if the touch is holding
+      this.clearInterval(touchHolding);
+    };
+
+    this.on('touchmove', report);
+    this.on('touchend', touchEnd);
+    this.on('touchcancel', touchEnd);
+  };
+
+  /**
+   * Creates timeout and sets up disposal automatically.
+   *
+   * @param {Function} fn The function to run after the timeout.
+   * @param {Number} timeout Number of ms to delay before executing specified function.
+   * @return {Number} Returns the timeout ID
+   * @method setTimeout
+   */
+
+
+  Component.prototype.setTimeout = function setTimeout(fn, timeout) {
+    fn = Fn.bind(this, fn);
+
+    // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.
+    var timeoutId = _window2['default'].setTimeout(fn, timeout);
+
+    var disposeFn = function disposeFn() {
+      this.clearTimeout(timeoutId);
+    };
+
+    disposeFn.guid = 'vjs-timeout-' + timeoutId;
+
+    this.on('dispose', disposeFn);
+
+    return timeoutId;
+  };
+
+  /**
+   * Clears a timeout and removes the associated dispose listener
+   *
+   * @param {Number} timeoutId The id of the timeout to clear
+   * @return {Number} Returns the timeout ID
+   * @method clearTimeout
+   */
+
+
+  Component.prototype.clearTimeout = function clearTimeout(timeoutId) {
+    _window2['default'].clearTimeout(timeoutId);
+
+    var disposeFn = function disposeFn() {};
+
+    disposeFn.guid = 'vjs-timeout-' + timeoutId;
+
+    this.off('dispose', disposeFn);
+
+    return timeoutId;
+  };
+
+  /**
+   * Creates an interval and sets up disposal automatically.
+   *
+   * @param {Function} fn The function to run every N seconds.
+   * @param {Number} interval Number of ms to delay before executing specified function.
+   * @return {Number} Returns the interval ID
+   * @method setInterval
+   */
+
+
+  Component.prototype.setInterval = function setInterval(fn, interval) {
+    fn = Fn.bind(this, fn);
+
+    var intervalId = _window2['default'].setInterval(fn, interval);
+
+    var disposeFn = function disposeFn() {
+      this.clearInterval(intervalId);
+    };
+
+    disposeFn.guid = 'vjs-interval-' + intervalId;
+
+    this.on('dispose', disposeFn);
+
+    return intervalId;
+  };
+
+  /**
+   * Clears an interval and removes the associated dispose listener
+   *
+   * @param {Number} intervalId The id of the interval to clear
+   * @return {Number} Returns the interval ID
+   * @method clearInterval
+   */
+
+
+  Component.prototype.clearInterval = function clearInterval(intervalId) {
+    _window2['default'].clearInterval(intervalId);
+
+    var disposeFn = function disposeFn() {};
+
+    disposeFn.guid = 'vjs-interval-' + intervalId;
+
+    this.off('dispose', disposeFn);
+
+    return intervalId;
+  };
+
+  /**
+   * Registers a component
+   *
+   * @param {String} name Name of the component to register
+   * @param {Object} comp The component to register
+   * @static
+   * @method registerComponent
+   */
+
+
+  Component.registerComponent = function registerComponent(name, comp) {
+    if (!Component.components_) {
+      Component.components_ = {};
+    }
+
+    Component.components_[name] = comp;
+    return comp;
+  };
+
+  /**
+   * Gets a component by name
+   *
+   * @param {String} name Name of the component to get
+   * @return {Component}
+   * @static
+   * @method getComponent
+   */
+
+
+  Component.getComponent = function getComponent(name) {
+    if (Component.components_ && Component.components_[name]) {
+      return Component.components_[name];
+    }
+
+    if (_window2['default'] && _window2['default'].videojs && _window2['default'].videojs[name]) {
+      _log2['default'].warn('The ' + name + ' component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)');
+      return _window2['default'].videojs[name];
+    }
+  };
+
+  /**
+   * Sets up the constructor using the supplied init method
+   * or uses the init of the parent object
+   *
+   * @param {Object} props An object of properties
+   * @static
+   * @deprecated
+   * @method extend
+   */
+
+
+  Component.extend = function extend(props) {
+    props = props || {};
+
+    _log2['default'].warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');
+
+    // Set up the constructor using the supplied init method
+    // or using the init of the parent object
+    // Make sure to check the unobfuscated version for external libs
+    var init = props.init || props.init || this.prototype.init || this.prototype.init || function () {};
+    // In Resig's simple class inheritance (previously used) the constructor
+    //  is a function that calls `this.init.apply(arguments)`
+    // However that would prevent us from using `ParentObject.call(this);`
+    //  in a Child constructor because the `this` in `this.init`
+    //  would still refer to the Child and cause an infinite loop.
+    // We would instead have to do
+    //    `ParentObject.prototype.init.apply(this, arguments);`
+    //  Bleh. We're not creating a _super() function, so it's good to keep
+    //  the parent constructor reference simple.
+    var subObj = function subObj() {
+      init.apply(this, arguments);
+    };
+
+    // Inherit from this object's prototype
+    subObj.prototype = Object.create(this.prototype);
+    // Reset the constructor property for subObj otherwise
+    // instances of subObj would have the constructor of the parent Object
+    subObj.prototype.constructor = subObj;
+
+    // Make the class extendable
+    subObj.extend = Component.extend;
+
+    // Extend subObj's prototype with functions and other properties from props
+    for (var name in props) {
+      if (props.hasOwnProperty(name)) {
+        subObj.prototype[name] = props[name];
+      }
+    }
+
+    return subObj;
+  };
+
+  return Component;
+}();
+
+Component.registerComponent('Component', Component);
+exports['default'] = Component;
+
+},{"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/to-title-case.js":89,"global/window":93}],6:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackButton = _dereq_('../track-button.js');
+
+var _trackButton2 = _interopRequireDefault(_trackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _audioTrackMenuItem = _dereq_('./audio-track-menu-item.js');
+
+var _audioTrackMenuItem2 = _interopRequireDefault(_audioTrackMenuItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file audio-track-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base class for buttons that toggle specific text track types (e.g. subtitles)
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends TrackButton
+ * @class AudioTrackButton
+ */
+var AudioTrackButton = function (_TrackButton) {
+  _inherits(AudioTrackButton, _TrackButton);
+
+  function AudioTrackButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, AudioTrackButton);
+
+    options.tracks = player.audioTracks && player.audioTracks();
+
+    var _this = _possibleConstructorReturn(this, _TrackButton.call(this, player, options));
+
+    _this.el_.setAttribute('aria-label', 'Audio Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  AudioTrackButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-audio-button ' + _TrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create a menu item for each audio track
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  AudioTrackButton.prototype.createItems = function createItems() {
+    var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    var tracks = this.player_.audioTracks && this.player_.audioTracks();
+
+    if (!tracks) {
+      return items;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      items.push(new _audioTrackMenuItem2['default'](this.player_, {
+        track: track,
+        // MenuItem is selectable
+        selectable: true
+      }));
+    }
+
+    return items;
+  };
+
+  return AudioTrackButton;
+}(_trackButton2['default']);
+
+AudioTrackButton.prototype.controlText_ = 'Audio Track';
+_component2['default'].registerComponent('AudioTrackButton', AudioTrackButton);
+exports['default'] = AudioTrackButton;
+
+},{"../../component.js":5,"../track-button.js":36,"./audio-track-menu-item.js":7}],7:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file audio-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The audio track menu item
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class AudioTrackMenuItem
+ */
+var AudioTrackMenuItem = function (_MenuItem) {
+  _inherits(AudioTrackMenuItem, _MenuItem);
+
+  function AudioTrackMenuItem(player, options) {
+    _classCallCheck(this, AudioTrackMenuItem);
+
+    var track = options.track;
+    var tracks = player.audioTracks();
+
+    // Modify options for parent MenuItem class's init.
+    options.label = track.label || track.language || 'Unknown';
+    options.selected = track.enabled;
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.track = track;
+
+    if (tracks) {
+      (function () {
+        var changeHandler = Fn.bind(_this, _this.handleTracksChange);
+
+        tracks.addEventListener('change', changeHandler);
+        _this.on('dispose', function () {
+          tracks.removeEventListener('change', changeHandler);
+        });
+      })();
+    }
+    return _this;
+  }
+
+  /**
+   * Handle click on audio track
+   *
+   * @method handleClick
+   */
+
+
+  AudioTrackMenuItem.prototype.handleClick = function handleClick(event) {
+    var tracks = this.player_.audioTracks();
+
+    _MenuItem.prototype.handleClick.call(this, event);
+
+    if (!tracks) {
+      return;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      track.enabled = track === this.track;
+    }
+  };
+
+  /**
+   * Handle audio track change
+   *
+   * @method handleTracksChange
+   */
+
+
+  AudioTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {
+    this.selected(this.track.enabled);
+  };
+
+  return AudioTrackMenuItem;
+}(_menuItem2['default']);
+
+_component2['default'].registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);
+exports['default'] = AudioTrackMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],8:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+_dereq_('./play-toggle.js');
+
+_dereq_('./time-controls/current-time-display.js');
+
+_dereq_('./time-controls/duration-display.js');
+
+_dereq_('./time-controls/time-divider.js');
+
+_dereq_('./time-controls/remaining-time-display.js');
+
+_dereq_('./live-display.js');
+
+_dereq_('./progress-control/progress-control.js');
+
+_dereq_('./fullscreen-toggle.js');
+
+_dereq_('./volume-control/volume-control.js');
+
+_dereq_('./volume-menu-button.js');
+
+_dereq_('./mute-toggle.js');
+
+_dereq_('./text-track-controls/chapters-button.js');
+
+_dereq_('./text-track-controls/descriptions-button.js');
+
+_dereq_('./text-track-controls/subtitles-button.js');
+
+_dereq_('./text-track-controls/captions-button.js');
+
+_dereq_('./audio-track-controls/audio-track-button.js');
+
+_dereq_('./playback-rate-menu/playback-rate-menu-button.js');
+
+_dereq_('./spacer-controls/custom-control-spacer.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file control-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+// Required children
+
+
+/**
+ * Container of main controls
+ *
+ * @extends Component
+ * @class ControlBar
+ */
+var ControlBar = function (_Component) {
+  _inherits(ControlBar, _Component);
+
+  function ControlBar() {
+    _classCallCheck(this, ControlBar);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  ControlBar.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-control-bar',
+      dir: 'ltr'
+    }, {
+      // The control bar is a group, so it can contain menuitems
+      role: 'group'
+    });
+  };
+
+  return ControlBar;
+}(_component2['default']);
+
+ControlBar.prototype.options_ = {
+  children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subtitlesButton', 'captionsButton', 'audioTrackButton', 'fullscreenToggle']
+};
+
+_component2['default'].registerComponent('ControlBar', ControlBar);
+exports['default'] = ControlBar;
+
+},{"../component.js":5,"./audio-track-controls/audio-track-button.js":6,"./fullscreen-toggle.js":9,"./live-display.js":10,"./mute-toggle.js":11,"./play-toggle.js":12,"./playback-rate-menu/playback-rate-menu-button.js":13,"./progress-control/progress-control.js":18,"./spacer-controls/custom-control-spacer.js":21,"./text-track-controls/captions-button.js":24,"./text-track-controls/chapters-button.js":25,"./text-track-controls/descriptions-button.js":27,"./text-track-controls/subtitles-button.js":29,"./time-controls/current-time-display.js":32,"./time-controls/duration-display.js":33,"./time-controls/remaining-time-display.js":34,"./time-controls/time-divider.js":35,"./volume-control/volume-control.js":38,"./volume-menu-button.js":40}],9:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('../button.js');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file fullscreen-toggle.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Toggle fullscreen video
+ *
+ * @extends Button
+ * @class FullscreenToggle
+ */
+var FullscreenToggle = function (_Button) {
+  _inherits(FullscreenToggle, _Button);
+
+  function FullscreenToggle(player, options) {
+    _classCallCheck(this, FullscreenToggle);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.on(player, 'fullscreenchange', _this.handleFullscreenChange);
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  FullscreenToggle.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-fullscreen-control ' + _Button.prototype.buildCSSClass.call(this);
+  };
+  /**
+   * Handles Fullscreenchange on the component and change control text accordingly
+   *
+   * @method handleFullscreenChange
+   */
+
+
+  FullscreenToggle.prototype.handleFullscreenChange = function handleFullscreenChange() {
+    if (this.player_.isFullscreen()) {
+      this.controlText('Non-Fullscreen');
+    } else {
+      this.controlText('Fullscreen');
+    }
+  };
+  /**
+   * Handles click for full screen
+   *
+   * @method handleClick
+   */
+
+
+  FullscreenToggle.prototype.handleClick = function handleClick() {
+    if (!this.player_.isFullscreen()) {
+      this.player_.requestFullscreen();
+    } else {
+      this.player_.exitFullscreen();
+    }
+  };
+
+  return FullscreenToggle;
+}(_button2['default']);
+
+FullscreenToggle.prototype.controlText_ = 'Fullscreen';
+
+_component2['default'].registerComponent('FullscreenToggle', FullscreenToggle);
+exports['default'] = FullscreenToggle;
+
+},{"../button.js":2,"../component.js":5}],10:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file live-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the live indicator
+ * TODO - Future make it click to snap to live
+ *
+ * @extends Component
+ * @class LiveDisplay
+ */
+var LiveDisplay = function (_Component) {
+  _inherits(LiveDisplay, _Component);
+
+  function LiveDisplay(player, options) {
+    _classCallCheck(this, LiveDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.updateShowing();
+    _this.on(_this.player(), 'durationchange', _this.updateShowing);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  LiveDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-live-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-live-display',
+      innerHTML: '<span class="vjs-control-text">' + this.localize('Stream Type') + '</span>' + this.localize('LIVE')
+    }, {
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  LiveDisplay.prototype.updateShowing = function updateShowing() {
+    if (this.player().duration() === Infinity) {
+      this.show();
+    } else {
+      this.hide();
+    }
+  };
+
+  return LiveDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('LiveDisplay', LiveDisplay);
+exports['default'] = LiveDisplay;
+
+},{"../component":5,"../utils/dom.js":80}],11:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file mute-toggle.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A button component for muting the audio
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class MuteToggle
+ */
+var MuteToggle = function (_Button) {
+  _inherits(MuteToggle, _Button);
+
+  function MuteToggle(player, options) {
+    _classCallCheck(this, MuteToggle);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.on(player, 'volumechange', _this.update);
+
+    // hide mute toggle if the current tech doesn't support volume control
+    if (player.tech_ && player.tech_.featuresVolumeControl === false) {
+      _this.addClass('vjs-hidden');
+    }
+
+    _this.on(player, 'loadstart', function () {
+      // We need to update the button to account for a default muted state.
+      this.update();
+
+      if (player.tech_.featuresVolumeControl === false) {
+        this.addClass('vjs-hidden');
+      } else {
+        this.removeClass('vjs-hidden');
+      }
+    });
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  MuteToggle.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-mute-control ' + _Button.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Handle click on mute
+   *
+   * @method handleClick
+   */
+
+
+  MuteToggle.prototype.handleClick = function handleClick() {
+    this.player_.muted(this.player_.muted() ? false : true);
+  };
+
+  /**
+   * Update volume
+   *
+   * @method update
+   */
+
+
+  MuteToggle.prototype.update = function update() {
+    var vol = this.player_.volume();
+    var level = 3;
+
+    if (vol === 0 || this.player_.muted()) {
+      level = 0;
+    } else if (vol < 0.33) {
+      level = 1;
+    } else if (vol < 0.67) {
+      level = 2;
+    }
+
+    // Don't rewrite the button text if the actual text doesn't change.
+    // This causes unnecessary and confusing information for screen reader users.
+    // This check is needed because this function gets called every time the volume level is changed.
+    var toMute = this.player_.muted() ? 'Unmute' : 'Mute';
+
+    if (this.controlText() !== toMute) {
+      this.controlText(toMute);
+    }
+
+    // TODO improve muted icon classes
+    for (var i = 0; i < 4; i++) {
+      Dom.removeElClass(this.el_, 'vjs-vol-' + i);
+    }
+    Dom.addElClass(this.el_, 'vjs-vol-' + level);
+  };
+
+  return MuteToggle;
+}(_button2['default']);
+
+MuteToggle.prototype.controlText_ = 'Mute';
+
+_component2['default'].registerComponent('MuteToggle', MuteToggle);
+exports['default'] = MuteToggle;
+
+},{"../button":2,"../component":5,"../utils/dom.js":80}],12:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _button = _dereq_('../button.js');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file play-toggle.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Button to toggle between play and pause
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class PlayToggle
+ */
+var PlayToggle = function (_Button) {
+  _inherits(PlayToggle, _Button);
+
+  function PlayToggle(player, options) {
+    _classCallCheck(this, PlayToggle);
+
+    var _this = _possibleConstructorReturn(this, _Button.call(this, player, options));
+
+    _this.on(player, 'play', _this.handlePlay);
+    _this.on(player, 'pause', _this.handlePause);
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  PlayToggle.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-play-control ' + _Button.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Handle click to toggle between play and pause
+   *
+   * @method handleClick
+   */
+
+
+  PlayToggle.prototype.handleClick = function handleClick() {
+    if (this.player_.paused()) {
+      this.player_.play();
+    } else {
+      this.player_.pause();
+    }
+  };
+
+  /**
+   * Add the vjs-playing class to the element so it can change appearance
+   *
+   * @method handlePlay
+   */
+
+
+  PlayToggle.prototype.handlePlay = function handlePlay() {
+    this.removeClass('vjs-paused');
+    this.addClass('vjs-playing');
+    // change the button text to "Pause"
+    this.controlText('Pause');
+  };
+
+  /**
+   * Add the vjs-paused class to the element so it can change appearance
+   *
+   * @method handlePause
+   */
+
+
+  PlayToggle.prototype.handlePause = function handlePause() {
+    this.removeClass('vjs-playing');
+    this.addClass('vjs-paused');
+    // change the button text to "Play"
+    this.controlText('Play');
+  };
+
+  return PlayToggle;
+}(_button2['default']);
+
+PlayToggle.prototype.controlText_ = 'Play';
+
+_component2['default'].registerComponent('PlayToggle', PlayToggle);
+exports['default'] = PlayToggle;
+
+},{"../button.js":2,"../component.js":5}],13:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuButton = _dereq_('../../menu/menu-button.js');
+
+var _menuButton2 = _interopRequireDefault(_menuButton);
+
+var _menu = _dereq_('../../menu/menu.js');
+
+var _menu2 = _interopRequireDefault(_menu);
+
+var _playbackRateMenuItem = _dereq_('./playback-rate-menu-item.js');
+
+var _playbackRateMenuItem2 = _interopRequireDefault(_playbackRateMenuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file playback-rate-menu-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The component for controlling the playback rate
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuButton
+ * @class PlaybackRateMenuButton
+ */
+var PlaybackRateMenuButton = function (_MenuButton) {
+  _inherits(PlaybackRateMenuButton, _MenuButton);
+
+  function PlaybackRateMenuButton(player, options) {
+    _classCallCheck(this, PlaybackRateMenuButton);
+
+    var _this = _possibleConstructorReturn(this, _MenuButton.call(this, player, options));
+
+    _this.updateVisibility();
+    _this.updateLabel();
+
+    _this.on(player, 'loadstart', _this.updateVisibility);
+    _this.on(player, 'ratechange', _this.updateLabel);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PlaybackRateMenuButton.prototype.createEl = function createEl() {
+    var el = _MenuButton.prototype.createEl.call(this);
+
+    this.labelEl_ = Dom.createEl('div', {
+      className: 'vjs-playback-rate-value',
+      innerHTML: 1.0
+    });
+
+    el.appendChild(this.labelEl_);
+
+    return el;
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  PlaybackRateMenuButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-playback-rate ' + _MenuButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create the playback rate menu
+   *
+   * @return {Menu} Menu object populated with items
+   * @method createMenu
+   */
+
+
+  PlaybackRateMenuButton.prototype.createMenu = function createMenu() {
+    var menu = new _menu2['default'](this.player());
+    var rates = this.playbackRates();
+
+    if (rates) {
+      for (var i = rates.length - 1; i >= 0; i--) {
+        menu.addChild(new _playbackRateMenuItem2['default'](this.player(), { rate: rates[i] + 'x' }));
+      }
+    }
+
+    return menu;
+  };
+
+  /**
+   * Updates ARIA accessibility attributes
+   *
+   * @method updateARIAAttributes
+   */
+
+
+  PlaybackRateMenuButton.prototype.updateARIAAttributes = function updateARIAAttributes() {
+    // Current playback rate
+    this.el().setAttribute('aria-valuenow', this.player().playbackRate());
+  };
+
+  /**
+   * Handle menu item click
+   *
+   * @method handleClick
+   */
+
+
+  PlaybackRateMenuButton.prototype.handleClick = function handleClick() {
+    // select next rate option
+    var currentRate = this.player().playbackRate();
+    var rates = this.playbackRates();
+
+    // this will select first one if the last one currently selected
+    var newRate = rates[0];
+
+    for (var i = 0; i < rates.length; i++) {
+      if (rates[i] > currentRate) {
+        newRate = rates[i];
+        break;
+      }
+    }
+    this.player().playbackRate(newRate);
+  };
+
+  /**
+   * Get possible playback rates
+   *
+   * @return {Array} Possible playback rates
+   * @method playbackRates
+   */
+
+
+  PlaybackRateMenuButton.prototype.playbackRates = function playbackRates() {
+    return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.playbackRates;
+  };
+
+  /**
+   * Get whether playback rates is supported by the tech
+   * and an array of playback rates exists
+   *
+   * @return {Boolean} Whether changing playback rate is supported
+   * @method playbackRateSupported
+   */
+
+
+  PlaybackRateMenuButton.prototype.playbackRateSupported = function playbackRateSupported() {
+    return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && this.playbackRates().length > 0;
+  };
+
+  /**
+   * Hide playback rate controls when they're no playback rate options to select
+   *
+   * @method updateVisibility
+   */
+
+
+  PlaybackRateMenuButton.prototype.updateVisibility = function updateVisibility() {
+    if (this.playbackRateSupported()) {
+      this.removeClass('vjs-hidden');
+    } else {
+      this.addClass('vjs-hidden');
+    }
+  };
+
+  /**
+   * Update button label when rate changed
+   *
+   * @method updateLabel
+   */
+
+
+  PlaybackRateMenuButton.prototype.updateLabel = function updateLabel() {
+    if (this.playbackRateSupported()) {
+      this.labelEl_.innerHTML = this.player().playbackRate() + 'x';
+    }
+  };
+
+  return PlaybackRateMenuButton;
+}(_menuButton2['default']);
+
+PlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';
+
+_component2['default'].registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);
+exports['default'] = PlaybackRateMenuButton;
+
+},{"../../component.js":5,"../../menu/menu-button.js":47,"../../menu/menu.js":49,"../../utils/dom.js":80,"./playback-rate-menu-item.js":14}],14:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file playback-rate-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The specific menu item type for selecting a playback rate
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class PlaybackRateMenuItem
+ */
+var PlaybackRateMenuItem = function (_MenuItem) {
+  _inherits(PlaybackRateMenuItem, _MenuItem);
+
+  function PlaybackRateMenuItem(player, options) {
+    _classCallCheck(this, PlaybackRateMenuItem);
+
+    var label = options.rate;
+    var rate = parseFloat(label, 10);
+
+    // Modify options for parent MenuItem class's init.
+    options.label = label;
+    options.selected = rate === 1;
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.label = label;
+    _this.rate = rate;
+
+    _this.on(player, 'ratechange', _this.update);
+    return _this;
+  }
+
+  /**
+   * Handle click on menu item
+   *
+   * @method handleClick
+   */
+
+
+  PlaybackRateMenuItem.prototype.handleClick = function handleClick() {
+    _MenuItem.prototype.handleClick.call(this);
+    this.player().playbackRate(this.rate);
+  };
+
+  /**
+   * Update playback rate with selected rate
+   *
+   * @method update
+   */
+
+
+  PlaybackRateMenuItem.prototype.update = function update() {
+    this.selected(this.player().playbackRate() === this.rate);
+  };
+
+  return PlaybackRateMenuItem;
+}(_menuItem2['default']);
+
+PlaybackRateMenuItem.prototype.contentElType = 'button';
+
+_component2['default'].registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);
+exports['default'] = PlaybackRateMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48}],15:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file load-progress-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows load progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class LoadProgressBar
+ */
+var LoadProgressBar = function (_Component) {
+  _inherits(LoadProgressBar, _Component);
+
+  function LoadProgressBar(player, options) {
+    _classCallCheck(this, LoadProgressBar);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'progress', _this.update);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  LoadProgressBar.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-load-progress',
+      innerHTML: '<span class="vjs-control-text"><span>' + this.localize('Loaded') + '</span>: 0%</span>'
+    });
+  };
+
+  /**
+   * Update progress bar
+   *
+   * @method update
+   */
+
+
+  LoadProgressBar.prototype.update = function update() {
+    var buffered = this.player_.buffered();
+    var duration = this.player_.duration();
+    var bufferedEnd = this.player_.bufferedEnd();
+    var children = this.el_.children;
+
+    // get the percent width of a time compared to the total end
+    var percentify = function percentify(time, end) {
+      // no NaN
+      var percent = time / end || 0;
+
+      return (percent >= 1 ? 1 : percent) * 100 + '%';
+    };
+
+    // update the width of the progress bar
+    this.el_.style.width = percentify(bufferedEnd, duration);
+
+    // add child elements to represent the individual buffered time ranges
+    for (var i = 0; i < buffered.length; i++) {
+      var start = buffered.start(i);
+      var end = buffered.end(i);
+      var part = children[i];
+
+      if (!part) {
+        part = this.el_.appendChild(Dom.createEl());
+      }
+
+      // set the percent based on the width of the progress bar (bufferedEnd)
+      part.style.left = percentify(start, bufferedEnd);
+      part.style.width = percentify(end - start, bufferedEnd);
+    }
+
+    // remove unused buffered range elements
+    for (var _i = children.length; _i > buffered.length; _i--) {
+      this.el_.removeChild(children[_i - 1]);
+    }
+  };
+
+  return LoadProgressBar;
+}(_component2['default']);
+
+_component2['default'].registerComponent('LoadProgressBar', LoadProgressBar);
+exports['default'] = LoadProgressBar;
+
+},{"../../component.js":5,"../../utils/dom.js":80}],16:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+var _throttle = _dereq_('lodash-compat/function/throttle');
+
+var _throttle2 = _interopRequireDefault(_throttle);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file mouse-time-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Mouse Time Display component shows the time you will seek to
+ * when hovering over the progress bar
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class MouseTimeDisplay
+ */
+var MouseTimeDisplay = function (_Component) {
+  _inherits(MouseTimeDisplay, _Component);
+
+  function MouseTimeDisplay(player, options) {
+    _classCallCheck(this, MouseTimeDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {
+      _this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;
+    }
+
+    if (_this.keepTooltipsInside) {
+      _this.tooltip = Dom.createEl('div', { className: 'vjs-time-tooltip' });
+      _this.el().appendChild(_this.tooltip);
+      _this.addClass('vjs-keep-tooltips-inside');
+    }
+
+    _this.update(0, 0);
+
+    player.on('ready', function () {
+      _this.on(player.controlBar.progressControl.el(), 'mousemove', (0, _throttle2['default'])(Fn.bind(_this, _this.handleMouseMove), 25));
+    });
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  MouseTimeDisplay.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-mouse-display'
+    });
+  };
+
+  MouseTimeDisplay.prototype.handleMouseMove = function handleMouseMove(event) {
+    var duration = this.player_.duration();
+    var newTime = this.calculateDistance(event) * duration;
+    var position = event.pageX - Dom.findElPosition(this.el().parentNode).left;
+
+    this.update(newTime, position);
+  };
+
+  MouseTimeDisplay.prototype.update = function update(newTime, position) {
+    var time = (0, _formatTime2['default'])(newTime, this.player_.duration());
+
+    this.el().style.left = position + 'px';
+    this.el().setAttribute('data-current-time', time);
+
+    if (this.keepTooltipsInside) {
+      var clampedPosition = this.clampPosition_(position);
+      var difference = position - clampedPosition + 1;
+      var tooltipWidth = parseFloat(_window2['default'].getComputedStyle(this.tooltip).width);
+      var tooltipWidthHalf = tooltipWidth / 2;
+
+      this.tooltip.innerHTML = time;
+      this.tooltip.style.right = '-' + (tooltipWidthHalf - difference) + 'px';
+    }
+  };
+
+  MouseTimeDisplay.prototype.calculateDistance = function calculateDistance(event) {
+    return Dom.getPointerPosition(this.el().parentNode, event).x;
+  };
+
+  /**
+   * This takes in a horizontal position for the bar and returns a clamped position.
+   * Clamped position means that it will keep the position greater than half the width
+   * of the tooltip and smaller than the player width minus half the width o the tooltip.
+   * It will only clamp the position if `keepTooltipsInside` option is set.
+   *
+   * @param {Number} position the position the bar wants to be
+   * @return {Number} newPosition the (potentially) clamped position
+   * @method clampPosition_
+   */
+
+
+  MouseTimeDisplay.prototype.clampPosition_ = function clampPosition_(position) {
+    if (!this.keepTooltipsInside) {
+      return position;
+    }
+
+    var playerWidth = parseFloat(_window2['default'].getComputedStyle(this.player().el()).width);
+    var tooltipWidth = parseFloat(_window2['default'].getComputedStyle(this.tooltip).width);
+    var tooltipWidthHalf = tooltipWidth / 2;
+    var actualPosition = position;
+
+    if (position < tooltipWidthHalf) {
+      actualPosition = Math.ceil(tooltipWidthHalf);
+    } else if (position > playerWidth - tooltipWidthHalf) {
+      actualPosition = Math.floor(playerWidth - tooltipWidthHalf);
+    }
+
+    return actualPosition;
+  };
+
+  return MouseTimeDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('MouseTimeDisplay', MouseTimeDisplay);
+exports['default'] = MouseTimeDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/fn.js":82,"../../utils/format-time.js":83,"global/window":93,"lodash-compat/function/throttle":98}],17:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file play-progress-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows play progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class PlayProgressBar
+ */
+var PlayProgressBar = function (_Component) {
+  _inherits(PlayProgressBar, _Component);
+
+  function PlayProgressBar(player, options) {
+    _classCallCheck(this, PlayProgressBar);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.updateDataAttr();
+    _this.on(player, 'timeupdate', _this.updateDataAttr);
+    player.ready(Fn.bind(_this, _this.updateDataAttr));
+
+    if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {
+      _this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;
+    }
+
+    if (_this.keepTooltipsInside) {
+      _this.addClass('vjs-keep-tooltips-inside');
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PlayProgressBar.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-play-progress vjs-slider-bar',
+      innerHTML: '<span class="vjs-control-text"><span>' + this.localize('Progress') + '</span>: 0%</span>'
+    });
+  };
+
+  PlayProgressBar.prototype.updateDataAttr = function updateDataAttr() {
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+
+    this.el_.setAttribute('data-current-time', (0, _formatTime2['default'])(time, this.player_.duration()));
+  };
+
+  return PlayProgressBar;
+}(_component2['default']);
+
+_component2['default'].registerComponent('PlayProgressBar', PlayProgressBar);
+exports['default'] = PlayProgressBar;
+
+},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],18:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+_dereq_('./seek-bar.js');
+
+_dereq_('./mouse-time-display.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file progress-control.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Progress Control component contains the seek bar, load progress,
+ * and play progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class ProgressControl
+ */
+var ProgressControl = function (_Component) {
+  _inherits(ProgressControl, _Component);
+
+  function ProgressControl() {
+    _classCallCheck(this, ProgressControl);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  ProgressControl.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-progress-control vjs-control'
+    });
+  };
+
+  return ProgressControl;
+}(_component2['default']);
+
+ProgressControl.prototype.options_ = {
+  children: ['seekBar']
+};
+
+_component2['default'].registerComponent('ProgressControl', ProgressControl);
+exports['default'] = ProgressControl;
+
+},{"../../component.js":5,"./mouse-time-display.js":16,"./seek-bar.js":19}],19:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _slider = _dereq_('../../slider/slider.js');
+
+var _slider2 = _interopRequireDefault(_slider);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+_dereq_('./load-progress-bar.js');
+
+_dereq_('./play-progress-bar.js');
+
+_dereq_('./tooltip-progress-bar.js');
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file seek-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Seek Bar and holder for the progress bars
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Slider
+ * @class SeekBar
+ */
+var SeekBar = function (_Slider) {
+  _inherits(SeekBar, _Slider);
+
+  function SeekBar(player, options) {
+    _classCallCheck(this, SeekBar);
+
+    var _this = _possibleConstructorReturn(this, _Slider.call(this, player, options));
+
+    _this.on(player, 'timeupdate', _this.updateProgress);
+    _this.on(player, 'ended', _this.updateProgress);
+    player.ready(Fn.bind(_this, _this.updateProgress));
+
+    if (options.playerOptions && options.playerOptions.controlBar && options.playerOptions.controlBar.progressControl && options.playerOptions.controlBar.progressControl.keepTooltipsInside) {
+      _this.keepTooltipsInside = options.playerOptions.controlBar.progressControl.keepTooltipsInside;
+    }
+
+    if (_this.keepTooltipsInside) {
+      _this.tooltipProgressBar = _this.addChild('TooltipProgressBar');
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  SeekBar.prototype.createEl = function createEl() {
+    return _Slider.prototype.createEl.call(this, 'div', {
+      className: 'vjs-progress-holder'
+    }, {
+      'aria-label': 'progress bar'
+    });
+  };
+
+  /**
+   * Update ARIA accessibility attributes
+   *
+   * @method updateARIAAttributes
+   */
+
+
+  SeekBar.prototype.updateProgress = function updateProgress() {
+    this.updateAriaAttributes(this.el_);
+
+    if (this.keepTooltipsInside) {
+      this.updateAriaAttributes(this.tooltipProgressBar.el_);
+      this.tooltipProgressBar.el_.style.width = this.bar.el_.style.width;
+
+      var playerWidth = parseFloat(_window2['default'].getComputedStyle(this.player().el()).width);
+      var tooltipWidth = parseFloat(_window2['default'].getComputedStyle(this.tooltipProgressBar.tooltip).width);
+      var tooltipStyle = this.tooltipProgressBar.el().style;
+
+      tooltipStyle.maxWidth = Math.floor(playerWidth - tooltipWidth / 2) + 'px';
+      tooltipStyle.minWidth = Math.ceil(tooltipWidth / 2) + 'px';
+      tooltipStyle.right = '-' + tooltipWidth / 2 + 'px';
+    }
+  };
+
+  SeekBar.prototype.updateAriaAttributes = function updateAriaAttributes(el) {
+    // Allows for smooth scrubbing, when player can't keep up.
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+
+    // machine readable value of progress bar (percentage complete)
+    el.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2));
+    // human readable value of progress bar (time complete)
+    el.setAttribute('aria-valuetext', (0, _formatTime2['default'])(time, this.player_.duration()));
+  };
+
+  /**
+   * Get percentage of video played
+   *
+   * @return {Number} Percentage played
+   * @method getPercent
+   */
+
+
+  SeekBar.prototype.getPercent = function getPercent() {
+    var percent = this.player_.currentTime() / this.player_.duration();
+
+    return percent >= 1 ? 1 : percent;
+  };
+
+  /**
+   * Handle mouse down on seek bar
+   *
+   * @method handleMouseDown
+   */
+
+
+  SeekBar.prototype.handleMouseDown = function handleMouseDown(event) {
+    _Slider.prototype.handleMouseDown.call(this, event);
+
+    this.player_.scrubbing(true);
+
+    this.videoWasPlaying = !this.player_.paused();
+    this.player_.pause();
+  };
+
+  /**
+   * Handle mouse move on seek bar
+   *
+   * @method handleMouseMove
+   */
+
+
+  SeekBar.prototype.handleMouseMove = function handleMouseMove(event) {
+    var newTime = this.calculateDistance(event) * this.player_.duration();
+
+    // Don't let video end while scrubbing.
+    if (newTime === this.player_.duration()) {
+      newTime = newTime - 0.1;
+    }
+
+    // Set new time (tell player to seek to new time)
+    this.player_.currentTime(newTime);
+  };
+
+  /**
+   * Handle mouse up on seek bar
+   *
+   * @method handleMouseUp
+   */
+
+
+  SeekBar.prototype.handleMouseUp = function handleMouseUp(event) {
+    _Slider.prototype.handleMouseUp.call(this, event);
+
+    this.player_.scrubbing(false);
+    if (this.videoWasPlaying) {
+      this.player_.play();
+    }
+  };
+
+  /**
+   * Move more quickly fast forward for keyboard-only users
+   *
+   * @method stepForward
+   */
+
+
+  SeekBar.prototype.stepForward = function stepForward() {
+    // more quickly fast forward for keyboard-only users
+    this.player_.currentTime(this.player_.currentTime() + 5);
+  };
+
+  /**
+   * Move more quickly rewind for keyboard-only users
+   *
+   * @method stepBack
+   */
+
+
+  SeekBar.prototype.stepBack = function stepBack() {
+    // more quickly rewind for keyboard-only users
+    this.player_.currentTime(this.player_.currentTime() - 5);
+  };
+
+  return SeekBar;
+}(_slider2['default']);
+
+SeekBar.prototype.options_ = {
+  children: ['loadProgressBar', 'mouseTimeDisplay', 'playProgressBar'],
+  barName: 'playProgressBar'
+};
+
+SeekBar.prototype.playerEvent = 'timeupdate';
+
+_component2['default'].registerComponent('SeekBar', SeekBar);
+exports['default'] = SeekBar;
+
+},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"../../utils/format-time.js":83,"./load-progress-bar.js":15,"./play-progress-bar.js":17,"./tooltip-progress-bar.js":20,"global/window":93}],20:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file play-progress-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows play progress
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class PlayProgressBar
+ */
+var TooltipProgressBar = function (_Component) {
+  _inherits(TooltipProgressBar, _Component);
+
+  function TooltipProgressBar(player, options) {
+    _classCallCheck(this, TooltipProgressBar);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.updateDataAttr();
+    _this.on(player, 'timeupdate', _this.updateDataAttr);
+    player.ready(Fn.bind(_this, _this.updateDataAttr));
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  TooltipProgressBar.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-tooltip-progress-bar vjs-slider-bar',
+      innerHTML: '<div class="vjs-time-tooltip"></div>\n        <span class="vjs-control-text"><span>' + this.localize('Progress') + '</span>: 0%</span>'
+    });
+
+    this.tooltip = el.querySelector('.vjs-time-tooltip');
+
+    return el;
+  };
+
+  TooltipProgressBar.prototype.updateDataAttr = function updateDataAttr() {
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+    var formattedTime = (0, _formatTime2['default'])(time, this.player_.duration());
+
+    this.el_.setAttribute('data-current-time', formattedTime);
+    this.tooltip.innerHTML = formattedTime;
+  };
+
+  return TooltipProgressBar;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TooltipProgressBar', TooltipProgressBar);
+exports['default'] = TooltipProgressBar;
+
+},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],21:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _spacer = _dereq_('./spacer.js');
+
+var _spacer2 = _interopRequireDefault(_spacer);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file custom-control-spacer.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Spacer specifically meant to be used as an insertion point for new plugins, etc.
+ *
+ * @extends Spacer
+ * @class CustomControlSpacer
+ */
+var CustomControlSpacer = function (_Spacer) {
+  _inherits(CustomControlSpacer, _Spacer);
+
+  function CustomControlSpacer() {
+    _classCallCheck(this, CustomControlSpacer);
+
+    return _possibleConstructorReturn(this, _Spacer.apply(this, arguments));
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+  CustomControlSpacer.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-custom-control-spacer ' + _Spacer.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  CustomControlSpacer.prototype.createEl = function createEl() {
+    var el = _Spacer.prototype.createEl.call(this, {
+      className: this.buildCSSClass()
+    });
+
+    // No-flex/table-cell mode requires there be some content
+    // in the cell to fill the remaining space of the table.
+    el.innerHTML = '&nbsp;';
+    return el;
+  };
+
+  return CustomControlSpacer;
+}(_spacer2['default']);
+
+_component2['default'].registerComponent('CustomControlSpacer', CustomControlSpacer);
+exports['default'] = CustomControlSpacer;
+
+},{"../../component.js":5,"./spacer.js":22}],22:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file spacer.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Just an empty spacer element that can be used as an append point for plugins, etc.
+ * Also can be used to create space between elements when necessary.
+ *
+ * @extends Component
+ * @class Spacer
+ */
+var Spacer = function (_Component) {
+  _inherits(Spacer, _Component);
+
+  function Spacer() {
+    _classCallCheck(this, Spacer);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+  Spacer.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-spacer ' + _Component.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Spacer.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass()
+    });
+  };
+
+  return Spacer;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Spacer', Spacer);
+
+exports['default'] = Spacer;
+
+},{"../../component.js":5}],23:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file caption-settings-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The menu item for caption track settings menu
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends TextTrackMenuItem
+ * @class CaptionSettingsMenuItem
+ */
+var CaptionSettingsMenuItem = function (_TextTrackMenuItem) {
+  _inherits(CaptionSettingsMenuItem, _TextTrackMenuItem);
+
+  function CaptionSettingsMenuItem(player, options) {
+    _classCallCheck(this, CaptionSettingsMenuItem);
+
+    options.track = {
+      player: player,
+      kind: options.kind,
+      label: options.kind + ' settings',
+      selectable: false,
+      'default': false,
+      mode: 'disabled'
+    };
+
+    // CaptionSettingsMenuItem has no concept of 'selected'
+    options.selectable = false;
+
+    var _this = _possibleConstructorReturn(this, _TextTrackMenuItem.call(this, player, options));
+
+    _this.addClass('vjs-texttrack-settings');
+    _this.controlText(', opens ' + options.kind + ' settings dialog');
+    return _this;
+  }
+
+  /**
+   * Handle click on menu item
+   *
+   * @method handleClick
+   */
+
+
+  CaptionSettingsMenuItem.prototype.handleClick = function handleClick() {
+    this.player().getChild('textTrackSettings').show();
+    this.player().getChild('textTrackSettings').el_.focus();
+  };
+
+  return CaptionSettingsMenuItem;
+}(_textTrackMenuItem2['default']);
+
+_component2['default'].registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);
+exports['default'] = CaptionSettingsMenuItem;
+
+},{"../../component.js":5,"./text-track-menu-item.js":31}],24:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _captionSettingsMenuItem = _dereq_('./caption-settings-menu-item.js');
+
+var _captionSettingsMenuItem2 = _interopRequireDefault(_captionSettingsMenuItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file captions-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting captions
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class CaptionsButton
+ */
+var CaptionsButton = function (_TextTrackButton) {
+  _inherits(CaptionsButton, _TextTrackButton);
+
+  function CaptionsButton(player, options, ready) {
+    _classCallCheck(this, CaptionsButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Captions Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  CaptionsButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-captions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Update caption menu items
+   *
+   * @method update
+   */
+
+
+  CaptionsButton.prototype.update = function update() {
+    var threshold = 2;
+
+    _TextTrackButton.prototype.update.call(this);
+
+    // if native, then threshold is 1 because no settings button
+    if (this.player().tech_ && this.player().tech_.featuresNativeTextTracks) {
+      threshold = 1;
+    }
+
+    if (this.items && this.items.length > threshold) {
+      this.show();
+    } else {
+      this.hide();
+    }
+  };
+
+  /**
+   * Create caption menu items
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  CaptionsButton.prototype.createItems = function createItems() {
+    var items = [];
+
+    if (!(this.player().tech_ && this.player().tech_.featuresNativeTextTracks)) {
+      items.push(new _captionSettingsMenuItem2['default'](this.player_, { kind: this.kind_ }));
+    }
+
+    return _TextTrackButton.prototype.createItems.call(this, items);
+  };
+
+  return CaptionsButton;
+}(_textTrackButton2['default']);
+
+CaptionsButton.prototype.kind_ = 'captions';
+CaptionsButton.prototype.controlText_ = 'Captions';
+
+_component2['default'].registerComponent('CaptionsButton', CaptionsButton);
+exports['default'] = CaptionsButton;
+
+},{"../../component.js":5,"./caption-settings-menu-item.js":23,"./text-track-button.js":30}],25:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _chaptersTrackMenuItem = _dereq_('./chapters-track-menu-item.js');
+
+var _chaptersTrackMenuItem2 = _interopRequireDefault(_chaptersTrackMenuItem);
+
+var _menu = _dereq_('../../menu/menu.js');
+
+var _menu2 = _interopRequireDefault(_menu);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _toTitleCase = _dereq_('../../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file chapters-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting chapters
+ * Chapters act much differently than other text tracks
+ * Cues are navigation vs. other tracks of alternative languages
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class ChaptersButton
+ */
+var ChaptersButton = function (_TextTrackButton) {
+  _inherits(ChaptersButton, _TextTrackButton);
+
+  function ChaptersButton(player, options, ready) {
+    _classCallCheck(this, ChaptersButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Chapters Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  ChaptersButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-chapters-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Create a menu item for each text track
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  ChaptersButton.prototype.createItems = function createItems() {
+    var items = [];
+    var tracks = this.player_.textTracks();
+
+    if (!tracks) {
+      return items;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      if (track.kind === this.kind_) {
+        items.push(new _textTrackMenuItem2['default'](this.player_, { track: track }));
+      }
+    }
+
+    return items;
+  };
+
+  /**
+   * Create menu from chapter buttons
+   *
+   * @return {Menu} Menu of chapter buttons
+   * @method createMenu
+   */
+
+
+  ChaptersButton.prototype.createMenu = function createMenu() {
+    var _this2 = this;
+
+    var tracks = this.player_.textTracks() || [];
+    var chaptersTrack = void 0;
+    var items = this.items || [];
+
+    for (var i = tracks.length - 1; i >= 0; i--) {
+
+      // We will always choose the last track as our chaptersTrack
+      var track = tracks[i];
+
+      if (track.kind === this.kind_) {
+        chaptersTrack = track;
+
+        break;
+      }
+    }
+
+    var menu = this.menu;
+
+    if (menu === undefined) {
+      menu = new _menu2['default'](this.player_);
+
+      var title = Dom.createEl('li', {
+        className: 'vjs-menu-title',
+        innerHTML: (0, _toTitleCase2['default'])(this.kind_),
+        tabIndex: -1
+      });
+
+      menu.children_.unshift(title);
+      Dom.insertElFirst(title, menu.contentEl());
+    } else {
+      // We will empty out the menu children each time because we want a
+      // fresh new menu child list each time
+      items.forEach(function (item) {
+        return menu.removeChild(item);
+      });
+      // Empty out the ChaptersButton menu items because we no longer need them
+      items = [];
+    }
+
+    if (chaptersTrack && (chaptersTrack.cues === null || chaptersTrack.cues === undefined)) {
+      chaptersTrack.mode = 'hidden';
+
+      var remoteTextTrackEl = this.player_.remoteTextTrackEls().getTrackElementByTrack_(chaptersTrack);
+
+      if (remoteTextTrackEl) {
+        remoteTextTrackEl.addEventListener('load', function (event) {
+          return _this2.update();
+        });
+      }
+    }
+
+    if (chaptersTrack && chaptersTrack.cues && chaptersTrack.cues.length > 0) {
+      var cues = chaptersTrack.cues;
+
+      for (var _i = 0, l = cues.length; _i < l; _i++) {
+        var cue = cues[_i];
+
+        var mi = new _chaptersTrackMenuItem2['default'](this.player_, {
+          cue: cue,
+          track: chaptersTrack
+        });
+
+        items.push(mi);
+
+        menu.addChild(mi);
+      }
+    }
+
+    if (items.length > 0) {
+      this.show();
+    }
+    // Assigning the value of items back to this.items for next iteration
+    this.items = items;
+    return menu;
+  };
+
+  return ChaptersButton;
+}(_textTrackButton2['default']);
+
+ChaptersButton.prototype.kind_ = 'chapters';
+ChaptersButton.prototype.controlText_ = 'Chapters';
+
+_component2['default'].registerComponent('ChaptersButton', ChaptersButton);
+exports['default'] = ChaptersButton;
+
+},{"../../component.js":5,"../../menu/menu.js":49,"../../utils/dom.js":80,"../../utils/to-title-case.js":89,"./chapters-track-menu-item.js":26,"./text-track-button.js":30,"./text-track-menu-item.js":31}],26:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file chapters-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The chapter track menu item
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class ChaptersTrackMenuItem
+ */
+var ChaptersTrackMenuItem = function (_MenuItem) {
+  _inherits(ChaptersTrackMenuItem, _MenuItem);
+
+  function ChaptersTrackMenuItem(player, options) {
+    _classCallCheck(this, ChaptersTrackMenuItem);
+
+    var track = options.track;
+    var cue = options.cue;
+    var currentTime = player.currentTime();
+
+    // Modify options for parent MenuItem class's init.
+    options.label = cue.text;
+    options.selected = cue.startTime <= currentTime && currentTime < cue.endTime;
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.track = track;
+    _this.cue = cue;
+    track.addEventListener('cuechange', Fn.bind(_this, _this.update));
+    return _this;
+  }
+
+  /**
+   * Handle click on menu item
+   *
+   * @method handleClick
+   */
+
+
+  ChaptersTrackMenuItem.prototype.handleClick = function handleClick() {
+    _MenuItem.prototype.handleClick.call(this);
+    this.player_.currentTime(this.cue.startTime);
+    this.update(this.cue.startTime);
+  };
+
+  /**
+   * Update chapter menu item
+   *
+   * @method update
+   */
+
+
+  ChaptersTrackMenuItem.prototype.update = function update() {
+    var cue = this.cue;
+    var currentTime = this.player_.currentTime();
+
+    // vjs.log(currentTime, cue.startTime);
+    this.selected(cue.startTime <= currentTime && currentTime < cue.endTime);
+  };
+
+  return ChaptersTrackMenuItem;
+}(_menuItem2['default']);
+
+_component2['default'].registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);
+exports['default'] = ChaptersTrackMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],27:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file descriptions-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting descriptions
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class DescriptionsButton
+ */
+var DescriptionsButton = function (_TextTrackButton) {
+  _inherits(DescriptionsButton, _TextTrackButton);
+
+  function DescriptionsButton(player, options, ready) {
+    _classCallCheck(this, DescriptionsButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Descriptions Menu');
+
+    var tracks = player.textTracks();
+
+    if (tracks) {
+      (function () {
+        var changeHandler = Fn.bind(_this, _this.handleTracksChange);
+
+        tracks.addEventListener('change', changeHandler);
+        _this.on('dispose', function () {
+          tracks.removeEventListener('change', changeHandler);
+        });
+      })();
+    }
+    return _this;
+  }
+
+  /**
+   * Handle text track change
+   *
+   * @method handleTracksChange
+   */
+
+
+  DescriptionsButton.prototype.handleTracksChange = function handleTracksChange(event) {
+    var tracks = this.player().textTracks();
+    var disabled = false;
+
+    // Check whether a track of a different kind is showing
+    for (var i = 0, l = tracks.length; i < l; i++) {
+      var track = tracks[i];
+
+      if (track.kind !== this.kind_ && track.mode === 'showing') {
+        disabled = true;
+        break;
+      }
+    }
+
+    // If another track is showing, disable this menu button
+    if (disabled) {
+      this.disable();
+    } else {
+      this.enable();
+    }
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  DescriptionsButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-descriptions-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  return DescriptionsButton;
+}(_textTrackButton2['default']);
+
+DescriptionsButton.prototype.kind_ = 'descriptions';
+DescriptionsButton.prototype.controlText_ = 'Descriptions';
+
+_component2['default'].registerComponent('DescriptionsButton', DescriptionsButton);
+exports['default'] = DescriptionsButton;
+
+},{"../../component.js":5,"../../utils/fn.js":82,"./text-track-button.js":30}],28:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file off-text-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A special menu item for turning of a specific type of text track
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends TextTrackMenuItem
+ * @class OffTextTrackMenuItem
+ */
+var OffTextTrackMenuItem = function (_TextTrackMenuItem) {
+  _inherits(OffTextTrackMenuItem, _TextTrackMenuItem);
+
+  function OffTextTrackMenuItem(player, options) {
+    _classCallCheck(this, OffTextTrackMenuItem);
+
+    // Create pseudo track info
+    // Requires options['kind']
+    options.track = {
+      player: player,
+      kind: options.kind,
+      label: options.kind + ' off',
+      'default': false,
+      mode: 'disabled'
+    };
+
+    // MenuItem is selectable
+    options.selectable = true;
+
+    var _this = _possibleConstructorReturn(this, _TextTrackMenuItem.call(this, player, options));
+
+    _this.selected(true);
+    return _this;
+  }
+
+  /**
+   * Handle text track change
+   *
+   * @param {Object} event Event object
+   * @method handleTracksChange
+   */
+
+
+  OffTextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {
+    var tracks = this.player().textTracks();
+    var selected = true;
+
+    for (var i = 0, l = tracks.length; i < l; i++) {
+      var track = tracks[i];
+
+      if (track.kind === this.track.kind && track.mode === 'showing') {
+        selected = false;
+        break;
+      }
+    }
+
+    this.selected(selected);
+  };
+
+  return OffTextTrackMenuItem;
+}(_textTrackMenuItem2['default']);
+
+_component2['default'].registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);
+exports['default'] = OffTextTrackMenuItem;
+
+},{"../../component.js":5,"./text-track-menu-item.js":31}],29:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackButton = _dereq_('./text-track-button.js');
+
+var _textTrackButton2 = _interopRequireDefault(_textTrackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file subtitles-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The button component for toggling and selecting subtitles
+ *
+ * @param {Object} player  Player object
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends TextTrackButton
+ * @class SubtitlesButton
+ */
+var SubtitlesButton = function (_TextTrackButton) {
+  _inherits(SubtitlesButton, _TextTrackButton);
+
+  function SubtitlesButton(player, options, ready) {
+    _classCallCheck(this, SubtitlesButton);
+
+    var _this = _possibleConstructorReturn(this, _TextTrackButton.call(this, player, options, ready));
+
+    _this.el_.setAttribute('aria-label', 'Subtitles Menu');
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  SubtitlesButton.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-subtitles-button ' + _TextTrackButton.prototype.buildCSSClass.call(this);
+  };
+
+  return SubtitlesButton;
+}(_textTrackButton2['default']);
+
+SubtitlesButton.prototype.kind_ = 'subtitles';
+SubtitlesButton.prototype.controlText_ = 'Subtitles';
+
+_component2['default'].registerComponent('SubtitlesButton', SubtitlesButton);
+exports['default'] = SubtitlesButton;
+
+},{"../../component.js":5,"./text-track-button.js":30}],30:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackButton = _dereq_('../track-button.js');
+
+var _trackButton2 = _interopRequireDefault(_trackButton);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _textTrackMenuItem = _dereq_('./text-track-menu-item.js');
+
+var _textTrackMenuItem2 = _interopRequireDefault(_textTrackMenuItem);
+
+var _offTextTrackMenuItem = _dereq_('./off-text-track-menu-item.js');
+
+var _offTextTrackMenuItem2 = _interopRequireDefault(_offTextTrackMenuItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base class for buttons that toggle specific text track types (e.g. subtitles)
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuButton
+ * @class TextTrackButton
+ */
+var TextTrackButton = function (_TrackButton) {
+  _inherits(TextTrackButton, _TrackButton);
+
+  function TextTrackButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, TextTrackButton);
+
+    options.tracks = player.textTracks();
+
+    return _possibleConstructorReturn(this, _TrackButton.call(this, player, options));
+  }
+
+  /**
+   * Create a menu item for each text track
+   *
+   * @return {Array} Array of menu items
+   * @method createItems
+   */
+
+
+  TextTrackButton.prototype.createItems = function createItems() {
+    var items = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    // Add an OFF menu item to turn all tracks off
+    items.push(new _offTextTrackMenuItem2['default'](this.player_, { kind: this.kind_ }));
+
+    var tracks = this.player_.textTracks();
+
+    if (!tracks) {
+      return items;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      // only add tracks that are of the appropriate kind and have a label
+      if (track.kind === this.kind_) {
+        items.push(new _textTrackMenuItem2['default'](this.player_, {
+          track: track,
+          // MenuItem is selectable
+          selectable: true
+        }));
+      }
+    }
+
+    return items;
+  };
+
+  return TextTrackButton;
+}(_trackButton2['default']);
+
+_component2['default'].registerComponent('TextTrackButton', TextTrackButton);
+exports['default'] = TextTrackButton;
+
+},{"../../component.js":5,"../track-button.js":36,"./off-text-track-menu-item.js":28,"./text-track-menu-item.js":31}],31:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _menuItem = _dereq_('../../menu/menu-item.js');
+
+var _menuItem2 = _interopRequireDefault(_menuItem);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The specific menu item type for selecting a language within a text track kind
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuItem
+ * @class TextTrackMenuItem
+ */
+var TextTrackMenuItem = function (_MenuItem) {
+  _inherits(TextTrackMenuItem, _MenuItem);
+
+  function TextTrackMenuItem(player, options) {
+    _classCallCheck(this, TextTrackMenuItem);
+
+    var track = options.track;
+    var tracks = player.textTracks();
+
+    // Modify options for parent MenuItem class's init.
+    options.label = track.label || track.language || 'Unknown';
+    options.selected = track['default'] || track.mode === 'showing';
+
+    var _this = _possibleConstructorReturn(this, _MenuItem.call(this, player, options));
+
+    _this.track = track;
+
+    if (tracks) {
+      (function () {
+        var changeHandler = Fn.bind(_this, _this.handleTracksChange);
+
+        tracks.addEventListener('change', changeHandler);
+        _this.on('dispose', function () {
+          tracks.removeEventListener('change', changeHandler);
+        });
+      })();
+    }
+
+    // iOS7 doesn't dispatch change events to TextTrackLists when an
+    // associated track's mode changes. Without something like
+    // Object.observe() (also not present on iOS7), it's not
+    // possible to detect changes to the mode attribute and polyfill
+    // the change event. As a poor substitute, we manually dispatch
+    // change events whenever the controls modify the mode.
+    if (tracks && tracks.onchange === undefined) {
+      (function () {
+        var event = void 0;
+
+        _this.on(['tap', 'click'], function () {
+          if (_typeof(_window2['default'].Event) !== 'object') {
+            // Android 2.3 throws an Illegal Constructor error for window.Event
+            try {
+              event = new _window2['default'].Event('change');
+            } catch (err) {
+              // continue regardless of error
+            }
+          }
+
+          if (!event) {
+            event = _document2['default'].createEvent('Event');
+            event.initEvent('change', true, true);
+          }
+
+          tracks.dispatchEvent(event);
+        });
+      })();
+    }
+    return _this;
+  }
+
+  /**
+   * Handle click on text track
+   *
+   * @method handleClick
+   */
+
+
+  TextTrackMenuItem.prototype.handleClick = function handleClick(event) {
+    var kind = this.track.kind;
+    var tracks = this.player_.textTracks();
+
+    _MenuItem.prototype.handleClick.call(this, event);
+
+    if (!tracks) {
+      return;
+    }
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      if (track.kind !== kind) {
+        continue;
+      }
+
+      if (track === this.track) {
+        track.mode = 'showing';
+      } else {
+        track.mode = 'disabled';
+      }
+    }
+  };
+
+  /**
+   * Handle text track change
+   *
+   * @method handleTracksChange
+   */
+
+
+  TextTrackMenuItem.prototype.handleTracksChange = function handleTracksChange(event) {
+    this.selected(this.track.mode === 'showing');
+  };
+
+  return TextTrackMenuItem;
+}(_menuItem2['default']);
+
+_component2['default'].registerComponent('TextTrackMenuItem', TextTrackMenuItem);
+exports['default'] = TextTrackMenuItem;
+
+},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82,"global/document":92,"global/window":93}],32:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file current-time-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the current time
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class CurrentTimeDisplay
+ */
+var CurrentTimeDisplay = function (_Component) {
+  _inherits(CurrentTimeDisplay, _Component);
+
+  function CurrentTimeDisplay(player, options) {
+    _classCallCheck(this, CurrentTimeDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'timeupdate', _this.updateContent);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  CurrentTimeDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-current-time vjs-time-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-current-time-display',
+      // label the current time for screen reader users
+      innerHTML: '<span class="vjs-control-text">Current Time </span>' + '0:00'
+    }, {
+      // tell screen readers not to automatically read the time as it changes
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  /**
+   * Update current time display
+   *
+   * @method updateContent
+   */
+
+
+  CurrentTimeDisplay.prototype.updateContent = function updateContent() {
+    // Allows for smooth scrubbing, when player can't keep up.
+    var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
+    var localizedText = this.localize('Current Time');
+    var formattedTime = (0, _formatTime2['default'])(time, this.player_.duration());
+
+    if (formattedTime !== this.formattedTime_) {
+      this.formattedTime_ = formattedTime;
+      this.contentEl_.innerHTML = '<span class="vjs-control-text">' + localizedText + '</span> ' + formattedTime;
+    }
+  };
+
+  return CurrentTimeDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);
+exports['default'] = CurrentTimeDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],33:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file duration-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the duration
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class DurationDisplay
+ */
+var DurationDisplay = function (_Component) {
+  _inherits(DurationDisplay, _Component);
+
+  function DurationDisplay(player, options) {
+    _classCallCheck(this, DurationDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'durationchange', _this.updateContent);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  DurationDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-duration vjs-time-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-duration-display',
+      // label the duration time for screen reader users
+      innerHTML: '<span class="vjs-control-text">' + this.localize('Duration Time') + '</span> 0:00'
+    }, {
+      // tell screen readers not to automatically read the time as it changes
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  /**
+   * Update duration time display
+   *
+   * @method updateContent
+   */
+
+
+  DurationDisplay.prototype.updateContent = function updateContent() {
+    var duration = this.player_.duration();
+
+    if (duration && this.duration_ !== duration) {
+      this.duration_ = duration;
+      var localizedText = this.localize('Duration Time');
+      var formattedTime = (0, _formatTime2['default'])(duration);
+
+      // label the duration time for screen reader users
+      this.contentEl_.innerHTML = '<span class="vjs-control-text">' + localizedText + '</span> ' + formattedTime;
+    }
+  };
+
+  return DurationDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('DurationDisplay', DurationDisplay);
+exports['default'] = DurationDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],34:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _formatTime = _dereq_('../../utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file remaining-time-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Displays the time left in the video
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class RemainingTimeDisplay
+ */
+var RemainingTimeDisplay = function (_Component) {
+  _inherits(RemainingTimeDisplay, _Component);
+
+  function RemainingTimeDisplay(player, options) {
+    _classCallCheck(this, RemainingTimeDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.on(player, 'timeupdate', _this.updateContent);
+    _this.on(player, 'durationchange', _this.updateContent);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  RemainingTimeDisplay.prototype.createEl = function createEl() {
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-remaining-time vjs-time-control vjs-control'
+    });
+
+    this.contentEl_ = Dom.createEl('div', {
+      className: 'vjs-remaining-time-display',
+      // label the remaining time for screen reader users
+      innerHTML: '<span class="vjs-control-text">' + this.localize('Remaining Time') + '</span> -0:00'
+    }, {
+      // tell screen readers not to automatically read the time as it changes
+      'aria-live': 'off'
+    });
+
+    el.appendChild(this.contentEl_);
+    return el;
+  };
+
+  /**
+   * Update remaining time display
+   *
+   * @method updateContent
+   */
+
+
+  RemainingTimeDisplay.prototype.updateContent = function updateContent() {
+    if (this.player_.duration()) {
+      var localizedText = this.localize('Remaining Time');
+      var formattedTime = (0, _formatTime2['default'])(this.player_.remainingTime());
+
+      if (formattedTime !== this.formattedTime_) {
+        this.formattedTime_ = formattedTime;
+        this.contentEl_.innerHTML = '<span class="vjs-control-text">' + localizedText + '</span> -' + formattedTime;
+      }
+    }
+
+    // Allows for smooth scrubbing, when player can't keep up.
+    // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();
+    // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());
+  };
+
+  return RemainingTimeDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);
+exports['default'] = RemainingTimeDisplay;
+
+},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],35:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file time-divider.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The separator between the current time and duration.
+ * Can be hidden if it's not needed in the design.
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class TimeDivider
+ */
+var TimeDivider = function (_Component) {
+  _inherits(TimeDivider, _Component);
+
+  function TimeDivider() {
+    _classCallCheck(this, TimeDivider);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  TimeDivider.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-time-control vjs-time-divider',
+      innerHTML: '<div><span>/</span></div>'
+    });
+  };
+
+  return TimeDivider;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TimeDivider', TimeDivider);
+exports['default'] = TimeDivider;
+
+},{"../../component.js":5}],36:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _menuButton = _dereq_('../menu/menu-button.js');
+
+var _menuButton2 = _interopRequireDefault(_menuButton);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file track-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base class for buttons that toggle specific text track types (e.g. subtitles)
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends MenuButton
+ * @class TrackButton
+ */
+var TrackButton = function (_MenuButton) {
+  _inherits(TrackButton, _MenuButton);
+
+  function TrackButton(player, options) {
+    _classCallCheck(this, TrackButton);
+
+    var tracks = options.tracks;
+
+    var _this = _possibleConstructorReturn(this, _MenuButton.call(this, player, options));
+
+    if (_this.items.length <= 1) {
+      _this.hide();
+    }
+
+    if (!tracks) {
+      return _possibleConstructorReturn(_this);
+    }
+
+    var updateHandler = Fn.bind(_this, _this.update);
+
+    tracks.addEventListener('removetrack', updateHandler);
+    tracks.addEventListener('addtrack', updateHandler);
+
+    _this.player_.on('dispose', function () {
+      tracks.removeEventListener('removetrack', updateHandler);
+      tracks.removeEventListener('addtrack', updateHandler);
+    });
+    return _this;
+  }
+
+  return TrackButton;
+}(_menuButton2['default']);
+
+_component2['default'].registerComponent('TrackButton', TrackButton);
+exports['default'] = TrackButton;
+
+},{"../component.js":5,"../menu/menu-button.js":47,"../utils/fn.js":82}],37:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _slider = _dereq_('../../slider/slider.js');
+
+var _slider2 = _interopRequireDefault(_slider);
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+_dereq_('./volume-level.js');
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-bar.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+// Required children
+
+
+/**
+ * The bar that contains the volume level and can be clicked on to adjust the level
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Slider
+ * @class VolumeBar
+ */
+var VolumeBar = function (_Slider) {
+  _inherits(VolumeBar, _Slider);
+
+  function VolumeBar(player, options) {
+    _classCallCheck(this, VolumeBar);
+
+    var _this = _possibleConstructorReturn(this, _Slider.call(this, player, options));
+
+    _this.on(player, 'volumechange', _this.updateARIAAttributes);
+    player.ready(Fn.bind(_this, _this.updateARIAAttributes));
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  VolumeBar.prototype.createEl = function createEl() {
+    return _Slider.prototype.createEl.call(this, 'div', {
+      className: 'vjs-volume-bar vjs-slider-bar'
+    }, {
+      'aria-label': 'volume level'
+    });
+  };
+
+  /**
+   * Handle mouse move on volume bar
+   *
+   * @method handleMouseMove
+   */
+
+
+  VolumeBar.prototype.handleMouseMove = function handleMouseMove(event) {
+    this.checkMuted();
+    this.player_.volume(this.calculateDistance(event));
+  };
+
+  VolumeBar.prototype.checkMuted = function checkMuted() {
+    if (this.player_.muted()) {
+      this.player_.muted(false);
+    }
+  };
+
+  /**
+   * Get percent of volume level
+   *
+   * @retun {Number} Volume level percent
+   * @method getPercent
+   */
+
+
+  VolumeBar.prototype.getPercent = function getPercent() {
+    if (this.player_.muted()) {
+      return 0;
+    }
+    return this.player_.volume();
+  };
+
+  /**
+   * Increase volume level for keyboard users
+   *
+   * @method stepForward
+   */
+
+
+  VolumeBar.prototype.stepForward = function stepForward() {
+    this.checkMuted();
+    this.player_.volume(this.player_.volume() + 0.1);
+  };
+
+  /**
+   * Decrease volume level for keyboard users
+   *
+   * @method stepBack
+   */
+
+
+  VolumeBar.prototype.stepBack = function stepBack() {
+    this.checkMuted();
+    this.player_.volume(this.player_.volume() - 0.1);
+  };
+
+  /**
+   * Update ARIA accessibility attributes
+   *
+   * @method updateARIAAttributes
+   */
+
+
+  VolumeBar.prototype.updateARIAAttributes = function updateARIAAttributes() {
+    // Current value of volume bar as a percentage
+    var volume = (this.player_.volume() * 100).toFixed(2);
+
+    this.el_.setAttribute('aria-valuenow', volume);
+    this.el_.setAttribute('aria-valuetext', volume + '%');
+  };
+
+  return VolumeBar;
+}(_slider2['default']);
+
+VolumeBar.prototype.options_ = {
+  children: ['volumeLevel'],
+  barName: 'volumeLevel'
+};
+
+VolumeBar.prototype.playerEvent = 'volumechange';
+
+_component2['default'].registerComponent('VolumeBar', VolumeBar);
+exports['default'] = VolumeBar;
+
+},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"./volume-level.js":39}],38:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+_dereq_('./volume-bar.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-control.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+// Required children
+
+
+/**
+ * The component for controlling the volume level
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class VolumeControl
+ */
+var VolumeControl = function (_Component) {
+  _inherits(VolumeControl, _Component);
+
+  function VolumeControl(player, options) {
+    _classCallCheck(this, VolumeControl);
+
+    // hide volume controls when they're not supported by the current tech
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    if (player.tech_ && player.tech_.featuresVolumeControl === false) {
+      _this.addClass('vjs-hidden');
+    }
+    _this.on(player, 'loadstart', function () {
+      if (player.tech_.featuresVolumeControl === false) {
+        this.addClass('vjs-hidden');
+      } else {
+        this.removeClass('vjs-hidden');
+      }
+    });
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  VolumeControl.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-volume-control vjs-control'
+    });
+  };
+
+  return VolumeControl;
+}(_component2['default']);
+
+VolumeControl.prototype.options_ = {
+  children: ['volumeBar']
+};
+
+_component2['default'].registerComponent('VolumeControl', VolumeControl);
+exports['default'] = VolumeControl;
+
+},{"../../component.js":5,"./volume-bar.js":37}],39:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-level.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Shows volume level
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class VolumeLevel
+ */
+var VolumeLevel = function (_Component) {
+  _inherits(VolumeLevel, _Component);
+
+  function VolumeLevel() {
+    _classCallCheck(this, VolumeLevel);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+  VolumeLevel.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-volume-level',
+      innerHTML: '<span class="vjs-control-text"></span>'
+    });
+  };
+
+  return VolumeLevel;
+}(_component2['default']);
+
+_component2['default'].registerComponent('VolumeLevel', VolumeLevel);
+exports['default'] = VolumeLevel;
+
+},{"../../component.js":5}],40:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _popup = _dereq_('../popup/popup.js');
+
+var _popup2 = _interopRequireDefault(_popup);
+
+var _popupButton = _dereq_('../popup/popup-button.js');
+
+var _popupButton2 = _interopRequireDefault(_popupButton);
+
+var _muteToggle = _dereq_('./mute-toggle.js');
+
+var _muteToggle2 = _interopRequireDefault(_muteToggle);
+
+var _volumeBar = _dereq_('./volume-control/volume-bar.js');
+
+var _volumeBar2 = _interopRequireDefault(_volumeBar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file volume-menu-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Button for volume popup
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends PopupButton
+ * @class VolumeMenuButton
+ */
+var VolumeMenuButton = function (_PopupButton) {
+  _inherits(VolumeMenuButton, _PopupButton);
+
+  function VolumeMenuButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, VolumeMenuButton);
+
+    // Default to inline
+    if (options.inline === undefined) {
+      options.inline = true;
+    }
+
+    // If the vertical option isn't passed at all, default to true.
+    if (options.vertical === undefined) {
+      // If an inline volumeMenuButton is used, we should default to using
+      // a horizontal slider for obvious reasons.
+      if (options.inline) {
+        options.vertical = false;
+      } else {
+        options.vertical = true;
+      }
+    }
+
+    // The vertical option needs to be set on the volumeBar as well,
+    // since that will need to be passed along to the VolumeBar constructor
+    options.volumeBar = options.volumeBar || {};
+    options.volumeBar.vertical = !!options.vertical;
+
+    // Same listeners as MuteToggle
+    var _this = _possibleConstructorReturn(this, _PopupButton.call(this, player, options));
+
+    _this.on(player, 'volumechange', _this.volumeUpdate);
+    _this.on(player, 'loadstart', _this.volumeUpdate);
+
+    // hide mute toggle if the current tech doesn't support volume control
+    function updateVisibility() {
+      if (player.tech_ && player.tech_.featuresVolumeControl === false) {
+        this.addClass('vjs-hidden');
+      } else {
+        this.removeClass('vjs-hidden');
+      }
+    }
+
+    updateVisibility.call(_this);
+    _this.on(player, 'loadstart', updateVisibility);
+
+    _this.on(_this.volumeBar, ['slideractive', 'focus'], function () {
+      this.addClass('vjs-slider-active');
+    });
+
+    _this.on(_this.volumeBar, ['sliderinactive', 'blur'], function () {
+      this.removeClass('vjs-slider-active');
+    });
+
+    _this.on(_this.volumeBar, ['focus'], function () {
+      this.addClass('vjs-lock-showing');
+    });
+
+    _this.on(_this.volumeBar, ['blur'], function () {
+      this.removeClass('vjs-lock-showing');
+    });
+    return _this;
+  }
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  VolumeMenuButton.prototype.buildCSSClass = function buildCSSClass() {
+    var orientationClass = '';
+
+    if (this.options_.vertical) {
+      orientationClass = 'vjs-volume-menu-button-vertical';
+    } else {
+      orientationClass = 'vjs-volume-menu-button-horizontal';
+    }
+
+    return 'vjs-volume-menu-button ' + _PopupButton.prototype.buildCSSClass.call(this) + ' ' + orientationClass;
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {Popup} The volume popup button
+   * @method createPopup
+   */
+
+
+  VolumeMenuButton.prototype.createPopup = function createPopup() {
+    var popup = new _popup2['default'](this.player_, {
+      contentElType: 'div'
+    });
+
+    var vb = new _volumeBar2['default'](this.player_, this.options_.volumeBar);
+
+    popup.addChild(vb);
+
+    this.menuContent = popup;
+    this.volumeBar = vb;
+
+    this.attachVolumeBarEvents();
+
+    return popup;
+  };
+
+  /**
+   * Handle click on volume popup and calls super
+   *
+   * @method handleClick
+   */
+
+
+  VolumeMenuButton.prototype.handleClick = function handleClick() {
+    _muteToggle2['default'].prototype.handleClick.call(this);
+    _PopupButton.prototype.handleClick.call(this);
+  };
+
+  VolumeMenuButton.prototype.attachVolumeBarEvents = function attachVolumeBarEvents() {
+    this.menuContent.on(['mousedown', 'touchdown'], Fn.bind(this, this.handleMouseDown));
+  };
+
+  VolumeMenuButton.prototype.handleMouseDown = function handleMouseDown(event) {
+    this.on(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));
+    this.on(this.el_.ownerDocument, ['mouseup', 'touchend'], this.handleMouseUp);
+  };
+
+  VolumeMenuButton.prototype.handleMouseUp = function handleMouseUp(event) {
+    this.off(['mousemove', 'touchmove'], Fn.bind(this.volumeBar, this.volumeBar.handleMouseMove));
+  };
+
+  return VolumeMenuButton;
+}(_popupButton2['default']);
+
+VolumeMenuButton.prototype.volumeUpdate = _muteToggle2['default'].prototype.update;
+VolumeMenuButton.prototype.controlText_ = 'Mute';
+
+_component2['default'].registerComponent('VolumeMenuButton', VolumeMenuButton);
+exports['default'] = VolumeMenuButton;
+
+},{"../component.js":5,"../popup/popup-button.js":53,"../popup/popup.js":54,"../utils/fn.js":82,"./mute-toggle.js":11,"./volume-control/volume-bar.js":37}],41:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _modalDialog = _dereq_('./modal-dialog');
+
+var _modalDialog2 = _interopRequireDefault(_modalDialog);
+
+var _mergeOptions = _dereq_('./utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file error-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Display that an error has occurred making the video unplayable.
+ *
+ * @extends ModalDialog
+ * @class ErrorDisplay
+ */
+var ErrorDisplay = function (_ModalDialog) {
+  _inherits(ErrorDisplay, _ModalDialog);
+
+  /**
+   * Constructor for error display modal.
+   *
+   * @param  {Player} player
+   * @param  {Object} [options]
+   */
+  function ErrorDisplay(player, options) {
+    _classCallCheck(this, ErrorDisplay);
+
+    var _this = _possibleConstructorReturn(this, _ModalDialog.call(this, player, options));
+
+    _this.on(player, 'error', _this.open);
+    return _this;
+  }
+
+  /**
+   * Include the old class for backward-compatibility.
+   *
+   * This can be removed in 6.0.
+   *
+   * @method buildCSSClass
+   * @deprecated
+   * @return {String}
+   */
+
+
+  ErrorDisplay.prototype.buildCSSClass = function buildCSSClass() {
+    return 'vjs-error-display ' + _ModalDialog.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Generates the modal content based on the player error.
+   *
+   * @return {String|Null}
+   */
+
+
+  ErrorDisplay.prototype.content = function content() {
+    var error = this.player().error();
+
+    return error ? this.localize(error.message) : '';
+  };
+
+  return ErrorDisplay;
+}(_modalDialog2['default']);
+
+ErrorDisplay.prototype.options_ = (0, _mergeOptions2['default'])(_modalDialog2['default'].prototype.options_, {
+  fillAlways: true,
+  temporary: false,
+  uncloseable: true
+});
+
+_component2['default'].registerComponent('ErrorDisplay', ErrorDisplay);
+exports['default'] = ErrorDisplay;
+
+},{"./component":5,"./modal-dialog":50,"./utils/merge-options":86}],42:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+var EventTarget = function EventTarget() {}; /**
+                                              * @file event-target.js
+                                              */
+
+
+EventTarget.prototype.allowedEvents_ = {};
+
+EventTarget.prototype.on = function (type, fn) {
+  // Remove the addEventListener alias before calling Events.on
+  // so we don't get into an infinite type loop
+  var ael = this.addEventListener;
+
+  this.addEventListener = function () {};
+  Events.on(this, type, fn);
+  this.addEventListener = ael;
+};
+
+EventTarget.prototype.addEventListener = EventTarget.prototype.on;
+
+EventTarget.prototype.off = function (type, fn) {
+  Events.off(this, type, fn);
+};
+
+EventTarget.prototype.removeEventListener = EventTarget.prototype.off;
+
+EventTarget.prototype.one = function (type, fn) {
+  // Remove the addEventListener alias before calling Events.on
+  // so we don't get into an infinite type loop
+  var ael = this.addEventListener;
+
+  this.addEventListener = function () {};
+  Events.one(this, type, fn);
+  this.addEventListener = ael;
+};
+
+EventTarget.prototype.trigger = function (event) {
+  var type = event.type || event;
+
+  if (typeof event === 'string') {
+    event = { type: type };
+  }
+  event = Events.fixEvent(event);
+
+  if (this.allowedEvents_[type] && this['on' + type]) {
+    this['on' + type](event);
+  }
+
+  Events.trigger(this, event);
+};
+
+// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()
+EventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;
+
+exports['default'] = EventTarget;
+
+},{"./utils/events.js":81}],43:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _log = _dereq_('./utils/log');
+
+var _log2 = _interopRequireDefault(_log);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*
+ * @file extend.js
+ *
+ * A combination of node inherits and babel's inherits (after transpile).
+ * Both work the same but node adds `super_` to the subClass
+ * and Bable adds the superClass as __proto__. Both seem useful.
+ */
+var _inherits = function _inherits(subClass, superClass) {
+  if (typeof superClass !== 'function' && superClass !== null) {
+    throw new TypeError('Super expression must either be null or a function, not ' + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass)));
+  }
+
+  subClass.prototype = Object.create(superClass && superClass.prototype, {
+    constructor: {
+      value: subClass,
+      enumerable: false,
+      writable: true,
+      configurable: true
+    }
+  });
+
+  if (superClass) {
+    // node
+    subClass.super_ = superClass;
+  }
+};
+
+/*
+ * Function for subclassing using the same inheritance that
+ * videojs uses internally
+ * ```js
+ * var Button = videojs.getComponent('Button');
+ * ```
+ * ```js
+ * var MyButton = videojs.extend(Button, {
+ *   constructor: function(player, options) {
+ *     Button.call(this, player, options);
+ *   },
+ *   onClick: function() {
+ *     // doSomething
+ *   }
+ * });
+ * ```
+ */
+var extendFn = function extendFn(superClass) {
+  var subClassMethods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+  var subClass = function subClass() {
+    superClass.apply(this, arguments);
+  };
+
+  var methods = {};
+
+  if ((typeof subClassMethods === 'undefined' ? 'undefined' : _typeof(subClassMethods)) === 'object') {
+    if (typeof subClassMethods.init === 'function') {
+      _log2['default'].warn('Constructor logic via init() is deprecated; please use constructor() instead.');
+      subClassMethods.constructor = subClassMethods.init;
+    }
+    if (subClassMethods.constructor !== Object.prototype.constructor) {
+      subClass = subClassMethods.constructor;
+    }
+    methods = subClassMethods;
+  } else if (typeof subClassMethods === 'function') {
+    subClass = subClassMethods;
+  }
+
+  _inherits(subClass, superClass);
+
+  // Extend subObj's prototype with functions and other properties from props
+  for (var name in methods) {
+    if (methods.hasOwnProperty(name)) {
+      subClass.prototype[name] = methods[name];
+    }
+  }
+
+  return subClass;
+};
+
+exports['default'] = extendFn;
+
+},{"./utils/log":85}],44:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*
+ * Store the browser-specific methods for the fullscreen API
+ * @type {Object|undefined}
+ * @private
+ */
+var FullscreenApi = {};
+
+// browser API methods
+// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js
+/**
+ * @file fullscreen-api.js
+ */
+var apiMap = [
+// Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
+['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],
+// WebKit
+['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'],
+// Old WebKit (Safari 5.1)
+['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'],
+// Mozilla
+['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],
+// Microsoft
+['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];
+
+var specApi = apiMap[0];
+var browserApi = void 0;
+
+// determine the supported set of functions
+for (var i = 0; i < apiMap.length; i++) {
+  // check for exitFullscreen function
+  if (apiMap[i][1] in _document2['default']) {
+    browserApi = apiMap[i];
+    break;
+  }
+}
+
+// map the browser API names to the spec API names
+if (browserApi) {
+  for (var _i = 0; _i < browserApi.length; _i++) {
+    FullscreenApi[specApi[_i]] = browserApi[_i];
+  }
+}
+
+exports['default'] = FullscreenApi;
+
+},{"global/document":92}],45:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file loading-spinner.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/* Loading Spinner
+================================================================================ */
+/**
+ * Loading spinner for waiting events
+ *
+ * @extends Component
+ * @class LoadingSpinner
+ */
+var LoadingSpinner = function (_Component) {
+  _inherits(LoadingSpinner, _Component);
+
+  function LoadingSpinner() {
+    _classCallCheck(this, LoadingSpinner);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @method createEl
+   */
+  LoadingSpinner.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-loading-spinner',
+      dir: 'ltr'
+    });
+  };
+
+  return LoadingSpinner;
+}(_component2['default']);
+
+_component2['default'].registerComponent('LoadingSpinner', LoadingSpinner);
+exports['default'] = LoadingSpinner;
+
+},{"./component":5}],46:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file media-error.js
+                                                                                                                                                                                                                                                   */
+
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*
+ * Custom MediaError class which mimics the standard HTML5 MediaError class.
+ *
+ * @param {Number|String|Object|MediaError} value
+ *        This can be of multiple types:
+ *        - Number: should be a standard error code
+ *        - String: an error message (the code will be 0)
+ *        - Object: arbitrary properties
+ *        - MediaError (native): used to populate a video.js MediaError object
+ *        - MediaError (video.js): will return itself if it's already a
+ *          video.js MediaError object.
+ */
+function MediaError(value) {
+
+  // Allow redundant calls to this constructor to avoid having `instanceof`
+  // checks peppered around the code.
+  if (value instanceof MediaError) {
+    return value;
+  }
+
+  if (typeof value === 'number') {
+    this.code = value;
+  } else if (typeof value === 'string') {
+    // default code is zero, so this is a custom error
+    this.message = value;
+  } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
+
+    // We assign the `code` property manually because native MediaError objects
+    // do not expose it as an own/enumerable property of the object.
+    if (typeof value.code === 'number') {
+      this.code = value.code;
+    }
+
+    (0, _object2['default'])(this, value);
+  }
+
+  if (!this.message) {
+    this.message = MediaError.defaultMessages[this.code] || '';
+  }
+}
+
+/*
+ * The error code that refers two one of the defined
+ * MediaError types
+ *
+ * @type {Number}
+ */
+MediaError.prototype.code = 0;
+
+/*
+ * An optional message to be shown with the error.
+ * Message is not part of the HTML5 video spec
+ * but allows for more informative custom errors.
+ *
+ * @type {String}
+ */
+MediaError.prototype.message = '';
+
+/*
+ * An optional status code that can be set by plugins
+ * to allow even more detail about the error.
+ * For example the HLS plugin might provide the specific
+ * HTTP status code that was returned when the error
+ * occurred, then allowing a custom error overlay
+ * to display more information.
+ *
+ * @type {Array}
+ */
+MediaError.prototype.status = null;
+
+// These errors are indexed by the W3C standard numeric value. The order
+// should not be changed!
+MediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED'];
+
+MediaError.defaultMessages = {
+  1: 'You aborted the media playback',
+  2: 'A network error caused the media download to fail part-way.',
+  3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',
+  4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',
+  5: 'The media is encrypted and we do not have the keys to decrypt it.'
+};
+
+// Add types as properties on MediaError
+// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
+for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {
+  MediaError[MediaError.errorTypes[errNum]] = errNum;
+  // values should be accessible on both the class and instance
+  MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;
+}
+
+exports['default'] = MediaError;
+
+},{"object.assign":136}],47:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('../clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _menu = _dereq_('./menu.js');
+
+var _menu2 = _interopRequireDefault(_menu);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _toTitleCase = _dereq_('../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file menu-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A button class with a popup menu
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class MenuButton
+ */
+var MenuButton = function (_ClickableComponent) {
+  _inherits(MenuButton, _ClickableComponent);
+
+  function MenuButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, MenuButton);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.update();
+
+    _this.enabled_ = true;
+
+    _this.el_.setAttribute('aria-haspopup', 'true');
+    _this.el_.setAttribute('role', 'menuitem');
+    _this.on('keydown', _this.handleSubmenuKeyPress);
+    return _this;
+  }
+
+  /**
+   * Update menu
+   *
+   * @method update
+   */
+
+
+  MenuButton.prototype.update = function update() {
+    var menu = this.createMenu();
+
+    if (this.menu) {
+      this.removeChild(this.menu);
+    }
+
+    this.menu = menu;
+    this.addChild(menu);
+
+    /**
+     * Track the state of the menu button
+     *
+     * @type {Boolean}
+     * @private
+     */
+    this.buttonPressed_ = false;
+    this.el_.setAttribute('aria-expanded', 'false');
+
+    if (this.items && this.items.length === 0) {
+      this.hide();
+    } else if (this.items && this.items.length > 1) {
+      this.show();
+    }
+  };
+
+  /**
+   * Create menu
+   *
+   * @return {Menu} The constructed menu
+   * @method createMenu
+   */
+
+
+  MenuButton.prototype.createMenu = function createMenu() {
+    var menu = new _menu2['default'](this.player_);
+
+    // Add a title list item to the top
+    if (this.options_.title) {
+      var title = Dom.createEl('li', {
+        className: 'vjs-menu-title',
+        innerHTML: (0, _toTitleCase2['default'])(this.options_.title),
+        tabIndex: -1
+      });
+
+      menu.children_.unshift(title);
+      Dom.insertElFirst(title, menu.contentEl());
+    }
+
+    this.items = this.createItems();
+
+    if (this.items) {
+      // Add menu items to the menu
+      for (var i = 0; i < this.items.length; i++) {
+        menu.addItem(this.items[i]);
+      }
+    }
+
+    return menu;
+  };
+
+  /**
+   * Create the list of menu items. Specific to each subclass.
+   *
+   * @method createItems
+   */
+
+
+  MenuButton.prototype.createItems = function createItems() {};
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  MenuButton.prototype.createEl = function createEl() {
+    return _ClickableComponent.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass()
+    });
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  MenuButton.prototype.buildCSSClass = function buildCSSClass() {
+    var menuButtonClass = 'vjs-menu-button';
+
+    // If the inline option is passed, we want to use different styles altogether.
+    if (this.options_.inline === true) {
+      menuButtonClass += '-inline';
+    } else {
+      menuButtonClass += '-popup';
+    }
+
+    return 'vjs-menu-button ' + menuButtonClass + ' ' + _ClickableComponent.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * When you click the button it adds focus, which
+   * will show the menu indefinitely.
+   * So we'll remove focus when the mouse leaves the button.
+   * Focus is needed for tab navigation.
+   * Allow sub components to stack CSS class names
+   *
+   * @method handleClick
+   */
+
+
+  MenuButton.prototype.handleClick = function handleClick() {
+    this.one(this.menu.contentEl(), 'mouseleave', Fn.bind(this, function (e) {
+      this.unpressButton();
+      this.el_.blur();
+    }));
+    if (this.buttonPressed_) {
+      this.unpressButton();
+    } else {
+      this.pressButton();
+    }
+  };
+
+  /**
+   * Handle key press on menu
+   *
+   * @param {Object} event Key press event
+   * @method handleKeyPress
+   */
+
+
+  MenuButton.prototype.handleKeyPress = function handleKeyPress(event) {
+
+    // Escape (27) key or Tab (9) key unpress the 'button'
+    if (event.which === 27 || event.which === 9) {
+      if (this.buttonPressed_) {
+        this.unpressButton();
+      }
+      // Don't preventDefault for Tab key - we still want to lose focus
+      if (event.which !== 9) {
+        event.preventDefault();
+      }
+      // Up (38) key or Down (40) key press the 'button'
+    } else if (event.which === 38 || event.which === 40) {
+      if (!this.buttonPressed_) {
+        this.pressButton();
+        event.preventDefault();
+      }
+    } else {
+      _ClickableComponent.prototype.handleKeyPress.call(this, event);
+    }
+  };
+
+  /**
+   * Handle key press on submenu
+   *
+   * @param {Object} event Key press event
+   * @method handleSubmenuKeyPress
+   */
+
+
+  MenuButton.prototype.handleSubmenuKeyPress = function handleSubmenuKeyPress(event) {
+
+    // Escape (27) key or Tab (9) key unpress the 'button'
+    if (event.which === 27 || event.which === 9) {
+      if (this.buttonPressed_) {
+        this.unpressButton();
+      }
+      // Don't preventDefault for Tab key - we still want to lose focus
+      if (event.which !== 9) {
+        event.preventDefault();
+      }
+    }
+  };
+
+  /**
+   * Makes changes based on button pressed
+   *
+   * @method pressButton
+   */
+
+
+  MenuButton.prototype.pressButton = function pressButton() {
+    if (this.enabled_) {
+      this.buttonPressed_ = true;
+      this.menu.lockShowing();
+      this.el_.setAttribute('aria-expanded', 'true');
+      // set the focus into the submenu
+      this.menu.focus();
+    }
+  };
+
+  /**
+   * Makes changes based on button unpressed
+   *
+   * @method unpressButton
+   */
+
+
+  MenuButton.prototype.unpressButton = function unpressButton() {
+    if (this.enabled_) {
+      this.buttonPressed_ = false;
+      this.menu.unlockShowing();
+      this.el_.setAttribute('aria-expanded', 'false');
+      // Set focus back to this menu button
+      this.el_.focus();
+    }
+  };
+
+  /**
+   * Disable the menu button
+   *
+   * @return {Component}
+   * @method disable
+   */
+
+
+  MenuButton.prototype.disable = function disable() {
+    // Unpress, but don't force focus on this button
+    this.buttonPressed_ = false;
+    this.menu.unlockShowing();
+    this.el_.setAttribute('aria-expanded', 'false');
+
+    this.enabled_ = false;
+
+    return _ClickableComponent.prototype.disable.call(this);
+  };
+
+  /**
+   * Enable the menu button
+   *
+   * @return {Component}
+   * @method disable
+   */
+
+
+  MenuButton.prototype.enable = function enable() {
+    this.enabled_ = true;
+
+    return _ClickableComponent.prototype.enable.call(this);
+  };
+
+  return MenuButton;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('MenuButton', MenuButton);
+exports['default'] = MenuButton;
+
+},{"../clickable-component.js":3,"../component.js":5,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/to-title-case.js":89,"./menu.js":49}],48:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('../clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file menu-item.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The component for a menu item. `<li>`
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class MenuItem
+ */
+var MenuItem = function (_ClickableComponent) {
+  _inherits(MenuItem, _ClickableComponent);
+
+  function MenuItem(player, options) {
+    _classCallCheck(this, MenuItem);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.selectable = options.selectable;
+
+    _this.selected(options.selected);
+
+    if (_this.selectable) {
+      // TODO: May need to be either menuitemcheckbox or menuitemradio,
+      //       and may need logical grouping of menu items.
+      _this.el_.setAttribute('role', 'menuitemcheckbox');
+    } else {
+      _this.el_.setAttribute('role', 'menuitem');
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String=} type Desc
+   * @param {Object=} props Desc
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  MenuItem.prototype.createEl = function createEl(type, props, attrs) {
+    return _ClickableComponent.prototype.createEl.call(this, 'li', (0, _object2['default'])({
+      className: 'vjs-menu-item',
+      innerHTML: this.localize(this.options_.label),
+      tabIndex: -1
+    }, props), attrs);
+  };
+
+  /**
+   * Handle a click on the menu item, and set it to selected
+   *
+   * @method handleClick
+   */
+
+
+  MenuItem.prototype.handleClick = function handleClick() {
+    this.selected(true);
+  };
+
+  /**
+   * Set this menu item as selected or not
+   *
+   * @param  {Boolean} selected
+   * @method selected
+   */
+
+
+  MenuItem.prototype.selected = function selected(_selected) {
+    if (this.selectable) {
+      if (_selected) {
+        this.addClass('vjs-selected');
+        this.el_.setAttribute('aria-checked', 'true');
+        // aria-checked isn't fully supported by browsers/screen readers,
+        // so indicate selected state to screen reader in the control text.
+        this.controlText(', selected');
+      } else {
+        this.removeClass('vjs-selected');
+        this.el_.setAttribute('aria-checked', 'false');
+        // Indicate un-selected state to screen reader
+        // Note that a space clears out the selected state text
+        this.controlText(' ');
+      }
+    }
+  };
+
+  return MenuItem;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('MenuItem', MenuItem);
+exports['default'] = MenuItem;
+
+},{"../clickable-component.js":3,"../component.js":5,"object.assign":136}],49:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _events = _dereq_('../utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file menu.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Menu component is used to build pop up menus, including subtitle and
+ * captions selection menus.
+ *
+ * @extends Component
+ * @class Menu
+ */
+var Menu = function (_Component) {
+  _inherits(Menu, _Component);
+
+  function Menu(player, options) {
+    _classCallCheck(this, Menu);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.focusedChild_ = -1;
+
+    _this.on('keydown', _this.handleKeyPress);
+    return _this;
+  }
+
+  /**
+   * Add a menu item to the menu
+   *
+   * @param {Object|String} component Component or component type to add
+   * @method addItem
+   */
+
+
+  Menu.prototype.addItem = function addItem(component) {
+    this.addChild(component);
+    component.on('click', Fn.bind(this, function () {
+      this.unlockShowing();
+      // TODO: Need to set keyboard focus back to the menuButton
+    }));
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Menu.prototype.createEl = function createEl() {
+    var contentElType = this.options_.contentElType || 'ul';
+
+    this.contentEl_ = Dom.createEl(contentElType, {
+      className: 'vjs-menu-content'
+    });
+
+    this.contentEl_.setAttribute('role', 'menu');
+
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      append: this.contentEl_,
+      className: 'vjs-menu'
+    });
+
+    el.setAttribute('role', 'presentation');
+    el.appendChild(this.contentEl_);
+
+    // Prevent clicks from bubbling up. Needed for Menu Buttons,
+    // where a click on the parent is significant
+    Events.on(el, 'click', function (event) {
+      event.preventDefault();
+      event.stopImmediatePropagation();
+    });
+
+    return el;
+  };
+
+  /**
+   * Handle key press for menu
+   *
+   * @param {Object} event Event object
+   * @method handleKeyPress
+   */
+
+
+  Menu.prototype.handleKeyPress = function handleKeyPress(event) {
+    // Left and Down Arrows
+    if (event.which === 37 || event.which === 40) {
+      event.preventDefault();
+      this.stepForward();
+
+      // Up and Right Arrows
+    } else if (event.which === 38 || event.which === 39) {
+      event.preventDefault();
+      this.stepBack();
+    }
+  };
+
+  /**
+   * Move to next (lower) menu item for keyboard users
+   *
+   * @method stepForward
+   */
+
+
+  Menu.prototype.stepForward = function stepForward() {
+    var stepChild = 0;
+
+    if (this.focusedChild_ !== undefined) {
+      stepChild = this.focusedChild_ + 1;
+    }
+    this.focus(stepChild);
+  };
+
+  /**
+   * Move to previous (higher) menu item for keyboard users
+   *
+   * @method stepBack
+   */
+
+
+  Menu.prototype.stepBack = function stepBack() {
+    var stepChild = 0;
+
+    if (this.focusedChild_ !== undefined) {
+      stepChild = this.focusedChild_ - 1;
+    }
+    this.focus(stepChild);
+  };
+
+  /**
+   * Set focus on a menu item in the menu
+   *
+   * @param {Object|String} item Index of child item set focus on
+   * @method focus
+   */
+
+
+  Menu.prototype.focus = function focus() {
+    var item = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0];
+
+    var children = this.children().slice();
+    var haveTitle = children.length && children[0].className && /vjs-menu-title/.test(children[0].className);
+
+    if (haveTitle) {
+      children.shift();
+    }
+
+    if (children.length > 0) {
+      if (item < 0) {
+        item = 0;
+      } else if (item >= children.length) {
+        item = children.length - 1;
+      }
+
+      this.focusedChild_ = item;
+
+      children[item].el_.focus();
+    }
+  };
+
+  return Menu;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Menu', Menu);
+exports['default'] = Menu;
+
+},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],50:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _dom = _dereq_('./utils/dom');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('./utils/fn');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file modal-dialog.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+var MODAL_CLASS_NAME = 'vjs-modal-dialog';
+var ESC = 27;
+
+/**
+ * The `ModalDialog` displays over the video and its controls, which blocks
+ * interaction with the player until it is closed.
+ *
+ * Modal dialogs include a "Close" button and will close when that button
+ * is activated - or when ESC is pressed anywhere.
+ *
+ * @extends Component
+ * @class ModalDialog
+ */
+
+var ModalDialog = function (_Component) {
+  _inherits(ModalDialog, _Component);
+
+  /**
+   * Constructor for modals.
+   *
+   * @param  {Player} player
+   * @param  {Object} [options]
+   * @param  {Mixed} [options.content=undefined]
+   *         Provide customized content for this modal.
+   *
+   * @param  {String} [options.description]
+   *         A text description for the modal, primarily for accessibility.
+   *
+   * @param  {Boolean} [options.fillAlways=false]
+   *         Normally, modals are automatically filled only the first time
+   *         they open. This tells the modal to refresh its content
+   *         every time it opens.
+   *
+   * @param  {String} [options.label]
+   *         A text label for the modal, primarily for accessibility.
+   *
+   * @param  {Boolean} [options.temporary=true]
+   *         If `true`, the modal can only be opened once; it will be
+   *         disposed as soon as it's closed.
+   *
+   * @param  {Boolean} [options.uncloseable=false]
+   *         If `true`, the user will not be able to close the modal
+   *         through the UI in the normal ways. Programmatic closing is
+   *         still possible.
+   *
+   */
+  function ModalDialog(player, options) {
+    _classCallCheck(this, ModalDialog);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false;
+
+    _this.closeable(!_this.options_.uncloseable);
+    _this.content(_this.options_.content);
+
+    // Make sure the contentEl is defined AFTER any children are initialized
+    // because we only want the contents of the modal in the contentEl
+    // (not the UI elements like the close button).
+    _this.contentEl_ = Dom.createEl('div', {
+      className: MODAL_CLASS_NAME + '-content'
+    }, {
+      role: 'document'
+    });
+
+    _this.descEl_ = Dom.createEl('p', {
+      className: MODAL_CLASS_NAME + '-description vjs-offscreen',
+      id: _this.el().getAttribute('aria-describedby')
+    });
+
+    Dom.textContent(_this.descEl_, _this.description());
+    _this.el_.appendChild(_this.descEl_);
+    _this.el_.appendChild(_this.contentEl_);
+    return _this;
+  }
+
+  /**
+   * Create the modal's DOM element
+   *
+   * @method createEl
+   * @return {Element}
+   */
+
+
+  ModalDialog.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass(),
+      tabIndex: -1
+    }, {
+      'aria-describedby': this.id() + '_description',
+      'aria-hidden': 'true',
+      'aria-label': this.label(),
+      'role': 'dialog'
+    });
+  };
+
+  /**
+   * Build the modal's CSS class.
+   *
+   * @method buildCSSClass
+   * @return {String}
+   */
+
+
+  ModalDialog.prototype.buildCSSClass = function buildCSSClass() {
+    return MODAL_CLASS_NAME + ' vjs-hidden ' + _Component.prototype.buildCSSClass.call(this);
+  };
+
+  /**
+   * Handles key presses on the document, looking for ESC, which closes
+   * the modal.
+   *
+   * @method handleKeyPress
+   * @param  {Event} e
+   */
+
+
+  ModalDialog.prototype.handleKeyPress = function handleKeyPress(e) {
+    if (e.which === ESC && this.closeable()) {
+      this.close();
+    }
+  };
+
+  /**
+   * Returns the label string for this modal. Primarily used for accessibility.
+   *
+   * @return {String}
+   */
+
+
+  ModalDialog.prototype.label = function label() {
+    return this.options_.label || this.localize('Modal Window');
+  };
+
+  /**
+   * Returns the description string for this modal. Primarily used for
+   * accessibility.
+   *
+   * @return {String}
+   */
+
+
+  ModalDialog.prototype.description = function description() {
+    var desc = this.options_.description || this.localize('This is a modal window.');
+
+    // Append a universal closeability message if the modal is closeable.
+    if (this.closeable()) {
+      desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');
+    }
+
+    return desc;
+  };
+
+  /**
+   * Opens the modal.
+   *
+   * @method open
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.open = function open() {
+    if (!this.opened_) {
+      var player = this.player();
+
+      this.trigger('beforemodalopen');
+      this.opened_ = true;
+
+      // Fill content if the modal has never opened before and
+      // never been filled.
+      if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {
+        this.fill();
+      }
+
+      // If the player was playing, pause it and take note of its previously
+      // playing state.
+      this.wasPlaying_ = !player.paused();
+
+      if (this.wasPlaying_) {
+        player.pause();
+      }
+
+      if (this.closeable()) {
+        this.on(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));
+      }
+
+      player.controls(false);
+      this.show();
+      this.el().setAttribute('aria-hidden', 'false');
+      this.trigger('modalopen');
+      this.hasBeenOpened_ = true;
+    }
+    return this;
+  };
+
+  /**
+   * Whether or not the modal is opened currently.
+   *
+   * @method opened
+   * @param  {Boolean} [value]
+   *         If given, it will open (`true`) or close (`false`) the modal.
+   *
+   * @return {Boolean}
+   */
+
+
+  ModalDialog.prototype.opened = function opened(value) {
+    if (typeof value === 'boolean') {
+      this[value ? 'open' : 'close']();
+    }
+    return this.opened_;
+  };
+
+  /**
+   * Closes the modal.
+   *
+   * @method close
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.close = function close() {
+    if (this.opened_) {
+      var player = this.player();
+
+      this.trigger('beforemodalclose');
+      this.opened_ = false;
+
+      if (this.wasPlaying_) {
+        player.play();
+      }
+
+      if (this.closeable()) {
+        this.off(this.el_.ownerDocument, 'keydown', Fn.bind(this, this.handleKeyPress));
+      }
+
+      player.controls(true);
+      this.hide();
+      this.el().setAttribute('aria-hidden', 'true');
+      this.trigger('modalclose');
+
+      if (this.options_.temporary) {
+        this.dispose();
+      }
+    }
+    return this;
+  };
+
+  /**
+   * Whether or not the modal is closeable via the UI.
+   *
+   * @method closeable
+   * @param  {Boolean} [value]
+   *         If given as a Boolean, it will set the `closeable` option.
+   *
+   * @return {Boolean}
+   */
+
+
+  ModalDialog.prototype.closeable = function closeable(value) {
+    if (typeof value === 'boolean') {
+      var closeable = this.closeable_ = !!value;
+      var close = this.getChild('closeButton');
+
+      // If this is being made closeable and has no close button, add one.
+      if (closeable && !close) {
+
+        // The close button should be a child of the modal - not its
+        // content element, so temporarily change the content element.
+        var temp = this.contentEl_;
+
+        this.contentEl_ = this.el_;
+        close = this.addChild('closeButton', { controlText: 'Close Modal Dialog' });
+        this.contentEl_ = temp;
+        this.on(close, 'close', this.close);
+      }
+
+      // If this is being made uncloseable and has a close button, remove it.
+      if (!closeable && close) {
+        this.off(close, 'close', this.close);
+        this.removeChild(close);
+        close.dispose();
+      }
+    }
+    return this.closeable_;
+  };
+
+  /**
+   * Fill the modal's content element with the modal's "content" option.
+   *
+   * The content element will be emptied before this change takes place.
+   *
+   * @method fill
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.fill = function fill() {
+    return this.fillWith(this.content());
+  };
+
+  /**
+   * Fill the modal's content element with arbitrary content.
+   *
+   * The content element will be emptied before this change takes place.
+   *
+   * @method fillWith
+   * @param  {Mixed} [content]
+   *         The same rules apply to this as apply to the `content` option.
+   *
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.fillWith = function fillWith(content) {
+    var contentEl = this.contentEl();
+    var parentEl = contentEl.parentNode;
+    var nextSiblingEl = contentEl.nextSibling;
+
+    this.trigger('beforemodalfill');
+    this.hasBeenFilled_ = true;
+
+    // Detach the content element from the DOM before performing
+    // manipulation to avoid modifying the live DOM multiple times.
+    parentEl.removeChild(contentEl);
+    this.empty();
+    Dom.insertContent(contentEl, content);
+    this.trigger('modalfill');
+
+    // Re-inject the re-filled content element.
+    if (nextSiblingEl) {
+      parentEl.insertBefore(contentEl, nextSiblingEl);
+    } else {
+      parentEl.appendChild(contentEl);
+    }
+
+    return this;
+  };
+
+  /**
+   * Empties the content element.
+   *
+   * This happens automatically anytime the modal is filled.
+   *
+   * @method empty
+   * @return {ModalDialog}
+   */
+
+
+  ModalDialog.prototype.empty = function empty() {
+    this.trigger('beforemodalempty');
+    Dom.emptyEl(this.contentEl());
+    this.trigger('modalempty');
+    return this;
+  };
+
+  /**
+   * Gets or sets the modal content, which gets normalized before being
+   * rendered into the DOM.
+   *
+   * This does not update the DOM or fill the modal, but it is called during
+   * that process.
+   *
+   * @method content
+   * @param  {Mixed} [value]
+   *         If defined, sets the internal content value to be used on the
+   *         next call(s) to `fill`. This value is normalized before being
+   *         inserted. To "clear" the internal content value, pass `null`.
+   *
+   * @return {Mixed}
+   */
+
+
+  ModalDialog.prototype.content = function content(value) {
+    if (typeof value !== 'undefined') {
+      this.content_ = value;
+    }
+    return this.content_;
+  };
+
+  return ModalDialog;
+}(_component2['default']);
+
+/*
+ * Modal dialog default options.
+ *
+ * @type {Object}
+ * @private
+ */
+
+
+ModalDialog.prototype.options_ = {
+  temporary: true
+};
+
+_component2['default'].registerComponent('ModalDialog', ModalDialog);
+exports['default'] = ModalDialog;
+
+},{"./component":5,"./utils/dom":80,"./utils/fn":82}],51:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('./component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _guid = _dereq_('./utils/guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _browser = _dereq_('./utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _toTitleCase = _dereq_('./utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+var _timeRanges = _dereq_('./utils/time-ranges.js');
+
+var _buffer = _dereq_('./utils/buffer.js');
+
+var _stylesheet = _dereq_('./utils/stylesheet.js');
+
+var stylesheet = _interopRequireWildcard(_stylesheet);
+
+var _fullscreenApi = _dereq_('./fullscreen-api.js');
+
+var _fullscreenApi2 = _interopRequireDefault(_fullscreenApi);
+
+var _mediaError = _dereq_('./media-error.js');
+
+var _mediaError2 = _interopRequireDefault(_mediaError);
+
+var _tuple = _dereq_('safe-json-parse/tuple');
+
+var _tuple2 = _interopRequireDefault(_tuple);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+var _mergeOptions = _dereq_('./utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _textTrackListConverter = _dereq_('./tracks/text-track-list-converter.js');
+
+var _textTrackListConverter2 = _interopRequireDefault(_textTrackListConverter);
+
+var _modalDialog = _dereq_('./modal-dialog');
+
+var _modalDialog2 = _interopRequireDefault(_modalDialog);
+
+var _tech = _dereq_('./tech/tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _audioTrackList = _dereq_('./tracks/audio-track-list.js');
+
+var _audioTrackList2 = _interopRequireDefault(_audioTrackList);
+
+var _videoTrackList = _dereq_('./tracks/video-track-list.js');
+
+var _videoTrackList2 = _interopRequireDefault(_videoTrackList);
+
+_dereq_('./tech/loader.js');
+
+_dereq_('./tech/flash.js');
+
+_dereq_('./poster-image.js');
+
+_dereq_('./tracks/text-track-display.js');
+
+_dereq_('./loading-spinner.js');
+
+_dereq_('./big-play-button.js');
+
+_dereq_('./close-button.js');
+
+_dereq_('./control-bar/control-bar.js');
+
+_dereq_('./error-display.js');
+
+_dereq_('./tracks/text-track-settings.js');
+
+_dereq_('./tech/html5.js');
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file player.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+// Subclasses Component
+
+
+// The following imports are used only to ensure that the corresponding modules
+// are always included in the video.js package. Importing the modules will
+// execute them and they will register themselves with video.js.
+
+
+// Import Html5 tech, at least for disposing the original video tag.
+
+
+/**
+ * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.
+ * ```js
+ * var myPlayer = videojs('example_video_1');
+ * ```
+ * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.
+ * ```html
+ * <video id="example_video_1" data-setup='{}' controls>
+ *   <source src="my-source.mp4" type="video/mp4">
+ * </video>
+ * ```
+ * After an instance has been created it can be accessed globally using `Video('example_video_1')`.
+ *
+ * @param {Element} tag        The original video tag used for configuring options
+ * @param {Object=} options    Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends Component
+ * @class Player
+ */
+var Player = function (_Component) {
+  _inherits(Player, _Component);
+
+  /**
+   * player's constructor function
+   *
+   * @constructs
+   * @method init
+   * @param {Element} tag        The original video tag used for configuring options
+   * @param {Object=} options    Player options
+   * @param {Function=} ready    Ready callback function
+   */
+  function Player(tag, options, ready) {
+    _classCallCheck(this, Player);
+
+    // Make sure tag ID exists
+    tag.id = tag.id || 'vjs_video_' + Guid.newGUID();
+
+    // Set Options
+    // The options argument overrides options set in the video tag
+    // which overrides globally set options.
+    // This latter part coincides with the load order
+    // (tag must exist before Player)
+    options = (0, _object2['default'])(Player.getTagSettings(tag), options);
+
+    // Delay the initialization of children because we need to set up
+    // player properties first, and can't use `this` before `super()`
+    options.initChildren = false;
+
+    // Same with creating the element
+    options.createEl = false;
+
+    // we don't want the player to report touch activity on itself
+    // see enableTouchActivity in Component
+    options.reportTouchActivity = false;
+
+    // If language is not set, get the closest lang attribute
+    if (!options.language) {
+      if (typeof tag.closest === 'function') {
+        var closest = tag.closest('[lang]');
+
+        if (closest) {
+          options.language = closest.getAttribute('lang');
+        }
+      } else {
+        var element = tag;
+
+        while (element && element.nodeType === 1) {
+          if (Dom.getElAttributes(element).hasOwnProperty('lang')) {
+            options.language = element.getAttribute('lang');
+            break;
+          }
+          element = element.parentNode;
+        }
+      }
+    }
+
+    // Run base component initializing with new options
+
+    // if the global option object was accidentally blown away by
+    // someone, bail early with an informative error
+    var _this = _possibleConstructorReturn(this, _Component.call(this, null, options, ready));
+
+    if (!_this.options_ || !_this.options_.techOrder || !_this.options_.techOrder.length) {
+      throw new Error('No techOrder specified. Did you overwrite ' + 'videojs.options instead of just changing the ' + 'properties you want to override?');
+    }
+
+    // Store the original tag used to set options
+    _this.tag = tag;
+
+    // Store the tag attributes used to restore html5 element
+    _this.tagAttributes = tag && Dom.getElAttributes(tag);
+
+    // Update current language
+    _this.language(_this.options_.language);
+
+    // Update Supported Languages
+    if (options.languages) {
+      (function () {
+        // Normalise player option languages to lowercase
+        var languagesToLower = {};
+
+        Object.getOwnPropertyNames(options.languages).forEach(function (name) {
+          languagesToLower[name.toLowerCase()] = options.languages[name];
+        });
+        _this.languages_ = languagesToLower;
+      })();
+    } else {
+      _this.languages_ = Player.prototype.options_.languages;
+    }
+
+    // Cache for video property values.
+    _this.cache_ = {};
+
+    // Set poster
+    _this.poster_ = options.poster || '';
+
+    // Set controls
+    _this.controls_ = !!options.controls;
+
+    // Original tag settings stored in options
+    // now remove immediately so native controls don't flash.
+    // May be turned back on by HTML5 tech if nativeControlsForTouch is true
+    tag.controls = false;
+
+    /*
+     * Store the internal state of scrubbing
+     *
+     * @private
+     * @return {Boolean} True if the user is scrubbing
+     */
+    _this.scrubbing_ = false;
+
+    _this.el_ = _this.createEl();
+
+    // We also want to pass the original player options to each component and plugin
+    // as well so they don't need to reach back into the player for options later.
+    // We also need to do another copy of this.options_ so we don't end up with
+    // an infinite loop.
+    var playerOptionsCopy = (0, _mergeOptions2['default'])(_this.options_);
+
+    // Load plugins
+    if (options.plugins) {
+      (function () {
+        var plugins = options.plugins;
+
+        Object.getOwnPropertyNames(plugins).forEach(function (name) {
+          if (typeof this[name] === 'function') {
+            this[name](plugins[name]);
+          } else {
+            _log2['default'].error('Unable to find plugin:', name);
+          }
+        }, _this);
+      })();
+    }
+
+    _this.options_.playerOptions = playerOptionsCopy;
+
+    _this.initChildren();
+
+    // Set isAudio based on whether or not an audio tag was used
+    _this.isAudio(tag.nodeName.toLowerCase() === 'audio');
+
+    // Update controls className. Can't do this when the controls are initially
+    // set because the element doesn't exist yet.
+    if (_this.controls()) {
+      _this.addClass('vjs-controls-enabled');
+    } else {
+      _this.addClass('vjs-controls-disabled');
+    }
+
+    // Set ARIA label and region role depending on player type
+    _this.el_.setAttribute('role', 'region');
+    if (_this.isAudio()) {
+      _this.el_.setAttribute('aria-label', 'audio player');
+    } else {
+      _this.el_.setAttribute('aria-label', 'video player');
+    }
+
+    if (_this.isAudio()) {
+      _this.addClass('vjs-audio');
+    }
+
+    if (_this.flexNotSupported_()) {
+      _this.addClass('vjs-no-flex');
+    }
+
+    // TODO: Make this smarter. Toggle user state between touching/mousing
+    // using events, since devices can have both touch and mouse events.
+    // if (browser.TOUCH_ENABLED) {
+    //   this.addClass('vjs-touch-enabled');
+    // }
+
+    // iOS Safari has broken hover handling
+    if (!browser.IS_IOS) {
+      _this.addClass('vjs-workinghover');
+    }
+
+    // Make player easily findable by ID
+    Player.players[_this.id_] = _this;
+
+    // When the player is first initialized, trigger activity so components
+    // like the control bar show themselves if needed
+    _this.userActive(true);
+    _this.reportUserActivity();
+    _this.listenForUserActivity_();
+
+    _this.on('fullscreenchange', _this.handleFullscreenChange_);
+    _this.on('stageclick', _this.handleStageClick_);
+    return _this;
+  }
+
+  /**
+   * Destroys the video player and does any necessary cleanup
+   * ```js
+   *     myPlayer.dispose();
+   * ```
+   * This is especially helpful if you are dynamically adding and removing videos
+   * to/from the DOM.
+   *
+   * @method dispose
+   */
+
+
+  Player.prototype.dispose = function dispose() {
+    this.trigger('dispose');
+    // prevent dispose from being called twice
+    this.off('dispose');
+
+    if (this.styleEl_ && this.styleEl_.parentNode) {
+      this.styleEl_.parentNode.removeChild(this.styleEl_);
+    }
+
+    // Kill reference to this player
+    Player.players[this.id_] = null;
+
+    if (this.tag && this.tag.player) {
+      this.tag.player = null;
+    }
+
+    if (this.el_ && this.el_.player) {
+      this.el_.player = null;
+    }
+
+    if (this.tech_) {
+      this.tech_.dispose();
+    }
+
+    _Component.prototype.dispose.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Player.prototype.createEl = function createEl() {
+    var el = this.el_ = _Component.prototype.createEl.call(this, 'div');
+    var tag = this.tag;
+
+    // Remove width/height attrs from tag so CSS can make it 100% width/height
+    tag.removeAttribute('width');
+    tag.removeAttribute('height');
+
+    // Copy over all the attributes from the tag, including ID and class
+    // ID will now reference player box, not the video tag
+    var attrs = Dom.getElAttributes(tag);
+
+    Object.getOwnPropertyNames(attrs).forEach(function (attr) {
+      // workaround so we don't totally break IE7
+      // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7
+      if (attr === 'class') {
+        el.className = attrs[attr];
+      } else {
+        el.setAttribute(attr, attrs[attr]);
+      }
+    });
+
+    // Update tag id/class for use as HTML5 playback tech
+    // Might think we should do this after embedding in container so .vjs-tech class
+    // doesn't flash 100% width/height, but class only applies with .video-js parent
+    tag.playerId = tag.id;
+    tag.id += '_html5_api';
+    tag.className = 'vjs-tech';
+
+    // Make player findable on elements
+    tag.player = el.player = this;
+    // Default state of video is paused
+    this.addClass('vjs-paused');
+
+    // Add a style element in the player that we'll use to set the width/height
+    // of the player in a way that's still overrideable by CSS, just like the
+    // video element
+    if (_window2['default'].VIDEOJS_NO_DYNAMIC_STYLE !== true) {
+      this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');
+      var defaultsStyleEl = Dom.$('.vjs-styles-defaults');
+      var head = Dom.$('head');
+
+      head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);
+    }
+
+    // Pass in the width/height/aspectRatio options which will update the style el
+    this.width(this.options_.width);
+    this.height(this.options_.height);
+    this.fluid(this.options_.fluid);
+    this.aspectRatio(this.options_.aspectRatio);
+
+    // Hide any links within the video/audio tag, because IE doesn't hide them completely.
+    var links = tag.getElementsByTagName('a');
+
+    for (var i = 0; i < links.length; i++) {
+      var linkEl = links.item(i);
+
+      Dom.addElClass(linkEl, 'vjs-hidden');
+      linkEl.setAttribute('hidden', 'hidden');
+    }
+
+    // insertElFirst seems to cause the networkState to flicker from 3 to 2, so
+    // keep track of the original for later so we can know if the source originally failed
+    tag.initNetworkState_ = tag.networkState;
+
+    // Wrap video tag in div (el/box) container
+    if (tag.parentNode) {
+      tag.parentNode.insertBefore(el, tag);
+    }
+
+    // insert the tag as the first child of the player element
+    // then manually add it to the children array so that this.addChild
+    // will work properly for other components
+    //
+    // Breaks iPhone, fixed in HTML5 setup.
+    Dom.insertElFirst(tag, el);
+    this.children_.unshift(tag);
+
+    this.el_ = el;
+
+    return el;
+  };
+
+  /**
+   * Get/set player width
+   *
+   * @param {Number=} value Value for width
+   * @return {Number} Width when getting
+   * @method width
+   */
+
+
+  Player.prototype.width = function width(value) {
+    return this.dimension('width', value);
+  };
+
+  /**
+   * Get/set player height
+   *
+   * @param {Number=} value Value for height
+   * @return {Number} Height when getting
+   * @method height
+   */
+
+
+  Player.prototype.height = function height(value) {
+    return this.dimension('height', value);
+  };
+
+  /**
+   * Get/set dimension for player
+   *
+   * @param {String} dimension Either width or height
+   * @param {Number=} value Value for dimension
+   * @return {Component}
+   * @method dimension
+   */
+
+
+  Player.prototype.dimension = function dimension(_dimension, value) {
+    var privDimension = _dimension + '_';
+
+    if (value === undefined) {
+      return this[privDimension] || 0;
+    }
+
+    if (value === '') {
+      // If an empty string is given, reset the dimension to be automatic
+      this[privDimension] = undefined;
+    } else {
+      var parsedVal = parseFloat(value);
+
+      if (isNaN(parsedVal)) {
+        _log2['default'].error('Improper value "' + value + '" supplied for for ' + _dimension);
+        return this;
+      }
+
+      this[privDimension] = parsedVal;
+    }
+
+    this.updateStyleEl_();
+    return this;
+  };
+
+  /**
+   * Add/remove the vjs-fluid class
+   *
+   * @param {Boolean} bool Value of true adds the class, value of false removes the class
+   * @method fluid
+   */
+
+
+  Player.prototype.fluid = function fluid(bool) {
+    if (bool === undefined) {
+      return !!this.fluid_;
+    }
+
+    this.fluid_ = !!bool;
+
+    if (bool) {
+      this.addClass('vjs-fluid');
+    } else {
+      this.removeClass('vjs-fluid');
+    }
+  };
+
+  /**
+   * Get/Set the aspect ratio
+   *
+   * @param {String=} ratio Aspect ratio for player
+   * @return aspectRatio
+   * @method aspectRatio
+   */
+
+
+  Player.prototype.aspectRatio = function aspectRatio(ratio) {
+    if (ratio === undefined) {
+      return this.aspectRatio_;
+    }
+
+    // Check for width:height format
+    if (!/^\d+\:\d+$/.test(ratio)) {
+      throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');
+    }
+    this.aspectRatio_ = ratio;
+
+    // We're assuming if you set an aspect ratio you want fluid mode,
+    // because in fixed mode you could calculate width and height yourself.
+    this.fluid(true);
+
+    this.updateStyleEl_();
+  };
+
+  /**
+   * Update styles of the player element (height, width and aspect ratio)
+   *
+   * @method updateStyleEl_
+   */
+
+
+  Player.prototype.updateStyleEl_ = function updateStyleEl_() {
+    if (_window2['default'].VIDEOJS_NO_DYNAMIC_STYLE === true) {
+      var _width = typeof this.width_ === 'number' ? this.width_ : this.options_.width;
+      var _height = typeof this.height_ === 'number' ? this.height_ : this.options_.height;
+      var techEl = this.tech_ && this.tech_.el();
+
+      if (techEl) {
+        if (_width >= 0) {
+          techEl.width = _width;
+        }
+        if (_height >= 0) {
+          techEl.height = _height;
+        }
+      }
+
+      return;
+    }
+
+    var width = void 0;
+    var height = void 0;
+    var aspectRatio = void 0;
+    var idClass = void 0;
+
+    // The aspect ratio is either used directly or to calculate width and height.
+    if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {
+      // Use any aspectRatio that's been specifically set
+      aspectRatio = this.aspectRatio_;
+    } else if (this.videoWidth()) {
+      // Otherwise try to get the aspect ratio from the video metadata
+      aspectRatio = this.videoWidth() + ':' + this.videoHeight();
+    } else {
+      // Or use a default. The video element's is 2:1, but 16:9 is more common.
+      aspectRatio = '16:9';
+    }
+
+    // Get the ratio as a decimal we can use to calculate dimensions
+    var ratioParts = aspectRatio.split(':');
+    var ratioMultiplier = ratioParts[1] / ratioParts[0];
+
+    if (this.width_ !== undefined) {
+      // Use any width that's been specifically set
+      width = this.width_;
+    } else if (this.height_ !== undefined) {
+      // Or calulate the width from the aspect ratio if a height has been set
+      width = this.height_ / ratioMultiplier;
+    } else {
+      // Or use the video's metadata, or use the video el's default of 300
+      width = this.videoWidth() || 300;
+    }
+
+    if (this.height_ !== undefined) {
+      // Use any height that's been specifically set
+      height = this.height_;
+    } else {
+      // Otherwise calculate the height from the ratio and the width
+      height = width * ratioMultiplier;
+    }
+
+    // Ensure the CSS class is valid by starting with an alpha character
+    if (/^[^a-zA-Z]/.test(this.id())) {
+      idClass = 'dimensions-' + this.id();
+    } else {
+      idClass = this.id() + '-dimensions';
+    }
+
+    // Ensure the right class is still on the player for the style element
+    this.addClass(idClass);
+
+    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    ');
+  };
+
+  /**
+   * Load the Media Playback Technology (tech)
+   * Load/Create an instance of playback technology including element and API methods
+   * And append playback element in player div.
+   *
+   * @param {String} techName Name of the playback technology
+   * @param {String} source Video source
+   * @method loadTech_
+   * @private
+   */
+
+
+  Player.prototype.loadTech_ = function loadTech_(techName, source) {
+
+    // Pause and remove current playback technology
+    if (this.tech_) {
+      this.unloadTech_();
+    }
+
+    // get rid of the HTML5 video tag as soon as we are using another tech
+    if (techName !== 'Html5' && this.tag) {
+      _tech2['default'].getTech('Html5').disposeMediaElement(this.tag);
+      this.tag.player = null;
+      this.tag = null;
+    }
+
+    this.techName_ = techName;
+
+    // Turn off API access because we're loading a new tech that might load asynchronously
+    this.isReady_ = false;
+
+    // Grab tech-specific options from player options and add source and parent element to use.
+    var techOptions = (0, _object2['default'])({
+      source: source,
+      'nativeControlsForTouch': this.options_.nativeControlsForTouch,
+      'playerId': this.id(),
+      'techId': this.id() + '_' + techName + '_api',
+      'videoTracks': this.videoTracks_,
+      'textTracks': this.textTracks_,
+      'audioTracks': this.audioTracks_,
+      'autoplay': this.options_.autoplay,
+      'preload': this.options_.preload,
+      'loop': this.options_.loop,
+      'muted': this.options_.muted,
+      'poster': this.poster(),
+      'language': this.language(),
+      'vtt.js': this.options_['vtt.js']
+    }, this.options_[techName.toLowerCase()]);
+
+    if (this.tag) {
+      techOptions.tag = this.tag;
+    }
+
+    if (source) {
+      this.currentType_ = source.type;
+      if (source.src === this.cache_.src && this.cache_.currentTime > 0) {
+        techOptions.startTime = this.cache_.currentTime;
+      }
+
+      this.cache_.src = source.src;
+    }
+
+    // Initialize tech instance
+    var TechComponent = _tech2['default'].getTech(techName);
+
+    // Support old behavior of techs being registered as components.
+    // Remove once that deprecated behavior is removed.
+    if (!TechComponent) {
+      TechComponent = _component2['default'].getComponent(techName);
+    }
+    this.tech_ = new TechComponent(techOptions);
+
+    // player.triggerReady is always async, so don't need this to be async
+    this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);
+
+    _textTrackListConverter2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech_);
+
+    // Listen to all HTML5-defined events and trigger them on the player
+    this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);
+    this.on(this.tech_, 'waiting', this.handleTechWaiting_);
+    this.on(this.tech_, 'canplay', this.handleTechCanPlay_);
+    this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);
+    this.on(this.tech_, 'playing', this.handleTechPlaying_);
+    this.on(this.tech_, 'ended', this.handleTechEnded_);
+    this.on(this.tech_, 'seeking', this.handleTechSeeking_);
+    this.on(this.tech_, 'seeked', this.handleTechSeeked_);
+    this.on(this.tech_, 'play', this.handleTechPlay_);
+    this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);
+    this.on(this.tech_, 'pause', this.handleTechPause_);
+    this.on(this.tech_, 'progress', this.handleTechProgress_);
+    this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);
+    this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);
+    this.on(this.tech_, 'error', this.handleTechError_);
+    this.on(this.tech_, 'suspend', this.handleTechSuspend_);
+    this.on(this.tech_, 'abort', this.handleTechAbort_);
+    this.on(this.tech_, 'emptied', this.handleTechEmptied_);
+    this.on(this.tech_, 'stalled', this.handleTechStalled_);
+    this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);
+    this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);
+    this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);
+    this.on(this.tech_, 'ratechange', this.handleTechRateChange_);
+    this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);
+    this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);
+    this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);
+    this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);
+    this.on(this.tech_, 'textdata', this.handleTechTextData_);
+
+    this.usingNativeControls(this.techGet_('controls'));
+
+    if (this.controls() && !this.usingNativeControls()) {
+      this.addTechControlsListeners_();
+    }
+
+    // Add the tech element in the DOM if it was not already there
+    // Make sure to not insert the original video element if using Html5
+    if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {
+      Dom.insertElFirst(this.tech_.el(), this.el());
+    }
+
+    // Get rid of the original video tag reference after the first tech is loaded
+    if (this.tag) {
+      this.tag.player = null;
+      this.tag = null;
+    }
+  };
+
+  /**
+   * Unload playback technology
+   *
+   * @method unloadTech_
+   * @private
+   */
+
+
+  Player.prototype.unloadTech_ = function unloadTech_() {
+    // Save the current text tracks so that we can reuse the same text tracks with the next tech
+    this.videoTracks_ = this.videoTracks();
+    this.textTracks_ = this.textTracks();
+    this.audioTracks_ = this.audioTracks();
+    this.textTracksJson_ = _textTrackListConverter2['default'].textTracksToJson(this.tech_);
+
+    this.isReady_ = false;
+
+    this.tech_.dispose();
+
+    this.tech_ = false;
+  };
+
+  /**
+   * Return a reference to the current tech.
+   * It will only return a reference to the tech if given an object with the
+   * `IWillNotUseThisInPlugins` property on it. This is try and prevent misuse
+   * of techs by plugins.
+   *
+   * @param {Object}
+   * @return {Object} The Tech
+   * @method tech
+   */
+
+
+  Player.prototype.tech = function tech(safety) {
+    if (safety && safety.IWillNotUseThisInPlugins) {
+      return this.tech_;
+    }
+    var 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    ';
+
+    _window2['default'].alert(errorText);
+    throw new Error(errorText);
+  };
+
+  /**
+   * Set up click and touch listeners for the playback element
+   *
+   * On desktops, a click on the video itself will toggle playback,
+   * on a mobile device a click on the video toggles controls.
+   * (toggling controls is done by toggling the user state between active and
+   * inactive)
+   * A tap can signal that a user has become active, or has become inactive
+   * e.g. a quick tap on an iPhone movie should reveal the controls. Another
+   * quick tap should hide them again (signaling the user is in an inactive
+   * viewing state)
+   * In addition to this, we still want the user to be considered inactive after
+   * a few seconds of inactivity.
+   * Note: the only part of iOS interaction we can't mimic with this setup
+   * is a touch and hold on the video element counting as activity in order to
+   * keep the controls showing, but that shouldn't be an issue. A touch and hold
+   * on any controls will still keep the user active
+   *
+   * @private
+   * @method addTechControlsListeners_
+   */
+
+
+  Player.prototype.addTechControlsListeners_ = function addTechControlsListeners_() {
+    // Make sure to remove all the previous listeners in case we are called multiple times.
+    this.removeTechControlsListeners_();
+
+    // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do
+    // trigger mousedown/up.
+    // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object
+    // Any touch events are set to block the mousedown event from happening
+    this.on(this.tech_, 'mousedown', this.handleTechClick_);
+
+    // If the controls were hidden we don't want that to change without a tap event
+    // so we'll check if the controls were already showing before reporting user
+    // activity
+    this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);
+    this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);
+    this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);
+
+    // The tap listener needs to come after the touchend listener because the tap
+    // listener cancels out any reportedUserActivity when setting userActive(false)
+    this.on(this.tech_, 'tap', this.handleTechTap_);
+  };
+
+  /**
+   * Remove the listeners used for click and tap controls. This is needed for
+   * toggling to controls disabled, where a tap/touch should do nothing.
+   *
+   * @method removeTechControlsListeners_
+   * @private
+   */
+
+
+  Player.prototype.removeTechControlsListeners_ = function removeTechControlsListeners_() {
+    // We don't want to just use `this.off()` because there might be other needed
+    // listeners added by techs that extend this.
+    this.off(this.tech_, 'tap', this.handleTechTap_);
+    this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);
+    this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);
+    this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);
+    this.off(this.tech_, 'mousedown', this.handleTechClick_);
+  };
+
+  /**
+   * Player waits for the tech to be ready
+   *
+   * @method handleTechReady_
+   * @private
+   */
+
+
+  Player.prototype.handleTechReady_ = function handleTechReady_() {
+    this.triggerReady();
+
+    // Keep the same volume as before
+    if (this.cache_.volume) {
+      this.techCall_('setVolume', this.cache_.volume);
+    }
+
+    // Look if the tech found a higher resolution poster while loading
+    this.handleTechPosterChange_();
+
+    // Update the duration if available
+    this.handleTechDurationChange_();
+
+    // Chrome and Safari both have issues with autoplay.
+    // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.
+    // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)
+    // This fixes both issues. Need to wait for API, so it updates displays correctly
+    if ((this.src() || this.currentSrc()) && this.tag && this.options_.autoplay && this.paused()) {
+      try {
+        // Chrome Fix. Fixed in Chrome v16.
+        delete this.tag.poster;
+      } catch (e) {
+        (0, _log2['default'])('deleting tag.poster throws in some browsers', e);
+      }
+      this.play();
+    }
+  };
+
+  /**
+   * Fired when the user agent begins looking for media data
+   *
+   * @private
+   * @method handleTechLoadStart_
+   */
+
+
+  Player.prototype.handleTechLoadStart_ = function handleTechLoadStart_() {
+    // TODO: Update to use `emptied` event instead. See #1277.
+
+    this.removeClass('vjs-ended');
+
+    // reset the error state
+    this.error(null);
+
+    // If it's already playing we want to trigger a firstplay event now.
+    // The firstplay event relies on both the play and loadstart events
+    // which can happen in any order for a new source
+    if (!this.paused()) {
+      this.trigger('loadstart');
+      this.trigger('firstplay');
+    } else {
+      // reset the hasStarted state
+      this.hasStarted(false);
+      this.trigger('loadstart');
+    }
+  };
+
+  /**
+   * Add/remove the vjs-has-started class
+   *
+   * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class
+   * @return {Boolean} Boolean value if has started
+   * @private
+   * @method hasStarted
+   */
+
+
+  Player.prototype.hasStarted = function hasStarted(_hasStarted) {
+    if (_hasStarted !== undefined) {
+      // only update if this is a new value
+      if (this.hasStarted_ !== _hasStarted) {
+        this.hasStarted_ = _hasStarted;
+        if (_hasStarted) {
+          this.addClass('vjs-has-started');
+          // trigger the firstplay event if this newly has played
+          this.trigger('firstplay');
+        } else {
+          this.removeClass('vjs-has-started');
+        }
+      }
+      return this;
+    }
+    return !!this.hasStarted_;
+  };
+
+  /**
+   * Fired whenever the media begins or resumes playback
+   *
+   * @private
+   * @method handleTechPlay_
+   */
+
+
+  Player.prototype.handleTechPlay_ = function handleTechPlay_() {
+    this.removeClass('vjs-ended');
+    this.removeClass('vjs-paused');
+    this.addClass('vjs-playing');
+
+    // hide the poster when the user hits play
+    // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play
+    this.hasStarted(true);
+
+    this.trigger('play');
+  };
+
+  /**
+   * Fired whenever the media begins waiting
+   *
+   * @private
+   * @method handleTechWaiting_
+   */
+
+
+  Player.prototype.handleTechWaiting_ = function handleTechWaiting_() {
+    var _this2 = this;
+
+    this.addClass('vjs-waiting');
+    this.trigger('waiting');
+    this.one('timeupdate', function () {
+      return _this2.removeClass('vjs-waiting');
+    });
+  };
+
+  /**
+   * A handler for events that signal that waiting has ended
+   * which is not consistent between browsers. See #1351
+   *
+   * @private
+   * @method handleTechCanPlay_
+   */
+
+
+  Player.prototype.handleTechCanPlay_ = function handleTechCanPlay_() {
+    this.removeClass('vjs-waiting');
+    this.trigger('canplay');
+  };
+
+  /**
+   * A handler for events that signal that waiting has ended
+   * which is not consistent between browsers. See #1351
+   *
+   * @private
+   * @method handleTechCanPlayThrough_
+   */
+
+
+  Player.prototype.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() {
+    this.removeClass('vjs-waiting');
+    this.trigger('canplaythrough');
+  };
+
+  /**
+   * A handler for events that signal that waiting has ended
+   * which is not consistent between browsers. See #1351
+   *
+   * @private
+   * @method handleTechPlaying_
+   */
+
+
+  Player.prototype.handleTechPlaying_ = function handleTechPlaying_() {
+    this.removeClass('vjs-waiting');
+    this.trigger('playing');
+  };
+
+  /**
+   * Fired whenever the player is jumping to a new time
+   *
+   * @private
+   * @method handleTechSeeking_
+   */
+
+
+  Player.prototype.handleTechSeeking_ = function handleTechSeeking_() {
+    this.addClass('vjs-seeking');
+    this.trigger('seeking');
+  };
+
+  /**
+   * Fired when the player has finished jumping to a new time
+   *
+   * @private
+   * @method handleTechSeeked_
+   */
+
+
+  Player.prototype.handleTechSeeked_ = function handleTechSeeked_() {
+    this.removeClass('vjs-seeking');
+    this.trigger('seeked');
+  };
+
+  /**
+   * Fired the first time a video is played
+   * Not part of the HLS spec, and we're not sure if this is the best
+   * implementation yet, so use sparingly. If you don't have a reason to
+   * prevent playback, use `myPlayer.one('play');` instead.
+   *
+   * @private
+   * @method handleTechFirstPlay_
+   */
+
+
+  Player.prototype.handleTechFirstPlay_ = function handleTechFirstPlay_() {
+    // If the first starttime attribute is specified
+    // then we will start at the given offset in seconds
+    if (this.options_.starttime) {
+      this.currentTime(this.options_.starttime);
+    }
+
+    this.addClass('vjs-has-started');
+    this.trigger('firstplay');
+  };
+
+  /**
+   * Fired whenever the media has been paused
+   *
+   * @private
+   * @method handleTechPause_
+   */
+
+
+  Player.prototype.handleTechPause_ = function handleTechPause_() {
+    this.removeClass('vjs-playing');
+    this.addClass('vjs-paused');
+    this.trigger('pause');
+  };
+
+  /**
+   * Fired while the user agent is downloading media data
+   *
+   * @private
+   * @method handleTechProgress_
+   */
+
+
+  Player.prototype.handleTechProgress_ = function handleTechProgress_() {
+    this.trigger('progress');
+  };
+
+  /**
+   * Fired when the end of the media resource is reached (currentTime == duration)
+   *
+   * @private
+   * @method handleTechEnded_
+   */
+
+
+  Player.prototype.handleTechEnded_ = function handleTechEnded_() {
+    this.addClass('vjs-ended');
+    if (this.options_.loop) {
+      this.currentTime(0);
+      this.play();
+    } else if (!this.paused()) {
+      this.pause();
+    }
+
+    this.trigger('ended');
+  };
+
+  /**
+   * Fired when the duration of the media resource is first known or changed
+   *
+   * @private
+   * @method handleTechDurationChange_
+   */
+
+
+  Player.prototype.handleTechDurationChange_ = function handleTechDurationChange_() {
+    this.duration(this.techGet_('duration'));
+  };
+
+  /**
+   * Handle a click on the media element to play/pause
+   *
+   * @param {Object=} event Event object
+   * @private
+   * @method handleTechClick_
+   */
+
+
+  Player.prototype.handleTechClick_ = function handleTechClick_(event) {
+    // We're using mousedown to detect clicks thanks to Flash, but mousedown
+    // will also be triggered with right-clicks, so we need to prevent that
+    if (event.button !== 0) {
+      return;
+    }
+
+    // When controls are disabled a click should not toggle playback because
+    // the click is considered a control
+    if (this.controls()) {
+      if (this.paused()) {
+        this.play();
+      } else {
+        this.pause();
+      }
+    }
+  };
+
+  /**
+   * Handle a tap on the media element. It will toggle the user
+   * activity state, which hides and shows the controls.
+   *
+   * @private
+   * @method handleTechTap_
+   */
+
+
+  Player.prototype.handleTechTap_ = function handleTechTap_() {
+    this.userActive(!this.userActive());
+  };
+
+  /**
+   * Handle touch to start
+   *
+   * @private
+   * @method handleTechTouchStart_
+   */
+
+
+  Player.prototype.handleTechTouchStart_ = function handleTechTouchStart_() {
+    this.userWasActive = this.userActive();
+  };
+
+  /**
+   * Handle touch to move
+   *
+   * @private
+   * @method handleTechTouchMove_
+   */
+
+
+  Player.prototype.handleTechTouchMove_ = function handleTechTouchMove_() {
+    if (this.userWasActive) {
+      this.reportUserActivity();
+    }
+  };
+
+  /**
+   * Handle touch to end
+   *
+   * @private
+   * @method handleTechTouchEnd_
+   */
+
+
+  Player.prototype.handleTechTouchEnd_ = function handleTechTouchEnd_(event) {
+    // Stop the mouse events from also happening
+    event.preventDefault();
+  };
+
+  /**
+   * Fired when the player switches in or out of fullscreen mode
+   *
+   * @private
+   * @method handleFullscreenChange_
+   */
+
+
+  Player.prototype.handleFullscreenChange_ = function handleFullscreenChange_() {
+    if (this.isFullscreen()) {
+      this.addClass('vjs-fullscreen');
+    } else {
+      this.removeClass('vjs-fullscreen');
+    }
+  };
+
+  /**
+   * native click events on the SWF aren't triggered on IE11, Win8.1RT
+   * use stageclick events triggered from inside the SWF instead
+   *
+   * @private
+   * @method handleStageClick_
+   */
+
+
+  Player.prototype.handleStageClick_ = function handleStageClick_() {
+    this.reportUserActivity();
+  };
+
+  /**
+   * Handle Tech Fullscreen Change
+   *
+   * @private
+   * @method handleTechFullscreenChange_
+   */
+
+
+  Player.prototype.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event, data) {
+    if (data) {
+      this.isFullscreen(data.isFullscreen);
+    }
+    this.trigger('fullscreenchange');
+  };
+
+  /**
+   * Fires when an error occurred during the loading of an audio/video
+   *
+   * @private
+   * @method handleTechError_
+   */
+
+
+  Player.prototype.handleTechError_ = function handleTechError_() {
+    var error = this.tech_.error();
+
+    this.error(error);
+  };
+
+  /**
+   * Fires when the browser is intentionally not getting media data
+   *
+   * @private
+   * @method handleTechSuspend_
+   */
+
+
+  Player.prototype.handleTechSuspend_ = function handleTechSuspend_() {
+    this.trigger('suspend');
+  };
+
+  /**
+   * Fires when the loading of an audio/video is aborted
+   *
+   * @private
+   * @method handleTechAbort_
+   */
+
+
+  Player.prototype.handleTechAbort_ = function handleTechAbort_() {
+    this.trigger('abort');
+  };
+
+  /**
+   * Fires when the current playlist is empty
+   *
+   * @private
+   * @method handleTechEmptied_
+   */
+
+
+  Player.prototype.handleTechEmptied_ = function handleTechEmptied_() {
+    this.trigger('emptied');
+  };
+
+  /**
+   * Fires when the browser is trying to get media data, but data is not available
+   *
+   * @private
+   * @method handleTechStalled_
+   */
+
+
+  Player.prototype.handleTechStalled_ = function handleTechStalled_() {
+    this.trigger('stalled');
+  };
+
+  /**
+   * Fires when the browser has loaded meta data for the audio/video
+   *
+   * @private
+   * @method handleTechLoadedMetaData_
+   */
+
+
+  Player.prototype.handleTechLoadedMetaData_ = function handleTechLoadedMetaData_() {
+    this.trigger('loadedmetadata');
+  };
+
+  Player.prototype.handleTechTextData_ = function handleTechTextData_() {
+    var data = null;
+
+    if (arguments.length > 1) {
+      data = arguments[1];
+    }
+    this.trigger('textdata', data);
+  };
+
+  /**
+   * Fires when the browser has loaded the current frame of the audio/video
+   *
+   * @private
+   * @method handleTechLoadedData_
+   */
+
+
+  Player.prototype.handleTechLoadedData_ = function handleTechLoadedData_() {
+    this.trigger('loadeddata');
+  };
+
+  /**
+   * Fires when the current playback position has changed
+   *
+   * @private
+   * @method handleTechTimeUpdate_
+   */
+
+
+  Player.prototype.handleTechTimeUpdate_ = function handleTechTimeUpdate_() {
+    this.trigger('timeupdate');
+  };
+
+  /**
+   * Fires when the playing speed of the audio/video is changed
+   *
+   * @private
+   * @method handleTechRateChange_
+   */
+
+
+  Player.prototype.handleTechRateChange_ = function handleTechRateChange_() {
+    this.trigger('ratechange');
+  };
+
+  /**
+   * Fires when the volume has been changed
+   *
+   * @private
+   * @method handleTechVolumeChange_
+   */
+
+
+  Player.prototype.handleTechVolumeChange_ = function handleTechVolumeChange_() {
+    this.trigger('volumechange');
+  };
+
+  /**
+   * Fires when the text track has been changed
+   *
+   * @private
+   * @method handleTechTextTrackChange_
+   */
+
+
+  Player.prototype.handleTechTextTrackChange_ = function handleTechTextTrackChange_() {
+    this.trigger('texttrackchange');
+  };
+
+  /**
+   * Get object for cached values.
+   *
+   * @return {Object}
+   * @method getCache
+   */
+
+
+  Player.prototype.getCache = function getCache() {
+    return this.cache_;
+  };
+
+  /**
+   * Pass values to the playback tech
+   *
+   * @param {String=} method Method
+   * @param {Object=} arg Argument
+   * @private
+   * @method techCall_
+   */
+
+
+  Player.prototype.techCall_ = function techCall_(method, arg) {
+    // If it's not ready yet, call method when it is
+    if (this.tech_ && !this.tech_.isReady_) {
+      this.tech_.ready(function () {
+        this[method](arg);
+      }, true);
+
+      // Otherwise call method now
+    } else {
+      try {
+        if (this.tech_) {
+          this.tech_[method](arg);
+        }
+      } catch (e) {
+        (0, _log2['default'])(e);
+        throw e;
+      }
+    }
+  };
+
+  /**
+   * Get calls can't wait for the tech, and sometimes don't need to.
+   *
+   * @param {String} method Tech method
+   * @return {Method}
+   * @private
+   * @method techGet_
+   */
+
+
+  Player.prototype.techGet_ = function techGet_(method) {
+    if (this.tech_ && this.tech_.isReady_) {
+
+      // Flash likes to die and reload when you hide or reposition it.
+      // In these cases the object methods go away and we get errors.
+      // When that happens we'll catch the errors and inform tech that it's not ready any more.
+      try {
+        return this.tech_[method]();
+      } catch (e) {
+        // When building additional tech libs, an expected method may not be defined yet
+        if (this.tech_[method] === undefined) {
+          (0, _log2['default'])('Video.js: ' + method + ' method not defined for ' + this.techName_ + ' playback technology.', e);
+
+          // When a method isn't available on the object it throws a TypeError
+        } else if (e.name === 'TypeError') {
+          (0, _log2['default'])('Video.js: ' + method + ' unavailable on ' + this.techName_ + ' playback technology element.', e);
+          this.tech_.isReady_ = false;
+        } else {
+          (0, _log2['default'])(e);
+        }
+        throw e;
+      }
+    }
+
+    return;
+  };
+
+  /**
+   * start media playback
+   * ```js
+   *     myPlayer.play();
+   * ```
+   *
+   * @return {Player} self
+   * @method play
+   */
+
+
+  Player.prototype.play = function play() {
+    // Only calls the tech's play if we already have a src loaded
+    if (this.src() || this.currentSrc()) {
+      this.techCall_('play');
+    } else {
+      this.tech_.one('loadstart', function () {
+        this.play();
+      });
+    }
+
+    return this;
+  };
+
+  /**
+   * Pause the video playback
+   * ```js
+   *     myPlayer.pause();
+   * ```
+   *
+   * @return {Player} self
+   * @method pause
+   */
+
+
+  Player.prototype.pause = function pause() {
+    this.techCall_('pause');
+    return this;
+  };
+
+  /**
+   * Check if the player is paused
+   * ```js
+   *     var isPaused = myPlayer.paused();
+   *     var isPlaying = !myPlayer.paused();
+   * ```
+   *
+   * @return {Boolean} false if the media is currently playing, or true otherwise
+   * @method paused
+   */
+
+
+  Player.prototype.paused = function paused() {
+    // The initial state of paused should be true (in Safari it's actually false)
+    return this.techGet_('paused') === false ? false : true;
+  };
+
+  /**
+   * Returns whether or not the user is "scrubbing". Scrubbing is when the user
+   * has clicked the progress bar handle and is dragging it along the progress bar.
+   *
+   * @param  {Boolean} isScrubbing   True/false the user is scrubbing
+   * @return {Boolean}               The scrubbing status when getting
+   * @return {Object}                The player when setting
+   * @method scrubbing
+   */
+
+
+  Player.prototype.scrubbing = function scrubbing(isScrubbing) {
+    if (isScrubbing !== undefined) {
+      this.scrubbing_ = !!isScrubbing;
+
+      if (isScrubbing) {
+        this.addClass('vjs-scrubbing');
+      } else {
+        this.removeClass('vjs-scrubbing');
+      }
+
+      return this;
+    }
+
+    return this.scrubbing_;
+  };
+
+  /**
+   * Get or set the current time (in seconds)
+   * ```js
+   *     // get
+   *     var whereYouAt = myPlayer.currentTime();
+   *     // set
+   *     myPlayer.currentTime(120); // 2 minutes into the video
+   * ```
+   *
+   * @param  {Number|String=} seconds The time to seek to
+   * @return {Number}        The time in seconds, when not setting
+   * @return {Player}    self, when the current time is set
+   * @method currentTime
+   */
+
+
+  Player.prototype.currentTime = function currentTime(seconds) {
+    if (seconds !== undefined) {
+
+      this.techCall_('setCurrentTime', seconds);
+
+      return this;
+    }
+
+    // cache last currentTime and return. default to 0 seconds
+    //
+    // Caching the currentTime is meant to prevent a massive amount of reads on the tech's
+    // currentTime when scrubbing, but may not provide much performance benefit afterall.
+    // Should be tested. Also something has to read the actual current time or the cache will
+    // never get updated.
+    this.cache_.currentTime = this.techGet_('currentTime') || 0;
+    return this.cache_.currentTime;
+  };
+
+  /**
+   * Normally gets the length in time of the video in seconds;
+   * in all but the rarest use cases an argument will NOT be passed to the method
+   * ```js
+   *     var lengthOfVideo = myPlayer.duration();
+   * ```
+   * **NOTE**: The video must have started loading before the duration can be
+   * known, and in the case of Flash, may not be known until the video starts
+   * playing.
+   *
+   * @param {Number} seconds Duration when setting
+   * @return {Number} The duration of the video in seconds when getting
+   * @method duration
+   */
+
+
+  Player.prototype.duration = function duration(seconds) {
+    if (seconds === undefined) {
+      return this.cache_.duration || 0;
+    }
+
+    seconds = parseFloat(seconds) || 0;
+
+    // Standardize on Inifity for signaling video is live
+    if (seconds < 0) {
+      seconds = Infinity;
+    }
+
+    if (seconds !== this.cache_.duration) {
+      // Cache the last set value for optimized scrubbing (esp. Flash)
+      this.cache_.duration = seconds;
+
+      if (seconds === Infinity) {
+        this.addClass('vjs-live');
+      } else {
+        this.removeClass('vjs-live');
+      }
+
+      this.trigger('durationchange');
+    }
+
+    return this;
+  };
+
+  /**
+   * Calculates how much time is left.
+   * ```js
+   *     var timeLeft = myPlayer.remainingTime();
+   * ```
+   * Not a native video element function, but useful
+   *
+   * @return {Number} The time remaining in seconds
+   * @method remainingTime
+   */
+
+
+  Player.prototype.remainingTime = function remainingTime() {
+    return this.duration() - this.currentTime();
+  };
+
+  // http://dev.w3.org/html5/spec/video.html#dom-media-buffered
+  // Buffered returns a timerange object.
+  // Kind of like an array of portions of the video that have been downloaded.
+
+  /**
+   * Get a TimeRange object with the times of the video that have been downloaded
+   * If you just want the percent of the video that's been downloaded,
+   * use bufferedPercent.
+   * ```js
+   *     // Number of different ranges of time have been buffered. Usually 1.
+   *     numberOfRanges = bufferedTimeRange.length,
+   *     // Time in seconds when the first range starts. Usually 0.
+   *     firstRangeStart = bufferedTimeRange.start(0),
+   *     // Time in seconds when the first range ends
+   *     firstRangeEnd = bufferedTimeRange.end(0),
+   *     // Length in seconds of the first time range
+   *     firstRangeLength = firstRangeEnd - firstRangeStart;
+   * ```
+   *
+   * @return {Object} A mock TimeRange object (following HTML spec)
+   * @method buffered
+   */
+
+
+  Player.prototype.buffered = function buffered() {
+    var buffered = this.techGet_('buffered');
+
+    if (!buffered || !buffered.length) {
+      buffered = (0, _timeRanges.createTimeRange)(0, 0);
+    }
+
+    return buffered;
+  };
+
+  /**
+   * Get the percent (as a decimal) of the video that's been downloaded
+   * ```js
+   *     var howMuchIsDownloaded = myPlayer.bufferedPercent();
+   * ```
+   * 0 means none, 1 means all.
+   * (This method isn't in the HTML5 spec, but it's very convenient)
+   *
+   * @return {Number} A decimal between 0 and 1 representing the percent
+   * @method bufferedPercent
+   */
+
+
+  Player.prototype.bufferedPercent = function bufferedPercent() {
+    return (0, _buffer.bufferedPercent)(this.buffered(), this.duration());
+  };
+
+  /**
+   * Get the ending time of the last buffered time range
+   * This is used in the progress bar to encapsulate all time ranges.
+   *
+   * @return {Number} The end of the last buffered time range
+   * @method bufferedEnd
+   */
+
+
+  Player.prototype.bufferedEnd = function bufferedEnd() {
+    var buffered = this.buffered();
+    var duration = this.duration();
+    var end = buffered.end(buffered.length - 1);
+
+    if (end > duration) {
+      end = duration;
+    }
+
+    return end;
+  };
+
+  /**
+   * Get or set the current volume of the media
+   * ```js
+   *     // get
+   *     var howLoudIsIt = myPlayer.volume();
+   *     // set
+   *     myPlayer.volume(0.5); // Set volume to half
+   * ```
+   * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.
+   *
+   * @param  {Number} percentAsDecimal The new volume as a decimal percent
+   * @return {Number}              The current volume when getting
+   * @return {Player}              self when setting
+   * @method volume
+   */
+
+
+  Player.prototype.volume = function volume(percentAsDecimal) {
+    var vol = void 0;
+
+    if (percentAsDecimal !== undefined) {
+      // Force value to between 0 and 1
+      vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal)));
+      this.cache_.volume = vol;
+      this.techCall_('setVolume', vol);
+
+      return this;
+    }
+
+    // Default to 1 when returning current volume.
+    vol = parseFloat(this.techGet_('volume'));
+    return isNaN(vol) ? 1 : vol;
+  };
+
+  /**
+   * Get the current muted state, or turn mute on or off
+   * ```js
+   *     // get
+   *     var isVolumeMuted = myPlayer.muted();
+   *     // set
+   *     myPlayer.muted(true); // mute the volume
+   * ```
+   *
+   * @param  {Boolean=} muted True to mute, false to unmute
+   * @return {Boolean} True if mute is on, false if not when getting
+   * @return {Player} self when setting mute
+   * @method muted
+   */
+
+
+  Player.prototype.muted = function muted(_muted) {
+    if (_muted !== undefined) {
+      this.techCall_('setMuted', _muted);
+      return this;
+    }
+    return this.techGet_('muted') || false;
+  };
+
+  // Check if current tech can support native fullscreen
+  // (e.g. with built in controls like iOS, so not our flash swf)
+  /**
+   * Check to see if fullscreen is supported
+   *
+   * @return {Boolean}
+   * @method supportsFullScreen
+   */
+
+
+  Player.prototype.supportsFullScreen = function supportsFullScreen() {
+    return this.techGet_('supportsFullScreen') || false;
+  };
+
+  /**
+   * Check if the player is in fullscreen mode
+   * ```js
+   *     // get
+   *     var fullscreenOrNot = myPlayer.isFullscreen();
+   *     // set
+   *     myPlayer.isFullscreen(true); // tell the player it's in fullscreen
+   * ```
+   * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official
+   * property and instead document.fullscreenElement is used. But isFullscreen is
+   * still a valuable property for internal player workings.
+   *
+   * @param  {Boolean=} isFS Update the player's fullscreen state
+   * @return {Boolean} true if fullscreen false if not when getting
+   * @return {Player} self when setting
+   * @method isFullscreen
+   */
+
+
+  Player.prototype.isFullscreen = function isFullscreen(isFS) {
+    if (isFS !== undefined) {
+      this.isFullscreen_ = !!isFS;
+      return this;
+    }
+    return !!this.isFullscreen_;
+  };
+
+  /**
+   * Increase the size of the video to full screen
+   * ```js
+   *     myPlayer.requestFullscreen();
+   * ```
+   * In some browsers, full screen is not supported natively, so it enters
+   * "full window mode", where the video fills the browser window.
+   * In browsers and devices that support native full screen, sometimes the
+   * browser's default controls will be shown, and not the Video.js custom skin.
+   * This includes most mobile devices (iOS, Android) and older versions of
+   * Safari.
+   *
+   * @return {Player} self
+   * @method requestFullscreen
+   */
+
+
+  Player.prototype.requestFullscreen = function requestFullscreen() {
+    var fsApi = _fullscreenApi2['default'];
+
+    this.isFullscreen(true);
+
+    if (fsApi.requestFullscreen) {
+      // the browser supports going fullscreen at the element level so we can
+      // take the controls fullscreen as well as the video
+
+      // Trigger fullscreenchange event after change
+      // We have to specifically add this each time, and remove
+      // when canceling fullscreen. Otherwise if there's multiple
+      // players on a page, they would all be reacting to the same fullscreen
+      // events
+      Events.on(_document2['default'], fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e) {
+        this.isFullscreen(_document2['default'][fsApi.fullscreenElement]);
+
+        // If cancelling fullscreen, remove event listener.
+        if (this.isFullscreen() === false) {
+          Events.off(_document2['default'], fsApi.fullscreenchange, documentFullscreenChange);
+        }
+
+        this.trigger('fullscreenchange');
+      }));
+
+      this.el_[fsApi.requestFullscreen]();
+    } else if (this.tech_.supportsFullScreen()) {
+      // we can't take the video.js controls fullscreen but we can go fullscreen
+      // with native controls
+      this.techCall_('enterFullScreen');
+    } else {
+      // fullscreen isn't supported so we'll just stretch the video element to
+      // fill the viewport
+      this.enterFullWindow();
+      this.trigger('fullscreenchange');
+    }
+
+    return this;
+  };
+
+  /**
+   * Return the video to its normal size after having been in full screen mode
+   * ```js
+   *     myPlayer.exitFullscreen();
+   * ```
+   *
+   * @return {Player} self
+   * @method exitFullscreen
+   */
+
+
+  Player.prototype.exitFullscreen = function exitFullscreen() {
+    var fsApi = _fullscreenApi2['default'];
+
+    this.isFullscreen(false);
+
+    // Check for browser element fullscreen support
+    if (fsApi.requestFullscreen) {
+      _document2['default'][fsApi.exitFullscreen]();
+    } else if (this.tech_.supportsFullScreen()) {
+      this.techCall_('exitFullScreen');
+    } else {
+      this.exitFullWindow();
+      this.trigger('fullscreenchange');
+    }
+
+    return this;
+  };
+
+  /**
+   * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.
+   *
+   * @method enterFullWindow
+   */
+
+
+  Player.prototype.enterFullWindow = function enterFullWindow() {
+    this.isFullWindow = true;
+
+    // Storing original doc overflow value to return to when fullscreen is off
+    this.docOrigOverflow = _document2['default'].documentElement.style.overflow;
+
+    // Add listener for esc key to exit fullscreen
+    Events.on(_document2['default'], 'keydown', Fn.bind(this, this.fullWindowOnEscKey));
+
+    // Hide any scroll bars
+    _document2['default'].documentElement.style.overflow = 'hidden';
+
+    // Apply fullscreen styles
+    Dom.addElClass(_document2['default'].body, 'vjs-full-window');
+
+    this.trigger('enterFullWindow');
+  };
+
+  /**
+   * Check for call to either exit full window or full screen on ESC key
+   *
+   * @param {String} event Event to check for key press
+   * @method fullWindowOnEscKey
+   */
+
+
+  Player.prototype.fullWindowOnEscKey = function fullWindowOnEscKey(event) {
+    if (event.keyCode === 27) {
+      if (this.isFullscreen() === true) {
+        this.exitFullscreen();
+      } else {
+        this.exitFullWindow();
+      }
+    }
+  };
+
+  /**
+   * Exit full window
+   *
+   * @method exitFullWindow
+   */
+
+
+  Player.prototype.exitFullWindow = function exitFullWindow() {
+    this.isFullWindow = false;
+    Events.off(_document2['default'], 'keydown', this.fullWindowOnEscKey);
+
+    // Unhide scroll bars.
+    _document2['default'].documentElement.style.overflow = this.docOrigOverflow;
+
+    // Remove fullscreen styles
+    Dom.removeElClass(_document2['default'].body, 'vjs-full-window');
+
+    // Resize the box, controller, and poster to original sizes
+    // this.positionAll();
+    this.trigger('exitFullWindow');
+  };
+
+  /**
+   * Check whether the player can play a given mimetype
+   *
+   * @param {String} type The mimetype to check
+   * @return {String} 'probably', 'maybe', or '' (empty string)
+   * @method canPlayType
+   */
+
+
+  Player.prototype.canPlayType = function canPlayType(type) {
+    var can = void 0;
+
+    // Loop through each playback technology in the options order
+    for (var i = 0, j = this.options_.techOrder; i < j.length; i++) {
+      var techName = (0, _toTitleCase2['default'])(j[i]);
+      var tech = _tech2['default'].getTech(techName);
+
+      // Support old behavior of techs being registered as components.
+      // Remove once that deprecated behavior is removed.
+      if (!tech) {
+        tech = _component2['default'].getComponent(techName);
+      }
+
+      // Check if the current tech is defined before continuing
+      if (!tech) {
+        _log2['default'].error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.');
+        continue;
+      }
+
+      // Check if the browser supports this technology
+      if (tech.isSupported()) {
+        can = tech.canPlayType(type);
+
+        if (can) {
+          return can;
+        }
+      }
+    }
+
+    return '';
+  };
+
+  /**
+   * Select source based on tech-order or source-order
+   * Uses source-order selection if `options.sourceOrder` is truthy. Otherwise,
+   * defaults to tech-order selection
+   *
+   * @param {Array} sources The sources for a media asset
+   * @return {Object|Boolean} Object of source and tech order, otherwise false
+   * @method selectSource
+   */
+
+
+  Player.prototype.selectSource = function selectSource(sources) {
+    var _this3 = this;
+
+    // Get only the techs specified in `techOrder` that exist and are supported by the
+    // current platform
+    var techs = this.options_.techOrder.map(_toTitleCase2['default']).map(function (techName) {
+      // `Component.getComponent(...)` is for support of old behavior of techs
+      // being registered as components.
+      // Remove once that deprecated behavior is removed.
+      return [techName, _tech2['default'].getTech(techName) || _component2['default'].getComponent(techName)];
+    }).filter(function (_ref) {
+      var techName = _ref[0];
+      var tech = _ref[1];
+
+      // Check if the current tech is defined before continuing
+      if (tech) {
+        // Check if the browser supports this technology
+        return tech.isSupported();
+      }
+
+      _log2['default'].error('The "' + techName + '" tech is undefined. Skipped browser support check for that tech.');
+      return false;
+    });
+
+    // Iterate over each `innerArray` element once per `outerArray` element and execute
+    // `tester` with both. If `tester` returns a non-falsy value, exit early and return
+    // that value.
+    var findFirstPassingTechSourcePair = function findFirstPassingTechSourcePair(outerArray, innerArray, tester) {
+      var found = void 0;
+
+      outerArray.some(function (outerChoice) {
+        return innerArray.some(function (innerChoice) {
+          found = tester(outerChoice, innerChoice);
+
+          if (found) {
+            return true;
+          }
+        });
+      });
+
+      return found;
+    };
+
+    var foundSourceAndTech = void 0;
+    var flip = function flip(fn) {
+      return function (a, b) {
+        return fn(b, a);
+      };
+    };
+    var finder = function finder(_ref2, source) {
+      var techName = _ref2[0];
+      var tech = _ref2[1];
+
+      if (tech.canPlaySource(source, _this3.options_[techName.toLowerCase()])) {
+        return { source: source, tech: techName };
+      }
+    };
+
+    // Depending on the truthiness of `options.sourceOrder`, we swap the order of techs and sources
+    // to select from them based on their priority.
+    if (this.options_.sourceOrder) {
+      // Source-first ordering
+      foundSourceAndTech = findFirstPassingTechSourcePair(sources, techs, flip(finder));
+    } else {
+      // Tech-first ordering
+      foundSourceAndTech = findFirstPassingTechSourcePair(techs, sources, finder);
+    }
+
+    return foundSourceAndTech || false;
+  };
+
+  /**
+   * The source function updates the video source
+   * There are three types of variables you can pass as the argument.
+   * **URL String**: A URL to the the video file. Use this method if you are sure
+   * the current playback technology (HTML5/Flash) can support the source you
+   * provide. Currently only MP4 files can be used in both HTML5 and Flash.
+   * ```js
+   *     myPlayer.src("http://www.example.com/path/to/video.mp4");
+   * ```
+   * **Source Object (or element):* * A javascript object containing information
+   * about the source file. Use this method if you want the player to determine if
+   * it can support the file using the type information.
+   * ```js
+   *     myPlayer.src({ type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" });
+   * ```
+   * **Array of Source Objects:* * To provide multiple versions of the source so
+   * that it can be played using HTML5 across browsers you can use an array of
+   * source objects. Video.js will detect which version is supported and load that
+   * file.
+   * ```js
+   *     myPlayer.src([
+   *       { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" },
+   *       { type: "video/webm", src: "http://www.example.com/path/to/video.webm" },
+   *       { type: "video/ogg", src: "http://www.example.com/path/to/video.ogv" }
+   *     ]);
+   * ```
+   *
+   * @param  {String|Object|Array=} source The source URL, object, or array of sources
+   * @return {String} The current video source when getting
+   * @return {String} The player when setting
+   * @method src
+   */
+
+
+  Player.prototype.src = function src(source) {
+    if (source === undefined) {
+      return this.techGet_('src');
+    }
+
+    var currentTech = _tech2['default'].getTech(this.techName_);
+
+    // Support old behavior of techs being registered as components.
+    // Remove once that deprecated behavior is removed.
+    if (!currentTech) {
+      currentTech = _component2['default'].getComponent(this.techName_);
+    }
+
+    // case: Array of source objects to choose from and pick the best to play
+    if (Array.isArray(source)) {
+      this.sourceList_(source);
+
+      // case: URL String (http://myvideo...)
+    } else if (typeof source === 'string') {
+      // create a source object from the string
+      this.src({ src: source });
+
+      // case: Source object { src: '', type: '' ... }
+    } else if (source instanceof Object) {
+      // check if the source has a type and the loaded tech cannot play the source
+      // if there's no type we'll just try the current tech
+      if (source.type && !currentTech.canPlaySource(source, this.options_[this.techName_.toLowerCase()])) {
+        // create a source list with the current source and send through
+        // the tech loop to check for a compatible technology
+        this.sourceList_([source]);
+      } else {
+        this.cache_.src = source.src;
+        this.currentType_ = source.type || '';
+
+        // wait until the tech is ready to set the source
+        this.ready(function () {
+
+          // The setSource tech method was added with source handlers
+          // so older techs won't support it
+          // We need to check the direct prototype for the case where subclasses
+          // of the tech do not support source handlers
+          if (currentTech.prototype.hasOwnProperty('setSource')) {
+            this.techCall_('setSource', source);
+          } else {
+            this.techCall_('src', source.src);
+          }
+
+          if (this.options_.preload === 'auto') {
+            this.load();
+          }
+
+          if (this.options_.autoplay) {
+            this.play();
+          }
+
+          // Set the source synchronously if possible (#2326)
+        }, true);
+      }
+    }
+
+    return this;
+  };
+
+  /**
+   * Handle an array of source objects
+   *
+   * @param  {Array} sources Array of source objects
+   * @private
+   * @method sourceList_
+   */
+
+
+  Player.prototype.sourceList_ = function sourceList_(sources) {
+    var sourceTech = this.selectSource(sources);
+
+    if (sourceTech) {
+      if (sourceTech.tech === this.techName_) {
+        // if this technology is already loaded, set the source
+        this.src(sourceTech.source);
+      } else {
+        // load this technology with the chosen source
+        this.loadTech_(sourceTech.tech, sourceTech.source);
+      }
+    } else {
+      // We need to wrap this in a timeout to give folks a chance to add error event handlers
+      this.setTimeout(function () {
+        this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) });
+      }, 0);
+
+      // we could not find an appropriate tech, but let's still notify the delegate that this is it
+      // this needs a better comment about why this is needed
+      this.triggerReady();
+    }
+  };
+
+  /**
+   * Begin loading the src data.
+   *
+   * @return {Player} Returns the player
+   * @method load
+   */
+
+
+  Player.prototype.load = function load() {
+    this.techCall_('load');
+    return this;
+  };
+
+  /**
+   * Reset the player. Loads the first tech in the techOrder,
+   * and calls `reset` on the tech`.
+   *
+   * @return {Player} Returns the player
+   * @method reset
+   */
+
+
+  Player.prototype.reset = function reset() {
+    this.loadTech_((0, _toTitleCase2['default'])(this.options_.techOrder[0]), null);
+    this.techCall_('reset');
+    return this;
+  };
+
+  /**
+   * Returns the fully qualified URL of the current source value e.g. http://mysite.com/video.mp4
+   * Can be used in conjuction with `currentType` to assist in rebuilding the current source object.
+   *
+   * @return {String} The current source
+   * @method currentSrc
+   */
+
+
+  Player.prototype.currentSrc = function currentSrc() {
+    return this.techGet_('currentSrc') || this.cache_.src || '';
+  };
+
+  /**
+   * Get the current source type e.g. video/mp4
+   * This can allow you rebuild the current source object so that you could load the same
+   * source and tech later
+   *
+   * @return {String} The source MIME type
+   * @method currentType
+   */
+
+
+  Player.prototype.currentType = function currentType() {
+    return this.currentType_ || '';
+  };
+
+  /**
+   * Get or set the preload attribute
+   *
+   * @param {Boolean} value Boolean to determine if preload should be used
+   * @return {String} The preload attribute value when getting
+   * @return {Player} Returns the player when setting
+   * @method preload
+   */
+
+
+  Player.prototype.preload = function preload(value) {
+    if (value !== undefined) {
+      this.techCall_('setPreload', value);
+      this.options_.preload = value;
+      return this;
+    }
+    return this.techGet_('preload');
+  };
+
+  /**
+   * Get or set the autoplay attribute.
+   *
+   * @param {Boolean} value Boolean to determine if video should autoplay
+   * @return {String} The autoplay attribute value when getting
+   * @return {Player} Returns the player when setting
+   * @method autoplay
+   */
+
+
+  Player.prototype.autoplay = function autoplay(value) {
+    if (value !== undefined) {
+      this.techCall_('setAutoplay', value);
+      this.options_.autoplay = value;
+      return this;
+    }
+    return this.techGet_('autoplay', value);
+  };
+
+  /**
+   * Get or set the loop attribute on the video element.
+   *
+   * @param {Boolean} value Boolean to determine if video should loop
+   * @return {String} The loop attribute value when getting
+   * @return {Player} Returns the player when setting
+   * @method loop
+   */
+
+
+  Player.prototype.loop = function loop(value) {
+    if (value !== undefined) {
+      this.techCall_('setLoop', value);
+      this.options_.loop = value;
+      return this;
+    }
+    return this.techGet_('loop');
+  };
+
+  /**
+   * Get or set the poster image source url
+   *
+   * ##### EXAMPLE:
+   * ```js
+   *     // get
+   *     var currentPoster = myPlayer.poster();
+   *     // set
+   *     myPlayer.poster('http://example.com/myImage.jpg');
+   * ```
+   *
+   * @param  {String=} src Poster image source URL
+   * @return {String} poster URL when getting
+   * @return {Player} self when setting
+   * @method poster
+   */
+
+
+  Player.prototype.poster = function poster(src) {
+    if (src === undefined) {
+      return this.poster_;
+    }
+
+    // The correct way to remove a poster is to set as an empty string
+    // other falsey values will throw errors
+    if (!src) {
+      src = '';
+    }
+
+    // update the internal poster variable
+    this.poster_ = src;
+
+    // update the tech's poster
+    this.techCall_('setPoster', src);
+
+    // alert components that the poster has been set
+    this.trigger('posterchange');
+
+    return this;
+  };
+
+  /**
+   * Some techs (e.g. YouTube) can provide a poster source in an
+   * asynchronous way. We want the poster component to use this
+   * poster source so that it covers up the tech's controls.
+   * (YouTube's play button). However we only want to use this
+   * soruce if the player user hasn't set a poster through
+   * the normal APIs.
+   *
+   * @private
+   * @method handleTechPosterChange_
+   */
+
+
+  Player.prototype.handleTechPosterChange_ = function handleTechPosterChange_() {
+    if (!this.poster_ && this.tech_ && this.tech_.poster) {
+      this.poster_ = this.tech_.poster() || '';
+
+      // Let components know the poster has changed
+      this.trigger('posterchange');
+    }
+  };
+
+  /**
+   * Get or set whether or not the controls are showing.
+   *
+   * @param  {Boolean} bool Set controls to showing or not
+   * @return {Boolean}    Controls are showing
+   * @method controls
+   */
+
+
+  Player.prototype.controls = function controls(bool) {
+    if (bool !== undefined) {
+      bool = !!bool;
+
+      // Don't trigger a change event unless it actually changed
+      if (this.controls_ !== bool) {
+        this.controls_ = bool;
+
+        if (this.usingNativeControls()) {
+          this.techCall_('setControls', bool);
+        }
+
+        if (bool) {
+          this.removeClass('vjs-controls-disabled');
+          this.addClass('vjs-controls-enabled');
+          this.trigger('controlsenabled');
+
+          if (!this.usingNativeControls()) {
+            this.addTechControlsListeners_();
+          }
+        } else {
+          this.removeClass('vjs-controls-enabled');
+          this.addClass('vjs-controls-disabled');
+          this.trigger('controlsdisabled');
+
+          if (!this.usingNativeControls()) {
+            this.removeTechControlsListeners_();
+          }
+        }
+      }
+      return this;
+    }
+    return !!this.controls_;
+  };
+
+  /**
+   * Toggle native controls on/off. Native controls are the controls built into
+   * devices (e.g. default iPhone controls), Flash, or other techs
+   * (e.g. Vimeo Controls)
+   * **This should only be set by the current tech, because only the tech knows
+   * if it can support native controls**
+   *
+   * @param  {Boolean} bool    True signals that native controls are on
+   * @return {Player}      Returns the player
+   * @private
+   * @method usingNativeControls
+   */
+
+
+  Player.prototype.usingNativeControls = function usingNativeControls(bool) {
+    if (bool !== undefined) {
+      bool = !!bool;
+
+      // Don't trigger a change event unless it actually changed
+      if (this.usingNativeControls_ !== bool) {
+        this.usingNativeControls_ = bool;
+        if (bool) {
+          this.addClass('vjs-using-native-controls');
+
+          /**
+            * player is using the native device controls
+           *
+            * @event usingnativecontrols
+            * @memberof Player
+            * @instance
+            * @private
+            */
+          this.trigger('usingnativecontrols');
+        } else {
+          this.removeClass('vjs-using-native-controls');
+
+          /**
+            * player is using the custom HTML controls
+           *
+            * @event usingcustomcontrols
+            * @memberof Player
+            * @instance
+            * @private
+            */
+          this.trigger('usingcustomcontrols');
+        }
+      }
+      return this;
+    }
+    return !!this.usingNativeControls_;
+  };
+
+  /**
+   * Set or get the current MediaError
+   *
+   * @param  {*} err A MediaError or a String/Number to be turned into a MediaError
+   * @return {MediaError|null}     when getting
+   * @return {Player}              when setting
+   * @method error
+   */
+
+
+  Player.prototype.error = function error(err) {
+    if (err === undefined) {
+      return this.error_ || null;
+    }
+
+    // restoring to default
+    if (err === null) {
+      this.error_ = err;
+      this.removeClass('vjs-error');
+      if (this.errorDisplay) {
+        this.errorDisplay.close();
+      }
+      return this;
+    }
+
+    this.error_ = new _mediaError2['default'](err);
+
+    // add the vjs-error classname to the player
+    this.addClass('vjs-error');
+
+    // log the name of the error type and any message
+    // ie8 just logs "[object object]" if you just log the error object
+    _log2['default'].error('(CODE:' + this.error_.code + ' ' + _mediaError2['default'].errorTypes[this.error_.code] + ')', this.error_.message, this.error_);
+
+    // fire an error event on the player
+    this.trigger('error');
+
+    return this;
+  };
+
+  /**
+   * Returns whether or not the player is in the "ended" state.
+   *
+   * @return {Boolean} True if the player is in the ended state, false if not.
+   * @method ended
+   */
+
+
+  Player.prototype.ended = function ended() {
+    return this.techGet_('ended');
+  };
+
+  /**
+   * Returns whether or not the player is in the "seeking" state.
+   *
+   * @return {Boolean} True if the player is in the seeking state, false if not.
+   * @method seeking
+   */
+
+
+  Player.prototype.seeking = function seeking() {
+    return this.techGet_('seeking');
+  };
+
+  /**
+   * Returns the TimeRanges of the media that are currently available
+   * for seeking to.
+   *
+   * @return {TimeRanges} the seekable intervals of the media timeline
+   * @method seekable
+   */
+
+
+  Player.prototype.seekable = function seekable() {
+    return this.techGet_('seekable');
+  };
+
+  /**
+   * Report user activity
+   *
+   * @param {Object} event Event object
+   * @method reportUserActivity
+   */
+
+
+  Player.prototype.reportUserActivity = function reportUserActivity(event) {
+    this.userActivity_ = true;
+  };
+
+  /**
+   * Get/set if user is active
+   *
+   * @param {Boolean} bool Value when setting
+   * @return {Boolean} Value if user is active user when getting
+   * @method userActive
+   */
+
+
+  Player.prototype.userActive = function userActive(bool) {
+    if (bool !== undefined) {
+      bool = !!bool;
+      if (bool !== this.userActive_) {
+        this.userActive_ = bool;
+        if (bool) {
+          // If the user was inactive and is now active we want to reset the
+          // inactivity timer
+          this.userActivity_ = true;
+          this.removeClass('vjs-user-inactive');
+          this.addClass('vjs-user-active');
+          this.trigger('useractive');
+        } else {
+          // We're switching the state to inactive manually, so erase any other
+          // activity
+          this.userActivity_ = false;
+
+          // Chrome/Safari/IE have bugs where when you change the cursor it can
+          // trigger a mousemove event. This causes an issue when you're hiding
+          // the cursor when the user is inactive, and a mousemove signals user
+          // activity. Making it impossible to go into inactive mode. Specifically
+          // this happens in fullscreen when we really need to hide the cursor.
+          //
+          // When this gets resolved in ALL browsers it can be removed
+          // https://code.google.com/p/chromium/issues/detail?id=103041
+          if (this.tech_) {
+            this.tech_.one('mousemove', function (e) {
+              e.stopPropagation();
+              e.preventDefault();
+            });
+          }
+
+          this.removeClass('vjs-user-active');
+          this.addClass('vjs-user-inactive');
+          this.trigger('userinactive');
+        }
+      }
+      return this;
+    }
+    return this.userActive_;
+  };
+
+  /**
+   * Listen for user activity based on timeout value
+   *
+   * @private
+   * @method listenForUserActivity_
+   */
+
+
+  Player.prototype.listenForUserActivity_ = function listenForUserActivity_() {
+    var mouseInProgress = void 0;
+    var lastMoveX = void 0;
+    var lastMoveY = void 0;
+    var handleActivity = Fn.bind(this, this.reportUserActivity);
+
+    var handleMouseMove = function handleMouseMove(e) {
+      // #1068 - Prevent mousemove spamming
+      // Chrome Bug: https://code.google.com/p/chromium/issues/detail?id=366970
+      if (e.screenX !== lastMoveX || e.screenY !== lastMoveY) {
+        lastMoveX = e.screenX;
+        lastMoveY = e.screenY;
+        handleActivity();
+      }
+    };
+
+    var handleMouseDown = function handleMouseDown() {
+      handleActivity();
+      // For as long as the they are touching the device or have their mouse down,
+      // we consider them active even if they're not moving their finger or mouse.
+      // So we want to continue to update that they are active
+      this.clearInterval(mouseInProgress);
+      // Setting userActivity=true now and setting the interval to the same time
+      // as the activityCheck interval (250) should ensure we never miss the
+      // next activityCheck
+      mouseInProgress = this.setInterval(handleActivity, 250);
+    };
+
+    var handleMouseUp = function handleMouseUp(event) {
+      handleActivity();
+      // Stop the interval that maintains activity if the mouse/touch is down
+      this.clearInterval(mouseInProgress);
+    };
+
+    // Any mouse movement will be considered user activity
+    this.on('mousedown', handleMouseDown);
+    this.on('mousemove', handleMouseMove);
+    this.on('mouseup', handleMouseUp);
+
+    // Listen for keyboard navigation
+    // Shouldn't need to use inProgress interval because of key repeat
+    this.on('keydown', handleActivity);
+    this.on('keyup', handleActivity);
+
+    // Run an interval every 250 milliseconds instead of stuffing everything into
+    // the mousemove/touchmove function itself, to prevent performance degradation.
+    // `this.reportUserActivity` simply sets this.userActivity_ to true, which
+    // then gets picked up by this loop
+    // http://ejohn.org/blog/learning-from-twitter/
+    var inactivityTimeout = void 0;
+
+    this.setInterval(function () {
+      // Check to see if mouse/touch activity has happened
+      if (this.userActivity_) {
+        // Reset the activity tracker
+        this.userActivity_ = false;
+
+        // If the user state was inactive, set the state to active
+        this.userActive(true);
+
+        // Clear any existing inactivity timeout to start the timer over
+        this.clearTimeout(inactivityTimeout);
+
+        var timeout = this.options_.inactivityTimeout;
+
+        if (timeout > 0) {
+          // In <timeout> milliseconds, if no more activity has occurred the
+          // user will be considered inactive
+          inactivityTimeout = this.setTimeout(function () {
+            // Protect against the case where the inactivityTimeout can trigger just
+            // before the next user activity is picked up by the activity check loop
+            // causing a flicker
+            if (!this.userActivity_) {
+              this.userActive(false);
+            }
+          }, timeout);
+        }
+      }
+    }, 250);
+  };
+
+  /**
+   * Gets or sets the current playback rate.  A playback rate of
+   * 1.0 represents normal speed and 0.5 would indicate half-speed
+   * playback, for instance.
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate
+   *
+   * @param  {Number} rate    New playback rate to set.
+   * @return {Number}         Returns the new playback rate when setting
+   * @return {Number}         Returns the current playback rate when getting
+   * @method playbackRate
+   */
+
+
+  Player.prototype.playbackRate = function playbackRate(rate) {
+    if (rate !== undefined) {
+      this.techCall_('setPlaybackRate', rate);
+      return this;
+    }
+
+    if (this.tech_ && this.tech_.featuresPlaybackRate) {
+      return this.techGet_('playbackRate');
+    }
+    return 1.0;
+  };
+
+  /**
+   * Gets or sets the audio flag
+   *
+   * @param  {Boolean} bool    True signals that this is an audio player.
+   * @return {Boolean}         Returns true if player is audio, false if not when getting
+   * @return {Player}      Returns the player if setting
+   * @private
+   * @method isAudio
+   */
+
+
+  Player.prototype.isAudio = function isAudio(bool) {
+    if (bool !== undefined) {
+      this.isAudio_ = !!bool;
+      return this;
+    }
+
+    return !!this.isAudio_;
+  };
+
+  /**
+   * Returns the current state of network activity for the element, from
+   * the codes in the list below.
+   * - NETWORK_EMPTY (numeric value 0)
+   *   The element has not yet been initialised. All attributes are in
+   *   their initial states.
+   * - NETWORK_IDLE (numeric value 1)
+   *   The element's resource selection algorithm is active and has
+   *   selected a resource, but it is not actually using the network at
+   *   this time.
+   * - NETWORK_LOADING (numeric value 2)
+   *   The user agent is actively trying to download data.
+   * - NETWORK_NO_SOURCE (numeric value 3)
+   *   The element's resource selection algorithm is active, but it has
+   *   not yet found a resource to use.
+   *
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states
+   * @return {Number} the current network activity state
+   * @method networkState
+   */
+
+
+  Player.prototype.networkState = function networkState() {
+    return this.techGet_('networkState');
+  };
+
+  /**
+   * Returns a value that expresses the current state of the element
+   * with respect to rendering the current playback position, from the
+   * codes in the list below.
+   * - HAVE_NOTHING (numeric value 0)
+   *   No information regarding the media resource is available.
+   * - HAVE_METADATA (numeric value 1)
+   *   Enough of the resource has been obtained that the duration of the
+   *   resource is available.
+   * - HAVE_CURRENT_DATA (numeric value 2)
+   *   Data for the immediate current playback position is available.
+   * - HAVE_FUTURE_DATA (numeric value 3)
+   *   Data for the immediate current playback position is available, as
+   *   well as enough data for the user agent to advance the current
+   *   playback position in the direction of playback.
+   * - HAVE_ENOUGH_DATA (numeric value 4)
+   *   The user agent estimates that enough data is available for
+   *   playback to proceed uninterrupted.
+   *
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate
+   * @return {Number} the current playback rendering state
+   * @method readyState
+   */
+
+
+  Player.prototype.readyState = function readyState() {
+    return this.techGet_('readyState');
+  };
+
+  /**
+   * Get a video track list
+   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist
+   *
+   * @return {VideoTrackList} thes current video track list
+   * @method videoTracks
+   */
+
+
+  Player.prototype.videoTracks = function videoTracks() {
+    // if we have not yet loadTech_, we create videoTracks_
+    // these will be passed to the tech during loading
+    if (!this.tech_) {
+      this.videoTracks_ = this.videoTracks_ || new _videoTrackList2['default']();
+      return this.videoTracks_;
+    }
+
+    return this.tech_.videoTracks();
+  };
+
+  /**
+   * Get an audio track list
+   * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist
+   *
+   * @return {AudioTrackList} thes current audio track list
+   * @method audioTracks
+   */
+
+
+  Player.prototype.audioTracks = function audioTracks() {
+    // if we have not yet loadTech_, we create videoTracks_
+    // these will be passed to the tech during loading
+    if (!this.tech_) {
+      this.audioTracks_ = this.audioTracks_ || new _audioTrackList2['default']();
+      return this.audioTracks_;
+    }
+
+    return this.tech_.audioTracks();
+  };
+
+  /*
+    * Text tracks are tracks of timed text events.
+    * Captions - text displayed over the video for the hearing impaired
+    * Subtitles - text displayed over the video for those who don't understand language in the video
+    * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video
+    * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device
+    */
+
+  /**
+   * Get an array of associated text tracks. captions, subtitles, chapters, descriptions
+   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks
+   *
+   * @return {Array}           Array of track objects
+   * @method textTracks
+   */
+
+
+  Player.prototype.textTracks = function textTracks() {
+    // cannot use techGet_ directly because it checks to see whether the tech is ready.
+    // Flash is unlikely to be ready in time but textTracks should still work.
+    if (this.tech_) {
+      return this.tech_.textTracks();
+    }
+  };
+
+  /**
+   * Get an array of remote text tracks
+   *
+   * @return {Array}
+   * @method remoteTextTracks
+   */
+
+
+  Player.prototype.remoteTextTracks = function remoteTextTracks() {
+    if (this.tech_) {
+      return this.tech_.remoteTextTracks();
+    }
+  };
+
+  /**
+   * Get an array of remote html track elements
+   *
+   * @return {HTMLTrackElement[]}
+   * @method remoteTextTrackEls
+   */
+
+
+  Player.prototype.remoteTextTrackEls = function remoteTextTrackEls() {
+    if (this.tech_) {
+      return this.tech_.remoteTextTrackEls();
+    }
+  };
+
+  /**
+   * Add a text track
+   * In addition to the W3C settings we allow adding additional info through options.
+   * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack
+   *
+   * @param {String}  kind        Captions, subtitles, chapters, descriptions, or metadata
+   * @param {String=} label       Optional label
+   * @param {String=} language    Optional language
+   * @method addTextTrack
+   */
+
+
+  Player.prototype.addTextTrack = function addTextTrack(kind, label, language) {
+    if (this.tech_) {
+      return this.tech_.addTextTrack(kind, label, language);
+    }
+  };
+
+  /**
+   * Add a remote text track
+   *
+   * @param {Object} options    Options for remote text track
+   * @method addRemoteTextTrack
+   */
+
+
+  Player.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) {
+    if (this.tech_) {
+      return this.tech_.addRemoteTextTrack(options);
+    }
+  };
+
+  /**
+   * Remove a remote text track
+   *
+   * @param {Object} track    Remote text track to remove
+   * @method removeRemoteTextTrack
+   */
+  // destructure the input into an object with a track argument, defaulting to arguments[0]
+  // default the whole argument to an empty object if nothing was passed in
+
+
+  Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack() {
+    var _ref3 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    var _ref3$track = _ref3.track;
+    var track = _ref3$track === undefined ? arguments[0] : _ref3$track;
+
+    if (this.tech_) {
+      return this.tech_.removeRemoteTextTrack(track);
+    }
+  };
+
+  /**
+   * Get video width
+   *
+   * @return {Number} Video width
+   * @method videoWidth
+   */
+
+
+  Player.prototype.videoWidth = function videoWidth() {
+    return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;
+  };
+
+  /**
+   * Get video height
+   *
+   * @return {Number} Video height
+   * @method videoHeight
+   */
+
+
+  Player.prototype.videoHeight = function videoHeight() {
+    return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;
+  };
+
+  // Methods to add support for
+  // initialTime: function() { return this.techCall_('initialTime'); },
+  // startOffsetTime: function() { return this.techCall_('startOffsetTime'); },
+  // played: function() { return this.techCall_('played'); },
+  // defaultPlaybackRate: function() { return this.techCall_('defaultPlaybackRate'); },
+  // defaultMuted: function() { return this.techCall_('defaultMuted'); }
+
+  /**
+   * The player's language code
+   * NOTE: The language should be set in the player options if you want the
+   * the controls to be built with a specific language. Changing the lanugage
+   * later will not update controls text.
+   *
+   * @param {String} code  The locale string
+   * @return {String}      The locale string when getting
+   * @return {Player}      self when setting
+   * @method language
+   */
+
+
+  Player.prototype.language = function language(code) {
+    if (code === undefined) {
+      return this.language_;
+    }
+
+    this.language_ = String(code).toLowerCase();
+    return this;
+  };
+
+  /**
+   * Get the player's language dictionary
+   * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time
+   * Languages specified directly in the player options have precedence
+   *
+   * @return {Array} Array of languages
+   * @method languages
+   */
+
+
+  Player.prototype.languages = function languages() {
+    return (0, _mergeOptions2['default'])(Player.prototype.options_.languages, this.languages_);
+  };
+
+  /**
+   * Converts track info to JSON
+   *
+   * @return {Object} JSON object of options
+   * @method toJSON
+   */
+
+
+  Player.prototype.toJSON = function toJSON() {
+    var options = (0, _mergeOptions2['default'])(this.options_);
+    var tracks = options.tracks;
+
+    options.tracks = [];
+
+    for (var i = 0; i < tracks.length; i++) {
+      var track = tracks[i];
+
+      // deep merge tracks and null out player so no circular references
+      track = (0, _mergeOptions2['default'])(track);
+      track.player = undefined;
+      options.tracks[i] = track;
+    }
+
+    return options;
+  };
+
+  /**
+   * Creates a simple modal dialog (an instance of the `ModalDialog`
+   * component) that immediately overlays the player with arbitrary
+   * content and removes itself when closed.
+   *
+   * @param {String|Function|Element|Array|Null} content
+   *        Same as `ModalDialog#content`'s param of the same name.
+   *
+   *        The most straight-forward usage is to provide a string or DOM
+   *        element.
+   *
+   * @param {Object} [options]
+   *        Extra options which will be passed on to the `ModalDialog`.
+   *
+   * @return {ModalDialog}
+   */
+
+
+  Player.prototype.createModal = function createModal(content, options) {
+    var _this4 = this;
+
+    options = options || {};
+    options.content = content || '';
+
+    var modal = new _modalDialog2['default'](this, options);
+
+    this.addChild(modal);
+    modal.on('dispose', function () {
+      _this4.removeChild(modal);
+    });
+
+    return modal.open();
+  };
+
+  /**
+   * Gets tag settings
+   *
+   * @param {Element} tag The player tag
+   * @return {Array} An array of sources and track objects
+   * @static
+   * @method getTagSettings
+   */
+
+
+  Player.getTagSettings = function getTagSettings(tag) {
+    var baseOptions = {
+      sources: [],
+      tracks: []
+    };
+
+    var tagOptions = Dom.getElAttributes(tag);
+    var dataSetup = tagOptions['data-setup'];
+
+    // Check if data-setup attr exists.
+    if (dataSetup !== null) {
+      // Parse options JSON
+      // If empty string, make it a parsable json object.
+      var _safeParseTuple = (0, _tuple2['default'])(dataSetup || '{}');
+
+      var err = _safeParseTuple[0];
+      var data = _safeParseTuple[1];
+
+
+      if (err) {
+        _log2['default'].error(err);
+      }
+      (0, _object2['default'])(tagOptions, data);
+    }
+
+    (0, _object2['default'])(baseOptions, tagOptions);
+
+    // Get tag children settings
+    if (tag.hasChildNodes()) {
+      var children = tag.childNodes;
+
+      for (var i = 0, j = children.length; i < j; i++) {
+        var child = children[i];
+        // Change case needed: http://ejohn.org/blog/nodename-case-sensitivity/
+        var childName = child.nodeName.toLowerCase();
+
+        if (childName === 'source') {
+          baseOptions.sources.push(Dom.getElAttributes(child));
+        } else if (childName === 'track') {
+          baseOptions.tracks.push(Dom.getElAttributes(child));
+        }
+      }
+    }
+
+    return baseOptions;
+  };
+
+  return Player;
+}(_component2['default']);
+
+/*
+ * Global player list
+ *
+ * @type {Object}
+ */
+
+
+Player.players = {};
+
+var navigator = _window2['default'].navigator;
+
+/*
+ * Player instance options, surfaced using options
+ * options = Player.prototype.options_
+ * Make changes in options, not here.
+ *
+ * @type {Object}
+ * @private
+ */
+Player.prototype.options_ = {
+  // Default order of fallback technology
+  techOrder: ['html5', 'flash'],
+  // techOrder: ['flash','html5'],
+
+  html5: {},
+  flash: {},
+
+  // defaultVolume: 0.85,
+  defaultVolume: 0.00,
+
+  // default inactivity timeout
+  inactivityTimeout: 2000,
+
+  // default playback rates
+  playbackRates: [],
+  // Add playback rate selection by adding rates
+  // 'playbackRates': [0.5, 1, 1.5, 2],
+
+  // Included control sets
+  children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'controlBar', 'errorDisplay', 'textTrackSettings'],
+
+  language: navigator && (navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language) || 'en',
+
+  // locales and their language translations
+  languages: {},
+
+  // Default message to show when a video cannot be played.
+  notSupportedMessage: 'No compatible source was found for this media.'
+};
+
+// The following no-op expressions are here only for purposes of documentation.
+
+/**
+ * Fired when the user agent begins looking for media data
+ *
+ * @event loadstart
+ */
+Player.prototype.handleTechLoadStart_; // eslint-disable-line
+
+/**
+ * Fired when the player has initial duration and dimension information
+ *
+ * @event loadedmetadata
+ */
+Player.prototype.handleLoadedMetaData_; // eslint-disable-line
+
+/**
+ * Fired when the player receives text data
+ *
+ * @event textdata
+ */
+Player.prototype.handleTextData_; // eslint-disable-line
+
+/**
+ * Fired when the player has downloaded data at the current playback position
+ *
+ * @event loadeddata
+ */
+Player.prototype.handleLoadedData_; // eslint-disable-line
+
+/**
+ * Fired when the user is active, e.g. moves the mouse over the player
+ *
+ * @event useractive
+ */
+Player.prototype.handleUserActive_; // eslint-disable-line
+
+/**
+ * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction
+ *
+ * @event userinactive
+ */
+Player.prototype.handleUserInactive_; // eslint-disable-line
+
+/**
+ * Fired when the current playback position has changed *
+ * During playback this is fired every 15-250 milliseconds, depending on the
+ * playback technology in use.
+ *
+ * @event timeupdate
+ */
+Player.prototype.handleTimeUpdate_; // eslint-disable-line
+
+/**
+ * Fired when video playback ends
+ *
+ * @event ended
+ */
+Player.prototype.handleTechEnded_; // eslint-disable-line
+
+/**
+ * Fired when the volume changes
+ *
+ * @event volumechange
+ */
+Player.prototype.handleVolumeChange_; // eslint-disable-line
+
+/**
+ * Fired when an error occurs
+ *
+ * @event error
+ */
+Player.prototype.handleError_; // eslint-disable-line
+
+Player.prototype.flexNotSupported_ = function () {
+  var elem = _document2['default'].createElement('i');
+
+  // Note: We don't actually use flexBasis (or flexOrder), but it's one of the more
+  // common flex features that we can rely on when checking for flex support.
+  return !('flexBasis' in elem.style || 'webkitFlexBasis' in elem.style || 'mozFlexBasis' in elem.style || 'msFlexBasis' in elem.style ||
+  // IE10-specific (2012 flex spec)
+  'msFlexOrder' in elem.style);
+};
+
+_component2['default'].registerComponent('Player', Player);
+exports['default'] = Player;
+
+},{"./big-play-button.js":1,"./close-button.js":4,"./component.js":5,"./control-bar/control-bar.js":8,"./error-display.js":41,"./fullscreen-api.js":44,"./loading-spinner.js":45,"./media-error.js":46,"./modal-dialog":50,"./poster-image.js":55,"./tech/flash.js":59,"./tech/html5.js":60,"./tech/loader.js":61,"./tech/tech.js":62,"./tracks/audio-track-list.js":63,"./tracks/text-track-display.js":68,"./tracks/text-track-list-converter.js":69,"./tracks/text-track-settings.js":71,"./tracks/video-track-list.js":76,"./utils/browser.js":78,"./utils/buffer.js":79,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/to-title-case.js":89,"global/document":92,"global/window":93,"object.assign":136,"safe-json-parse/tuple":145}],52:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _player = _dereq_('./player.js');
+
+var _player2 = _interopRequireDefault(_player);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * The method for registering a video.js plugin
+ *
+ * @param  {String} name The name of the plugin
+ * @param  {Function} init The function that is run when the player inits
+ * @method plugin
+ */
+var plugin = function plugin(name, init) {
+  _player2['default'].prototype[name] = init;
+}; /**
+    * @file plugins.js
+    */
+exports['default'] = plugin;
+
+},{"./player.js":51}],53:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('../clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file popup-button.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A button class with a popup control
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends ClickableComponent
+ * @class PopupButton
+ */
+var PopupButton = function (_ClickableComponent) {
+  _inherits(PopupButton, _ClickableComponent);
+
+  function PopupButton(player) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    _classCallCheck(this, PopupButton);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.update();
+    return _this;
+  }
+
+  /**
+   * Update popup
+   *
+   * @method update
+   */
+
+
+  PopupButton.prototype.update = function update() {
+    var popup = this.createPopup();
+
+    if (this.popup) {
+      this.removeChild(this.popup);
+    }
+
+    this.popup = popup;
+    this.addChild(popup);
+
+    if (this.items && this.items.length === 0) {
+      this.hide();
+    } else if (this.items && this.items.length > 1) {
+      this.show();
+    }
+  };
+
+  /**
+   * Create popup - Override with specific functionality for component
+   *
+   * @return {Popup} The constructed popup
+   * @method createPopup
+   */
+
+
+  PopupButton.prototype.createPopup = function createPopup() {};
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PopupButton.prototype.createEl = function createEl() {
+    return _ClickableComponent.prototype.createEl.call(this, 'div', {
+      className: this.buildCSSClass()
+    });
+  };
+
+  /**
+   * Allow sub components to stack CSS class names
+   *
+   * @return {String} The constructed class name
+   * @method buildCSSClass
+   */
+
+
+  PopupButton.prototype.buildCSSClass = function buildCSSClass() {
+    var menuButtonClass = 'vjs-menu-button';
+
+    // If the inline option is passed, we want to use different styles altogether.
+    if (this.options_.inline === true) {
+      menuButtonClass += '-inline';
+    } else {
+      menuButtonClass += '-popup';
+    }
+
+    return 'vjs-menu-button ' + menuButtonClass + ' ' + _ClickableComponent.prototype.buildCSSClass.call(this);
+  };
+
+  return PopupButton;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('PopupButton', PopupButton);
+exports['default'] = PopupButton;
+
+},{"../clickable-component.js":3,"../component.js":5}],54:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _events = _dereq_('../utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file popup.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Popup component is used to build pop up controls.
+ *
+ * @extends Component
+ * @class Popup
+ */
+var Popup = function (_Component) {
+  _inherits(Popup, _Component);
+
+  function Popup() {
+    _classCallCheck(this, Popup);
+
+    return _possibleConstructorReturn(this, _Component.apply(this, arguments));
+  }
+
+  /**
+   * Add a popup item to the popup
+   *
+   * @param {Object|String} component Component or component type to add
+   * @method addItem
+   */
+  Popup.prototype.addItem = function addItem(component) {
+    this.addChild(component);
+    component.on('click', Fn.bind(this, function () {
+      this.unlockShowing();
+    }));
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Popup.prototype.createEl = function createEl() {
+    var contentElType = this.options_.contentElType || 'ul';
+
+    this.contentEl_ = Dom.createEl(contentElType, {
+      className: 'vjs-menu-content'
+    });
+
+    var el = _Component.prototype.createEl.call(this, 'div', {
+      append: this.contentEl_,
+      className: 'vjs-menu'
+    });
+
+    el.appendChild(this.contentEl_);
+
+    // Prevent clicks from bubbling up. Needed for Popup Buttons,
+    // where a click on the parent is significant
+    Events.on(el, 'click', function (event) {
+      event.preventDefault();
+      event.stopImmediatePropagation();
+    });
+
+    return el;
+  };
+
+  return Popup;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Popup', Popup);
+exports['default'] = Popup;
+
+},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],55:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _clickableComponent = _dereq_('./clickable-component.js');
+
+var _clickableComponent2 = _interopRequireDefault(_clickableComponent);
+
+var _component = _dereq_('./component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _browser = _dereq_('./utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file poster-image.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The component that handles showing the poster image.
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Button
+ * @class PosterImage
+ */
+var PosterImage = function (_ClickableComponent) {
+  _inherits(PosterImage, _ClickableComponent);
+
+  function PosterImage(player, options) {
+    _classCallCheck(this, PosterImage);
+
+    var _this = _possibleConstructorReturn(this, _ClickableComponent.call(this, player, options));
+
+    _this.update();
+    player.on('posterchange', Fn.bind(_this, _this.update));
+    return _this;
+  }
+
+  /**
+   * Clean up the poster image
+   *
+   * @method dispose
+   */
+
+
+  PosterImage.prototype.dispose = function dispose() {
+    this.player().off('posterchange', this.update);
+    _ClickableComponent.prototype.dispose.call(this);
+  };
+
+  /**
+   * Create the poster's image element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  PosterImage.prototype.createEl = function createEl() {
+    var el = Dom.createEl('div', {
+      className: 'vjs-poster',
+
+      // Don't want poster to be tabbable.
+      tabIndex: -1
+    });
+
+    // To ensure the poster image resizes while maintaining its original aspect
+    // ratio, use a div with `background-size` when available. For browsers that
+    // do not support `background-size` (e.g. IE8), fall back on using a regular
+    // img element.
+    if (!browser.BACKGROUND_SIZE_SUPPORTED) {
+      this.fallbackImg_ = Dom.createEl('img');
+      el.appendChild(this.fallbackImg_);
+    }
+
+    return el;
+  };
+
+  /**
+   * Event handler for updates to the player's poster source
+   *
+   * @method update
+   */
+
+
+  PosterImage.prototype.update = function update() {
+    var url = this.player().poster();
+
+    this.setSrc(url);
+
+    // If there's no poster source we should display:none on this component
+    // so it's not still clickable or right-clickable
+    if (url) {
+      this.show();
+    } else {
+      this.hide();
+    }
+  };
+
+  /**
+   * Set the poster source depending on the display method
+   *
+   * @param {String} url The URL to the poster source
+   * @method setSrc
+   */
+
+
+  PosterImage.prototype.setSrc = function setSrc(url) {
+    if (this.fallbackImg_) {
+      this.fallbackImg_.src = url;
+    } else {
+      var backgroundImage = '';
+
+      // Any falsey values should stay as an empty string, otherwise
+      // this will throw an extra error
+      if (url) {
+        backgroundImage = 'url("' + url + '")';
+      }
+
+      this.el_.style.backgroundImage = backgroundImage;
+    }
+  };
+
+  /**
+   * Event handler for clicks on the poster image
+   *
+   * @method handleClick
+   */
+
+
+  PosterImage.prototype.handleClick = function handleClick() {
+    // We don't want a click to trigger playback when controls are disabled
+    // but CSS should be hiding the poster to prevent that from happening
+    if (this.player_.paused()) {
+      this.player_.play();
+    } else {
+      this.player_.pause();
+    }
+  };
+
+  return PosterImage;
+}(_clickableComponent2['default']);
+
+_component2['default'].registerComponent('PosterImage', PosterImage);
+exports['default'] = PosterImage;
+
+},{"./clickable-component.js":3,"./component.js":5,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/fn.js":82}],56:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.hasLoaded = exports.autoSetupTimeout = exports.autoSetup = undefined;
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+var _windowLoaded = false; /**
+                            * @file setup.js
+                            *
+                            * Functions for automatically setting up a player
+                            * based on the data-setup attribute of the video tag
+                            */
+
+var videojs = void 0;
+
+// Automatically set up any tags that have a data-setup attribute
+var autoSetup = function autoSetup() {
+  // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*
+  // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));
+  // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));
+  // var mediaEls = vids.concat(audios);
+
+  // Because IE8 doesn't support calling slice on a node list, we need to loop
+  // through each list of elements to build up a new, combined list of elements.
+  var vids = _document2['default'].getElementsByTagName('video');
+  var audios = _document2['default'].getElementsByTagName('audio');
+  var mediaEls = [];
+
+  if (vids && vids.length > 0) {
+    for (var i = 0, e = vids.length; i < e; i++) {
+      mediaEls.push(vids[i]);
+    }
+  }
+
+  if (audios && audios.length > 0) {
+    for (var _i = 0, _e = audios.length; _i < _e; _i++) {
+      mediaEls.push(audios[_i]);
+    }
+  }
+
+  // Check if any media elements exist
+  if (mediaEls && mediaEls.length > 0) {
+
+    for (var _i2 = 0, _e2 = mediaEls.length; _i2 < _e2; _i2++) {
+      var mediaEl = mediaEls[_i2];
+
+      // Check if element exists, has getAttribute func.
+      // IE seems to consider typeof el.getAttribute == 'object' instead of
+      // 'function' like expected, at least when loading the player immediately.
+      if (mediaEl && mediaEl.getAttribute) {
+
+        // Make sure this player hasn't already been set up.
+        if (mediaEl.player === undefined) {
+          var options = mediaEl.getAttribute('data-setup');
+
+          // Check if data-setup attr exists.
+          // We only auto-setup if they've added the data-setup attr.
+          if (options !== null) {
+            // Create new video.js instance.
+            videojs(mediaEl);
+          }
+        }
+
+        // If getAttribute isn't defined, we need to wait for the DOM.
+      } else {
+        autoSetupTimeout(1);
+        break;
+      }
+    }
+
+    // No videos were found, so keep looping unless page is finished loading.
+  } else if (!_windowLoaded) {
+    autoSetupTimeout(1);
+  }
+};
+
+// Pause to let the DOM keep processing
+function autoSetupTimeout(wait, vjs) {
+  if (vjs) {
+    videojs = vjs;
+  }
+
+  setTimeout(autoSetup, wait);
+}
+
+if (_document2['default'].readyState === 'complete') {
+  _windowLoaded = true;
+} else {
+  Events.one(_window2['default'], 'load', function () {
+    _windowLoaded = true;
+  });
+}
+
+var hasLoaded = function hasLoaded() {
+  return _windowLoaded;
+};
+
+exports.autoSetup = autoSetup;
+exports.autoSetupTimeout = autoSetupTimeout;
+exports.hasLoaded = hasLoaded;
+
+},{"./utils/events.js":81,"global/document":92,"global/window":93}],57:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file slider.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The base functionality for sliders like the volume bar and seek bar
+ *
+ * @param {Player|Object} player
+ * @param {Object=} options
+ * @extends Component
+ * @class Slider
+ */
+var Slider = function (_Component) {
+  _inherits(Slider, _Component);
+
+  function Slider(player, options) {
+    _classCallCheck(this, Slider);
+
+    // Set property names to bar to match with the child Slider class is looking for
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.bar = _this.getChild(_this.options_.barName);
+
+    // Set a horizontal or vertical class on the slider depending on the slider type
+    _this.vertical(!!_this.options_.vertical);
+
+    _this.on('mousedown', _this.handleMouseDown);
+    _this.on('touchstart', _this.handleMouseDown);
+    _this.on('focus', _this.handleFocus);
+    _this.on('blur', _this.handleBlur);
+    _this.on('click', _this.handleClick);
+
+    _this.on(player, 'controlsvisible', _this.update);
+    _this.on(player, _this.playerEvent, _this.update);
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @param {String} type Type of element to create
+   * @param {Object=} props List of properties in Object form
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Slider.prototype.createEl = function createEl(type) {
+    var props = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+    var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+    // Add the slider element class to all sub classes
+    props.className = props.className + ' vjs-slider';
+    props = (0, _object2['default'])({
+      tabIndex: 0
+    }, props);
+
+    attributes = (0, _object2['default'])({
+      'role': 'slider',
+      'aria-valuenow': 0,
+      'aria-valuemin': 0,
+      'aria-valuemax': 100,
+      'tabIndex': 0
+    }, attributes);
+
+    return _Component.prototype.createEl.call(this, type, props, attributes);
+  };
+
+  /**
+   * Handle mouse down on slider
+   *
+   * @param {Object} event Mouse down event object
+   * @method handleMouseDown
+   */
+
+
+  Slider.prototype.handleMouseDown = function handleMouseDown(event) {
+    var doc = this.bar.el_.ownerDocument;
+
+    event.preventDefault();
+    Dom.blockTextSelection();
+
+    this.addClass('vjs-sliding');
+    this.trigger('slideractive');
+
+    this.on(doc, 'mousemove', this.handleMouseMove);
+    this.on(doc, 'mouseup', this.handleMouseUp);
+    this.on(doc, 'touchmove', this.handleMouseMove);
+    this.on(doc, 'touchend', this.handleMouseUp);
+
+    this.handleMouseMove(event);
+  };
+
+  /**
+   * To be overridden by a subclass
+   *
+   * @method handleMouseMove
+   */
+
+
+  Slider.prototype.handleMouseMove = function handleMouseMove() {};
+
+  /**
+   * Handle mouse up on Slider
+   *
+   * @method handleMouseUp
+   */
+
+
+  Slider.prototype.handleMouseUp = function handleMouseUp() {
+    var doc = this.bar.el_.ownerDocument;
+
+    Dom.unblockTextSelection();
+
+    this.removeClass('vjs-sliding');
+    this.trigger('sliderinactive');
+
+    this.off(doc, 'mousemove', this.handleMouseMove);
+    this.off(doc, 'mouseup', this.handleMouseUp);
+    this.off(doc, 'touchmove', this.handleMouseMove);
+    this.off(doc, 'touchend', this.handleMouseUp);
+
+    this.update();
+  };
+
+  /**
+   * Update slider
+   *
+   * @method update
+   */
+
+
+  Slider.prototype.update = function update() {
+    // In VolumeBar init we have a setTimeout for update that pops and update to the end of the
+    // execution stack. The player is destroyed before then update will cause an error
+    if (!this.el_) {
+      return;
+    }
+
+    // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.
+    // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.
+    // var progress =  (this.player_.scrubbing()) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();
+    var progress = this.getPercent();
+    var bar = this.bar;
+
+    // If there's no bar...
+    if (!bar) {
+      return;
+    }
+
+    // Protect against no duration and other division issues
+    if (typeof progress !== 'number' || progress !== progress || progress < 0 || progress === Infinity) {
+      progress = 0;
+    }
+
+    // Convert to a percentage for setting
+    var percentage = (progress * 100).toFixed(2) + '%';
+
+    // Set the new bar width or height
+    if (this.vertical()) {
+      bar.el().style.height = percentage;
+    } else {
+      bar.el().style.width = percentage;
+    }
+  };
+
+  /**
+   * Calculate distance for slider
+   *
+   * @param {Object} event Event object
+   * @method calculateDistance
+   */
+
+
+  Slider.prototype.calculateDistance = function calculateDistance(event) {
+    var position = Dom.getPointerPosition(this.el_, event);
+
+    if (this.vertical()) {
+      return position.y;
+    }
+    return position.x;
+  };
+
+  /**
+   * Handle on focus for slider
+   *
+   * @method handleFocus
+   */
+
+
+  Slider.prototype.handleFocus = function handleFocus() {
+    this.on(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);
+  };
+
+  /**
+   * Handle key press for slider
+   *
+   * @param {Object} event Event object
+   * @method handleKeyPress
+   */
+
+
+  Slider.prototype.handleKeyPress = function handleKeyPress(event) {
+    // Left and Down Arrows
+    if (event.which === 37 || event.which === 40) {
+      event.preventDefault();
+      this.stepBack();
+
+      // Up and Right Arrows
+    } else if (event.which === 38 || event.which === 39) {
+      event.preventDefault();
+      this.stepForward();
+    }
+  };
+
+  /**
+   * Handle on blur for slider
+   *
+   * @method handleBlur
+   */
+
+
+  Slider.prototype.handleBlur = function handleBlur() {
+    this.off(this.bar.el_.ownerDocument, 'keydown', this.handleKeyPress);
+  };
+
+  /**
+   * Listener for click events on slider, used to prevent clicks
+   *   from bubbling up to parent elements like button menus.
+   *
+   * @param {Object} event Event object
+   * @method handleClick
+   */
+
+
+  Slider.prototype.handleClick = function handleClick(event) {
+    event.stopImmediatePropagation();
+    event.preventDefault();
+  };
+
+  /**
+   * Get/set if slider is horizontal for vertical
+   *
+   * @param {Boolean} bool True if slider is vertical, false is horizontal
+   * @return {Boolean} True if slider is vertical, false is horizontal
+   * @method vertical
+   */
+
+
+  Slider.prototype.vertical = function vertical(bool) {
+    if (bool === undefined) {
+      return this.vertical_ || false;
+    }
+
+    this.vertical_ = !!bool;
+
+    if (this.vertical_) {
+      this.addClass('vjs-slider-vertical');
+    } else {
+      this.addClass('vjs-slider-horizontal');
+    }
+
+    return this;
+  };
+
+  return Slider;
+}(_component2['default']);
+
+_component2['default'].registerComponent('Slider', Slider);
+exports['default'] = Slider;
+
+},{"../component.js":5,"../utils/dom.js":80,"object.assign":136}],58:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * @file flash-rtmp.js
+ */
+function FlashRtmpDecorator(Flash) {
+  Flash.streamingFormats = {
+    'rtmp/mp4': 'MP4',
+    'rtmp/flv': 'FLV'
+  };
+
+  Flash.streamFromParts = function (connection, stream) {
+    return connection + '&' + stream;
+  };
+
+  Flash.streamToParts = function (src) {
+    var parts = {
+      connection: '',
+      stream: ''
+    };
+
+    if (!src) {
+      return parts;
+    }
+
+    // Look for the normal URL separator we expect, '&'.
+    // If found, we split the URL into two pieces around the
+    // first '&'.
+    var connEnd = src.search(/&(?!\w+=)/);
+    var streamBegin = void 0;
+
+    if (connEnd !== -1) {
+      streamBegin = connEnd + 1;
+    } else {
+      // If there's not a '&', we use the last '/' as the delimiter.
+      connEnd = streamBegin = src.lastIndexOf('/') + 1;
+      if (connEnd === 0) {
+        // really, there's not a '/'?
+        connEnd = streamBegin = src.length;
+      }
+    }
+
+    parts.connection = src.substring(0, connEnd);
+    parts.stream = src.substring(streamBegin, src.length);
+
+    return parts;
+  };
+
+  Flash.isStreamingType = function (srcType) {
+    return srcType in Flash.streamingFormats;
+  };
+
+  // RTMP has four variations, any string starting
+  // with one of these protocols should be valid
+  Flash.RTMP_RE = /^rtmp[set]?:\/\//i;
+
+  Flash.isStreamingSrc = function (src) {
+    return Flash.RTMP_RE.test(src);
+  };
+
+  /**
+   * A source handler for RTMP urls
+   * @type {Object}
+   */
+  Flash.rtmpSourceHandler = {};
+
+  /**
+   * Check if Flash can play the given videotype
+   * @param  {String} type    The mimetype to check
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  Flash.rtmpSourceHandler.canPlayType = function (type) {
+    if (Flash.isStreamingType(type)) {
+      return 'maybe';
+    }
+
+    return '';
+  };
+
+  /**
+   * Check if Flash can handle the source natively
+   * @param  {Object} source  The source object
+   * @param  {Object} options The options passed to the tech
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  Flash.rtmpSourceHandler.canHandleSource = function (source, options) {
+    var can = Flash.rtmpSourceHandler.canPlayType(source.type);
+
+    if (can) {
+      return can;
+    }
+
+    if (Flash.isStreamingSrc(source.src)) {
+      return 'maybe';
+    }
+
+    return '';
+  };
+
+  /**
+   * Pass the source to the flash object
+   * Adaptive source handlers will have more complicated workflows before passing
+   * video data to the video element
+   * @param  {Object} source   The source object
+   * @param  {Flash}  tech     The instance of the Flash tech
+   * @param  {Object} options  The options to pass to the source
+   */
+  Flash.rtmpSourceHandler.handleSource = function (source, tech, options) {
+    var srcParts = Flash.streamToParts(source.src);
+
+    tech.setRtmpConnection(srcParts.connection);
+    tech.setRtmpStream(srcParts.stream);
+  };
+
+  // Register the native source handler
+  Flash.registerSourceHandler(Flash.rtmpSourceHandler);
+
+  return Flash;
+}
+
+exports['default'] = FlashRtmpDecorator;
+
+},{}],59:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _tech = _dereq_('./tech');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _url = _dereq_('../utils/url.js');
+
+var Url = _interopRequireWildcard(_url);
+
+var _timeRanges = _dereq_('../utils/time-ranges.js');
+
+var _flashRtmp = _dereq_('./flash-rtmp');
+
+var _flashRtmp2 = _interopRequireDefault(_flashRtmp);
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file flash.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * VideoJS-SWF - Custom Flash Player with HTML5-ish API
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * https://github.com/zencoder/video-js-swf
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Not using setupTriggers. Using global onEvent func to distribute events
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var navigator = _window2['default'].navigator;
+
+/**
+ * Flash Media Controller - Wrapper for fallback SWF API
+ *
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready Ready callback function
+ * @extends Tech
+ * @class Flash
+ */
+
+var Flash = function (_Tech) {
+  _inherits(Flash, _Tech);
+
+  function Flash(options, ready) {
+    _classCallCheck(this, Flash);
+
+    // Set the source when ready
+    var _this = _possibleConstructorReturn(this, _Tech.call(this, options, ready));
+
+    if (options.source) {
+      _this.ready(function () {
+        this.setSource(options.source);
+      }, true);
+    }
+
+    // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers
+    // This allows resetting the playhead when we catch the reload
+    if (options.startTime) {
+      _this.ready(function () {
+        this.load();
+        this.play();
+        this.currentTime(options.startTime);
+      }, true);
+    }
+
+    // Add global window functions that the swf expects
+    // A 4.x workflow we weren't able to solve for in 5.0
+    // because of the need to hard code these functions
+    // into the swf for security reasons
+    _window2['default'].videojs = _window2['default'].videojs || {};
+    _window2['default'].videojs.Flash = _window2['default'].videojs.Flash || {};
+    _window2['default'].videojs.Flash.onReady = Flash.onReady;
+    _window2['default'].videojs.Flash.onEvent = Flash.onEvent;
+    _window2['default'].videojs.Flash.onError = Flash.onError;
+
+    _this.on('seeked', function () {
+      this.lastSeekTarget_ = undefined;
+    });
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Flash.prototype.createEl = function createEl() {
+    var options = this.options_;
+
+    // If video.js is hosted locally you should also set the location
+    // for the hosted swf, which should be relative to the page (not video.js)
+    // Otherwise this adds a CDN url.
+    // The CDN also auto-adds a swf URL for that specific version.
+    if (!options.swf) {
+      var ver = '5.1.0';
+
+      options.swf = '//vjs.zencdn.net/swf/' + ver + '/video-js.swf';
+    }
+
+    // Generate ID for swf object
+    var objId = options.techId;
+
+    // Merge default flashvars with ones passed in to init
+    var flashVars = (0, _object2['default'])({
+
+      // SWF Callback Functions
+      readyFunction: 'videojs.Flash.onReady',
+      eventProxyFunction: 'videojs.Flash.onEvent',
+      errorEventProxyFunction: 'videojs.Flash.onError',
+
+      // Player Settings
+      autoplay: options.autoplay,
+      preload: options.preload,
+      loop: options.loop,
+      muted: options.muted
+
+    }, options.flashVars);
+
+    // Merge default parames with ones passed in
+    var params = (0, _object2['default'])({
+      // Opaque is needed to overlay controls, but can affect playback performance
+      wmode: 'opaque',
+      // Using bgcolor prevents a white flash when the object is loading
+      bgcolor: '#000000'
+    }, options.params);
+
+    // Merge default attributes with ones passed in
+    var attributes = (0, _object2['default'])({
+      // Both ID and Name needed or swf to identify itself
+      id: objId,
+      name: objId,
+      'class': 'vjs-tech'
+    }, options.attributes);
+
+    this.el_ = Flash.embed(options.swf, flashVars, params, attributes);
+    this.el_.tech = this;
+
+    return this.el_;
+  };
+
+  /**
+   * Play for flash tech
+   *
+   * @method play
+   */
+
+
+  Flash.prototype.play = function play() {
+    if (this.ended()) {
+      this.setCurrentTime(0);
+    }
+    this.el_.vjs_play();
+  };
+
+  /**
+   * Pause for flash tech
+   *
+   * @method pause
+   */
+
+
+  Flash.prototype.pause = function pause() {
+    this.el_.vjs_pause();
+  };
+
+  /**
+   * Get/set video
+   *
+   * @param {Object=} src Source object
+   * @return {Object}
+   * @method src
+   */
+
+
+  Flash.prototype.src = function src(_src) {
+    if (_src === undefined) {
+      return this.currentSrc();
+    }
+
+    // Setting src through `src` not `setSrc` will be deprecated
+    return this.setSrc(_src);
+  };
+
+  /**
+   * Set video
+   *
+   * @param {Object=} src Source object
+   * @deprecated
+   * @method setSrc
+   */
+
+
+  Flash.prototype.setSrc = function setSrc(src) {
+    var _this2 = this;
+
+    // Make sure source URL is absolute.
+    src = Url.getAbsoluteURL(src);
+    this.el_.vjs_src(src);
+
+    // Currently the SWF doesn't autoplay if you load a source later.
+    // e.g. Load player w/ no source, wait 2s, set src.
+    if (this.autoplay()) {
+      this.setTimeout(function () {
+        return _this2.play();
+      }, 0);
+    }
+  };
+
+  /**
+   * Returns true if the tech is currently seeking.
+   * @return {boolean} true if seeking
+   */
+
+
+  Flash.prototype.seeking = function seeking() {
+    return this.lastSeekTarget_ !== undefined;
+  };
+
+  /**
+   * Set current time
+   *
+   * @param {Number} time Current time of video
+   * @method setCurrentTime
+   */
+
+
+  Flash.prototype.setCurrentTime = function setCurrentTime(time) {
+    var seekable = this.seekable();
+
+    if (seekable.length) {
+      // clamp to the current seekable range
+      time = time > seekable.start(0) ? time : seekable.start(0);
+      time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);
+
+      this.lastSeekTarget_ = time;
+      this.trigger('seeking');
+      this.el_.vjs_setProperty('currentTime', time);
+      _Tech.prototype.setCurrentTime.call(this);
+    }
+  };
+
+  /**
+   * Get current time
+   *
+   * @param {Number=} time Current time of video
+   * @return {Number} Current time
+   * @method currentTime
+   */
+
+
+  Flash.prototype.currentTime = function currentTime(time) {
+    // when seeking make the reported time keep up with the requested time
+    // by reading the time we're seeking to
+    if (this.seeking()) {
+      return this.lastSeekTarget_ || 0;
+    }
+    return this.el_.vjs_getProperty('currentTime');
+  };
+
+  /**
+   * Get current source
+   *
+   * @method currentSrc
+   */
+
+
+  Flash.prototype.currentSrc = function currentSrc() {
+    if (this.currentSource_) {
+      return this.currentSource_.src;
+    }
+    return this.el_.vjs_getProperty('currentSrc');
+  };
+
+  /**
+   * Get media duration
+   *
+   * @returns {Number} Media duration
+   */
+
+
+  Flash.prototype.duration = function duration() {
+    if (this.readyState() === 0) {
+      return NaN;
+    }
+    var duration = this.el_.vjs_getProperty('duration');
+
+    return duration >= 0 ? duration : Infinity;
+  };
+
+  /**
+   * Load media into player
+   *
+   * @method load
+   */
+
+
+  Flash.prototype.load = function load() {
+    this.el_.vjs_load();
+  };
+
+  /**
+   * Get poster
+   *
+   * @method poster
+   */
+
+
+  Flash.prototype.poster = function poster() {
+    this.el_.vjs_getProperty('poster');
+  };
+
+  /**
+   * Poster images are not handled by the Flash tech so make this a no-op
+   *
+   * @method setPoster
+   */
+
+
+  Flash.prototype.setPoster = function setPoster() {};
+
+  /**
+   * Determine if can seek in media
+   *
+   * @return {TimeRangeObject}
+   * @method seekable
+   */
+
+
+  Flash.prototype.seekable = function seekable() {
+    var duration = this.duration();
+
+    if (duration === 0) {
+      return (0, _timeRanges.createTimeRange)();
+    }
+    return (0, _timeRanges.createTimeRange)(0, duration);
+  };
+
+  /**
+   * Get buffered time range
+   *
+   * @return {TimeRangeObject}
+   * @method buffered
+   */
+
+
+  Flash.prototype.buffered = function buffered() {
+    var ranges = this.el_.vjs_getProperty('buffered');
+
+    if (ranges.length === 0) {
+      return (0, _timeRanges.createTimeRange)();
+    }
+    return (0, _timeRanges.createTimeRange)(ranges[0][0], ranges[0][1]);
+  };
+
+  /**
+   * Get fullscreen support -
+   * Flash does not allow fullscreen through javascript
+   * so always returns false
+   *
+   * @return {Boolean} false
+   * @method supportsFullScreen
+   */
+
+
+  Flash.prototype.supportsFullScreen = function supportsFullScreen() {
+    // Flash does not allow fullscreen through javascript
+    return false;
+  };
+
+  /**
+   * Request to enter fullscreen
+   * Flash does not allow fullscreen through javascript
+   * so always returns false
+   *
+   * @return {Boolean} false
+   * @method enterFullScreen
+   */
+
+
+  Flash.prototype.enterFullScreen = function enterFullScreen() {
+    return false;
+  };
+
+  return Flash;
+}(_tech2['default']);
+
+// Create setters and getters for attributes
+
+
+var _api = Flash.prototype;
+var _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');
+var _readOnly = 'networkState,readyState,initialTime,startOffsetTime,paused,ended,videoWidth,videoHeight'.split(',');
+
+function _createSetter(attr) {
+  var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);
+
+  _api['set' + attrUpper] = function (val) {
+    return this.el_.vjs_setProperty(attr, val);
+  };
+}
+
+function _createGetter(attr) {
+  _api[attr] = function () {
+    return this.el_.vjs_getProperty(attr);
+  };
+}
+
+// Create getter and setters for all read/write attributes
+for (var i = 0; i < _readWrite.length; i++) {
+  _createGetter(_readWrite[i]);
+  _createSetter(_readWrite[i]);
+}
+
+// Create getters for read-only attributes
+for (var _i = 0; _i < _readOnly.length; _i++) {
+  _createGetter(_readOnly[_i]);
+}
+
+/* Flash Support Testing -------------------------------------------------------- */
+
+Flash.isSupported = function () {
+  return Flash.version()[0] >= 10;
+  // return swfobject.hasFlashPlayerVersion('10');
+};
+
+// Add Source Handler pattern functions to this tech
+_tech2['default'].withSourceHandlers(Flash);
+
+/*
+ * The default native source handler.
+ * This simply passes the source to the video element. Nothing fancy.
+ *
+ * @param  {Object} source   The source object
+ * @param  {Flash} tech  The instance of the Flash tech
+ */
+Flash.nativeSourceHandler = {};
+
+/**
+ * Check if Flash can play the given videotype
+ * @param  {String} type    The mimetype to check
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Flash.nativeSourceHandler.canPlayType = function (type) {
+  if (type in Flash.formats) {
+    return 'maybe';
+  }
+
+  return '';
+};
+
+/*
+ * Check Flash can handle the source natively
+ *
+ * @param  {Object} source  The source object
+ * @param  {Object} options The options passed to the tech
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Flash.nativeSourceHandler.canHandleSource = function (source, options) {
+  var type = void 0;
+
+  function guessMimeType(src) {
+    var ext = Url.getFileExtension(src);
+
+    if (ext) {
+      return 'video/' + ext;
+    }
+    return '';
+  }
+
+  if (!source.type) {
+    type = guessMimeType(source.src);
+  } else {
+    // Strip code information from the type because we don't get that specific
+    type = source.type.replace(/;.*/, '').toLowerCase();
+  }
+
+  return Flash.nativeSourceHandler.canPlayType(type);
+};
+
+/*
+ * Pass the source to the flash object
+ * Adaptive source handlers will have more complicated workflows before passing
+ * video data to the video element
+ *
+ * @param  {Object} source   The source object
+ * @param  {Flash}  tech     The instance of the Flash tech
+ * @param  {Object} options  The options to pass to the source
+ */
+Flash.nativeSourceHandler.handleSource = function (source, tech, options) {
+  tech.setSrc(source.src);
+};
+
+/*
+ * Clean up the source handler when disposing the player or switching sources..
+ * (no cleanup is needed when supporting the format natively)
+ */
+Flash.nativeSourceHandler.dispose = function () {};
+
+// Register the native source handler
+Flash.registerSourceHandler(Flash.nativeSourceHandler);
+
+Flash.formats = {
+  'video/flv': 'FLV',
+  'video/x-flv': 'FLV',
+  'video/mp4': 'MP4',
+  'video/m4v': 'MP4'
+};
+
+Flash.onReady = function (currSwf) {
+  var el = Dom.getEl(currSwf);
+  var tech = el && el.tech;
+
+  // if there is no el then the tech has been disposed
+  // and the tech element was removed from the player div
+  if (tech && tech.el()) {
+    // check that the flash object is really ready
+    Flash.checkReady(tech);
+  }
+};
+
+// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.
+// If it's not ready, we set a timeout to check again shortly.
+Flash.checkReady = function (tech) {
+  // stop worrying if the tech has been disposed
+  if (!tech.el()) {
+    return;
+  }
+
+  // check if API property exists
+  if (tech.el().vjs_getProperty) {
+    // tell tech it's ready
+    tech.triggerReady();
+  } else {
+    // wait longer
+    this.setTimeout(function () {
+      Flash.checkReady(tech);
+    }, 50);
+  }
+};
+
+// Trigger events from the swf on the player
+Flash.onEvent = function (swfID, eventName) {
+  var tech = Dom.getEl(swfID).tech;
+
+  tech.trigger(eventName, Array.prototype.slice.call(arguments, 2));
+};
+
+// Log errors from the swf
+Flash.onError = function (swfID, err) {
+  var tech = Dom.getEl(swfID).tech;
+
+  // trigger MEDIA_ERR_SRC_NOT_SUPPORTED
+  if (err === 'srcnotfound') {
+    return tech.error(4);
+  }
+
+  // trigger a custom error
+  tech.error('FLASH: ' + err);
+};
+
+// Flash Version Check
+Flash.version = function () {
+  var version = '0,0,0';
+
+  // IE
+  try {
+    version = new _window2['default'].ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
+
+    // other browsers
+  } catch (e) {
+    try {
+      if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
+        version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
+      }
+    } catch (err) {
+      // satisfy linter
+    }
+  }
+  return version.split(',');
+};
+
+// Flash embedding method. Only used in non-iframe mode
+Flash.embed = function (swf, flashVars, params, attributes) {
+  var code = Flash.getEmbedCode(swf, flashVars, params, attributes);
+
+  // Get element by embedding code and retrieving created element
+  var obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];
+
+  return obj;
+};
+
+Flash.getEmbedCode = function (swf, flashVars, params, attributes) {
+  var objTag = '<object type="application/x-shockwave-flash" ';
+  var flashVarsString = '';
+  var paramsString = '';
+  var attrsString = '';
+
+  // Convert flash vars to string
+  if (flashVars) {
+    Object.getOwnPropertyNames(flashVars).forEach(function (key) {
+      flashVarsString += key + '=' + flashVars[key] + '&amp;';
+    });
+  }
+
+  // Add swf, flashVars, and other default params
+  params = (0, _object2['default'])({
+    movie: swf,
+    flashvars: flashVarsString,
+    // Required to talk to swf
+    allowScriptAccess: 'always',
+    // All should be default, but having security issues.
+    allowNetworking: 'all'
+  }, params);
+
+  // Create param tags string
+  Object.getOwnPropertyNames(params).forEach(function (key) {
+    paramsString += '<param name="' + key + '" value="' + params[key] + '" />';
+  });
+
+  attributes = (0, _object2['default'])({
+    // Add swf to attributes (need both for IE and Others to work)
+    data: swf,
+
+    // Default to 100% width/height
+    width: '100%',
+    height: '100%'
+
+  }, attributes);
+
+  // Create Attributes string
+  Object.getOwnPropertyNames(attributes).forEach(function (key) {
+    attrsString += key + '="' + attributes[key] + '" ';
+  });
+
+  return '' + objTag + attrsString + '>' + paramsString + '</object>';
+};
+
+// Run Flash through the RTMP decorator
+(0, _flashRtmp2['default'])(Flash);
+
+_component2['default'].registerComponent('Flash', Flash);
+_tech2['default'].registerTech('Flash', Flash);
+exports['default'] = Flash;
+
+},{"../component":5,"../utils/dom.js":80,"../utils/time-ranges.js":88,"../utils/url.js":90,"./flash-rtmp":58,"./tech":62,"global/window":93,"object.assign":136}],60:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _templateObject = _taggedTemplateLiteralLoose(['Text Tracks are being loaded from another origin but the crossorigin attribute isn\'t used.\n            This may prevent text tracks from loading.'], ['Text Tracks are being loaded from another origin but the crossorigin attribute isn\'t used.\n            This may prevent text tracks from loading.']);
+
+var _tech = _dereq_('./tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _dom = _dereq_('../utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _url = _dereq_('../utils/url.js');
+
+var Url = _interopRequireWildcard(_url);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _tsml = _dereq_('tsml');
+
+var _tsml2 = _interopRequireDefault(_tsml);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _object = _dereq_('object.assign');
+
+var _object2 = _interopRequireDefault(_object);
+
+var _mergeOptions = _dereq_('../utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _toTitleCase = _dereq_('../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file html5.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * HTML5 Media Controller - Wrapper for HTML5 Media API
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+/**
+ * HTML5 Media Controller - Wrapper for HTML5 Media API
+ *
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready Ready callback function
+ * @extends Tech
+ * @class Html5
+ */
+var Html5 = function (_Tech) {
+  _inherits(Html5, _Tech);
+
+  function Html5(options, ready) {
+    _classCallCheck(this, Html5);
+
+    var _this = _possibleConstructorReturn(this, _Tech.call(this, options, ready));
+
+    var source = options.source;
+    var crossoriginTracks = false;
+
+    // Set the source if one is provided
+    // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)
+    // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source
+    // anyway so the error gets fired.
+    if (source && (_this.el_.currentSrc !== source.src || options.tag && options.tag.initNetworkState_ === 3)) {
+      _this.setSource(source);
+    } else {
+      _this.handleLateInit_(_this.el_);
+    }
+
+    if (_this.el_.hasChildNodes()) {
+
+      var nodes = _this.el_.childNodes;
+      var nodesLength = nodes.length;
+      var removeNodes = [];
+
+      while (nodesLength--) {
+        var node = nodes[nodesLength];
+        var nodeName = node.nodeName.toLowerCase();
+
+        if (nodeName === 'track') {
+          if (!_this.featuresNativeTextTracks) {
+            // Empty video tag tracks so the built-in player doesn't use them also.
+            // This may not be fast enough to stop HTML5 browsers from reading the tags
+            // so we'll need to turn off any default tracks if we're manually doing
+            // captions and subtitles. videoElement.textTracks
+            removeNodes.push(node);
+          } else {
+            // store HTMLTrackElement and TextTrack to remote list
+            _this.remoteTextTrackEls().addTrackElement_(node);
+            _this.remoteTextTracks().addTrack_(node.track);
+            if (!crossoriginTracks && !_this.el_.hasAttribute('crossorigin') && Url.isCrossOrigin(node.src)) {
+              crossoriginTracks = true;
+            }
+          }
+        }
+      }
+
+      for (var i = 0; i < removeNodes.length; i++) {
+        _this.el_.removeChild(removeNodes[i]);
+      }
+    }
+
+    var trackTypes = ['audio', 'video'];
+
+    // ProxyNativeTextTracks
+    trackTypes.forEach(function (type) {
+      var capitalType = (0, _toTitleCase2['default'])(type);
+
+      if (!_this['featuresNative' + capitalType + 'Tracks']) {
+        return;
+      }
+      var tl = _this.el()[type + 'Tracks'];
+
+      if (tl && tl.addEventListener) {
+        tl.addEventListener('change', Fn.bind(_this, _this['handle' + capitalType + 'TrackChange_']));
+        tl.addEventListener('addtrack', Fn.bind(_this, _this['handle' + capitalType + 'TrackAdd_']));
+        tl.addEventListener('removetrack', Fn.bind(_this, _this['handle' + capitalType + 'TrackRemove_']));
+
+        // Remove (native) trackts that are not used anymore
+        _this.on('loadstart', _this['removeOld' + capitalType + 'Tracks_']);
+      }
+    });
+
+    if (_this.featuresNativeTextTracks) {
+      if (crossoriginTracks) {
+        _log2['default'].warn((0, _tsml2['default'])(_templateObject));
+      }
+
+      _this.handleTextTrackChange_ = Fn.bind(_this, _this.handleTextTrackChange);
+      _this.handleTextTrackAdd_ = Fn.bind(_this, _this.handleTextTrackAdd);
+      _this.handleTextTrackRemove_ = Fn.bind(_this, _this.handleTextTrackRemove);
+      _this.proxyNativeTextTracks_();
+    }
+
+    // Determine if native controls should be used
+    // Our goal should be to get the custom controls on mobile solid everywhere
+    // so we can remove this all together. Right now this will block custom
+    // controls on touch enabled laptops like the Chrome Pixel
+    if ((browser.TOUCH_ENABLED || browser.IS_IPHONE || browser.IS_NATIVE_ANDROID) && options.nativeControlsForTouch === true) {
+      _this.setControls(true);
+    }
+
+    _this.triggerReady();
+    return _this;
+  }
+
+  /**
+   * Dispose of html5 media element
+   *
+   * @method dispose
+   */
+
+
+  Html5.prototype.dispose = function dispose() {
+    var _this2 = this;
+
+    // Un-ProxyNativeTracks
+    ['audio', 'video', 'text'].forEach(function (type) {
+      var capitalType = (0, _toTitleCase2['default'])(type);
+      var tl = _this2.el_[type + 'Tracks'];
+
+      if (tl && tl.removeEventListener) {
+        tl.removeEventListener('change', _this2['handle' + capitalType + 'TrackChange_']);
+        tl.removeEventListener('addtrack', _this2['handle' + capitalType + 'TrackAdd_']);
+        tl.removeEventListener('removetrack', _this2['handle' + capitalType + 'TrackRemove_']);
+      }
+
+      // Stop removing old text tracks
+      if (tl) {
+        _this2.off('loadstart', _this2['removeOld' + capitalType + 'Tracks_']);
+      }
+    });
+
+    Html5.disposeMediaElement(this.el_);
+    // tech will handle clearing of the emulated track list
+    _Tech.prototype.dispose.call(this);
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  Html5.prototype.createEl = function createEl() {
+    var el = this.options_.tag;
+
+    // Check if this browser supports moving the element into the box.
+    // On the iPhone video will break if you move the element,
+    // So we have to create a brand new element.
+    if (!el || this.movingMediaElementInDOM === false) {
+
+      // If the original tag is still there, clone and remove it.
+      if (el) {
+        var clone = el.cloneNode(true);
+
+        el.parentNode.insertBefore(clone, el);
+        Html5.disposeMediaElement(el);
+        el = clone;
+      } else {
+        el = _document2['default'].createElement('video');
+
+        // determine if native controls should be used
+        var tagAttributes = this.options_.tag && Dom.getElAttributes(this.options_.tag);
+        var attributes = (0, _mergeOptions2['default'])({}, tagAttributes);
+
+        if (!browser.TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) {
+          delete attributes.controls;
+        }
+
+        Dom.setElAttributes(el, (0, _object2['default'])(attributes, {
+          id: this.options_.techId,
+          'class': 'vjs-tech'
+        }));
+      }
+    }
+
+    // Update specific tag settings, in case they were overridden
+    var settingsAttrs = ['autoplay', 'preload', 'loop', 'muted'];
+
+    for (var i = settingsAttrs.length - 1; i >= 0; i--) {
+      var attr = settingsAttrs[i];
+      var overwriteAttrs = {};
+
+      if (typeof this.options_[attr] !== 'undefined') {
+        overwriteAttrs[attr] = this.options_[attr];
+      }
+      Dom.setElAttributes(el, overwriteAttrs);
+    }
+
+    return el;
+    // jenniisawesome = true;
+  };
+
+  // If we're loading the playback object after it has started loading
+  // or playing the video (often with autoplay on) then the loadstart event
+  // has already fired and we need to fire it manually because many things
+  // rely on it.
+
+
+  Html5.prototype.handleLateInit_ = function handleLateInit_(el) {
+    var _this3 = this;
+
+    if (el.networkState === 0 || el.networkState === 3) {
+      // The video element hasn't started loading the source yet
+      // or didn't find a source
+      return;
+    }
+
+    if (el.readyState === 0) {
+      var _ret = function () {
+        // NetworkState is set synchronously BUT loadstart is fired at the
+        // end of the current stack, usually before setInterval(fn, 0).
+        // So at this point we know loadstart may have already fired or is
+        // about to fire, and either way the player hasn't seen it yet.
+        // We don't want to fire loadstart prematurely here and cause a
+        // double loadstart so we'll wait and see if it happens between now
+        // and the next loop, and fire it if not.
+        // HOWEVER, we also want to make sure it fires before loadedmetadata
+        // which could also happen between now and the next loop, so we'll
+        // watch for that also.
+        var loadstartFired = false;
+        var setLoadstartFired = function setLoadstartFired() {
+          loadstartFired = true;
+        };
+
+        _this3.on('loadstart', setLoadstartFired);
+
+        var triggerLoadstart = function triggerLoadstart() {
+          // We did miss the original loadstart. Make sure the player
+          // sees loadstart before loadedmetadata
+          if (!loadstartFired) {
+            this.trigger('loadstart');
+          }
+        };
+
+        _this3.on('loadedmetadata', triggerLoadstart);
+
+        _this3.ready(function () {
+          this.off('loadstart', setLoadstartFired);
+          this.off('loadedmetadata', triggerLoadstart);
+
+          if (!loadstartFired) {
+            // We did miss the original native loadstart. Fire it now.
+            this.trigger('loadstart');
+          }
+        });
+
+        return {
+          v: void 0
+        };
+      }();
+
+      if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
+    }
+
+    // From here on we know that loadstart already fired and we missed it.
+    // The other readyState events aren't as much of a problem if we double
+    // them, so not going to go to as much trouble as loadstart to prevent
+    // that unless we find reason to.
+    var eventsToTrigger = ['loadstart'];
+
+    // loadedmetadata: newly equal to HAVE_METADATA (1) or greater
+    eventsToTrigger.push('loadedmetadata');
+
+    // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater
+    if (el.readyState >= 2) {
+      eventsToTrigger.push('loadeddata');
+    }
+
+    // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater
+    if (el.readyState >= 3) {
+      eventsToTrigger.push('canplay');
+    }
+
+    // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)
+    if (el.readyState >= 4) {
+      eventsToTrigger.push('canplaythrough');
+    }
+
+    // We still need to give the player time to add event listeners
+    this.ready(function () {
+      eventsToTrigger.forEach(function (type) {
+        this.trigger(type);
+      }, this);
+    });
+  };
+
+  Html5.prototype.proxyNativeTextTracks_ = function proxyNativeTextTracks_() {
+    var tt = this.el().textTracks;
+
+    if (tt) {
+      // Add tracks - if player is initialised after DOM loaded, textTracks
+      // will not trigger addtrack
+      for (var i = 0; i < tt.length; i++) {
+        this.textTracks().addTrack_(tt[i]);
+      }
+
+      if (tt.addEventListener) {
+        tt.addEventListener('change', this.handleTextTrackChange_);
+        tt.addEventListener('addtrack', this.handleTextTrackAdd_);
+        tt.addEventListener('removetrack', this.handleTextTrackRemove_);
+      }
+
+      // Remove (native) texttracks that are not used anymore
+      this.on('loadstart', this.removeOldTextTracks_);
+    }
+  };
+
+  Html5.prototype.handleTextTrackChange = function handleTextTrackChange(e) {
+    var tt = this.textTracks();
+
+    this.textTracks().trigger({
+      type: 'change',
+      target: tt,
+      currentTarget: tt,
+      srcElement: tt
+    });
+  };
+
+  Html5.prototype.handleTextTrackAdd = function handleTextTrackAdd(e) {
+    this.textTracks().addTrack_(e.track);
+  };
+
+  Html5.prototype.handleTextTrackRemove = function handleTextTrackRemove(e) {
+    this.textTracks().removeTrack_(e.track);
+  };
+
+  Html5.prototype.handleVideoTrackChange_ = function handleVideoTrackChange_(e) {
+    var vt = this.videoTracks();
+
+    this.videoTracks().trigger({
+      type: 'change',
+      target: vt,
+      currentTarget: vt,
+      srcElement: vt
+    });
+  };
+
+  Html5.prototype.handleVideoTrackAdd_ = function handleVideoTrackAdd_(e) {
+    this.videoTracks().addTrack_(e.track);
+  };
+
+  Html5.prototype.handleVideoTrackRemove_ = function handleVideoTrackRemove_(e) {
+    this.videoTracks().removeTrack_(e.track);
+  };
+
+  Html5.prototype.handleAudioTrackChange_ = function handleAudioTrackChange_(e) {
+    var audioTrackList = this.audioTracks();
+
+    this.audioTracks().trigger({
+      type: 'change',
+      target: audioTrackList,
+      currentTarget: audioTrackList,
+      srcElement: audioTrackList
+    });
+  };
+
+  Html5.prototype.handleAudioTrackAdd_ = function handleAudioTrackAdd_(e) {
+    this.audioTracks().addTrack_(e.track);
+  };
+
+  Html5.prototype.handleAudioTrackRemove_ = function handleAudioTrackRemove_(e) {
+    this.audioTracks().removeTrack_(e.track);
+  };
+
+  /**
+   * This is a helper function that is used in removeOldTextTracks_, removeOldAudioTracks_ and
+   * removeOldVideoTracks_
+   * @param {Track[]} techTracks Tracks for this tech
+   * @param {Track[]} elTracks Tracks for the HTML5 video element
+   * @private
+   */
+
+
+  Html5.prototype.removeOldTracks_ = function removeOldTracks_(techTracks, elTracks) {
+    // This will loop over the techTracks and check if they are still used by the HTML5 video element
+    // If not, they will be removed from the emulated list
+    var removeTracks = [];
+
+    if (!elTracks) {
+      return;
+    }
+
+    for (var i = 0; i < techTracks.length; i++) {
+      var techTrack = techTracks[i];
+      var found = false;
+
+      for (var j = 0; j < elTracks.length; j++) {
+        if (elTracks[j] === techTrack) {
+          found = true;
+          break;
+        }
+      }
+
+      if (!found) {
+        removeTracks.push(techTrack);
+      }
+    }
+
+    for (var _i = 0; _i < removeTracks.length; _i++) {
+      var _track = removeTracks[_i];
+
+      techTracks.removeTrack_(_track);
+    }
+  };
+
+  Html5.prototype.removeOldTextTracks_ = function removeOldTextTracks_() {
+    var techTracks = this.textTracks();
+    var elTracks = this.el().textTracks;
+
+    this.removeOldTracks_(techTracks, elTracks);
+  };
+
+  Html5.prototype.removeOldAudioTracks_ = function removeOldAudioTracks_() {
+    var techTracks = this.audioTracks();
+    var elTracks = this.el().audioTracks;
+
+    this.removeOldTracks_(techTracks, elTracks);
+  };
+
+  Html5.prototype.removeOldVideoTracks_ = function removeOldVideoTracks_() {
+    var techTracks = this.videoTracks();
+    var elTracks = this.el().videoTracks;
+
+    this.removeOldTracks_(techTracks, elTracks);
+  };
+
+  /**
+   * Play for html5 tech
+   *
+   * @method play
+   */
+
+
+  Html5.prototype.play = function play() {
+    var playPromise = this.el_.play();
+
+    // Catch/silence error when a pause interrupts a play request
+    // on browsers which return a promise
+    if (playPromise !== undefined && typeof playPromise.then === 'function') {
+      playPromise.then(null, function (e) {});
+    }
+  };
+
+  /**
+   * Pause for html5 tech
+   *
+   * @method pause
+   */
+
+
+  Html5.prototype.pause = function pause() {
+    this.el_.pause();
+  };
+
+  /**
+   * Paused for html5 tech
+   *
+   * @return {Boolean}
+   * @method paused
+   */
+
+
+  Html5.prototype.paused = function paused() {
+    return this.el_.paused;
+  };
+
+  /**
+   * Get current time
+   *
+   * @return {Number}
+   * @method currentTime
+   */
+
+
+  Html5.prototype.currentTime = function currentTime() {
+    return this.el_.currentTime;
+  };
+
+  /**
+   * Set current time
+   *
+   * @param {Number} seconds Current time of video
+   * @method setCurrentTime
+   */
+
+
+  Html5.prototype.setCurrentTime = function setCurrentTime(seconds) {
+    try {
+      this.el_.currentTime = seconds;
+    } catch (e) {
+      (0, _log2['default'])(e, 'Video is not ready. (Video.js)');
+      // this.warning(VideoJS.warnings.videoNotReady);
+    }
+  };
+
+  /**
+   * Get duration
+   *
+   * @return {Number}
+   * @method duration
+   */
+
+
+  Html5.prototype.duration = function duration() {
+    return this.el_.duration || 0;
+  };
+
+  /**
+   * Get a TimeRange object that represents the intersection
+   * of the time ranges for which the user agent has all
+   * relevant media
+   *
+   * @return {TimeRangeObject}
+   * @method buffered
+   */
+
+
+  Html5.prototype.buffered = function buffered() {
+    return this.el_.buffered;
+  };
+
+  /**
+   * Get volume level
+   *
+   * @return {Number}
+   * @method volume
+   */
+
+
+  Html5.prototype.volume = function volume() {
+    return this.el_.volume;
+  };
+
+  /**
+   * Set volume level
+   *
+   * @param {Number} percentAsDecimal Volume percent as a decimal
+   * @method setVolume
+   */
+
+
+  Html5.prototype.setVolume = function setVolume(percentAsDecimal) {
+    this.el_.volume = percentAsDecimal;
+  };
+
+  /**
+   * Get if muted
+   *
+   * @return {Boolean}
+   * @method muted
+   */
+
+
+  Html5.prototype.muted = function muted() {
+    return this.el_.muted;
+  };
+
+  /**
+   * Set muted
+   *
+   * @param {Boolean} If player is to be muted or note
+   * @method setMuted
+   */
+
+
+  Html5.prototype.setMuted = function setMuted(muted) {
+    this.el_.muted = muted;
+  };
+
+  /**
+   * Get player width
+   *
+   * @return {Number}
+   * @method width
+   */
+
+
+  Html5.prototype.width = function width() {
+    return this.el_.offsetWidth;
+  };
+
+  /**
+   * Get player height
+   *
+   * @return {Number}
+   * @method height
+   */
+
+
+  Html5.prototype.height = function height() {
+    return this.el_.offsetHeight;
+  };
+
+  /**
+   * Get if there is fullscreen support
+   *
+   * @return {Boolean}
+   * @method supportsFullScreen
+   */
+
+
+  Html5.prototype.supportsFullScreen = function supportsFullScreen() {
+    if (typeof this.el_.webkitEnterFullScreen === 'function') {
+      var userAgent = _window2['default'].navigator && _window2['default'].navigator.userAgent || '';
+
+      // Seems to be broken in Chromium/Chrome && Safari in Leopard
+      if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  /**
+   * Request to enter fullscreen
+   *
+   * @method enterFullScreen
+   */
+
+
+  Html5.prototype.enterFullScreen = function enterFullScreen() {
+    var video = this.el_;
+
+    if ('webkitDisplayingFullscreen' in video) {
+      this.one('webkitbeginfullscreen', function () {
+        this.one('webkitendfullscreen', function () {
+          this.trigger('fullscreenchange', { isFullscreen: false });
+        });
+
+        this.trigger('fullscreenchange', { isFullscreen: true });
+      });
+    }
+
+    if (video.paused && video.networkState <= video.HAVE_METADATA) {
+      // attempt to prime the video element for programmatic access
+      // this isn't necessary on the desktop but shouldn't hurt
+      this.el_.play();
+
+      // playing and pausing synchronously during the transition to fullscreen
+      // can get iOS ~6.1 devices into a play/pause loop
+      this.setTimeout(function () {
+        video.pause();
+        video.webkitEnterFullScreen();
+      }, 0);
+    } else {
+      video.webkitEnterFullScreen();
+    }
+  };
+
+  /**
+   * Request to exit fullscreen
+   *
+   * @method exitFullScreen
+   */
+
+
+  Html5.prototype.exitFullScreen = function exitFullScreen() {
+    this.el_.webkitExitFullScreen();
+  };
+
+  /**
+   * Get/set video
+   *
+   * @param {Object=} src Source object
+   * @return {Object}
+   * @method src
+   */
+
+
+  Html5.prototype.src = function src(_src) {
+    if (_src === undefined) {
+      return this.el_.src;
+    }
+
+    // Setting src through `src` instead of `setSrc` will be deprecated
+    this.setSrc(_src);
+  };
+
+  /**
+   * Set video
+   *
+   * @param {Object} src Source object
+   * @deprecated
+   * @method setSrc
+   */
+
+
+  Html5.prototype.setSrc = function setSrc(src) {
+    this.el_.src = src;
+  };
+
+  /**
+   * Load media into player
+   *
+   * @method load
+   */
+
+
+  Html5.prototype.load = function load() {
+    this.el_.load();
+  };
+
+  /**
+   * Reset the tech. Removes all sources and calls `load`.
+   *
+   * @method reset
+   */
+
+
+  Html5.prototype.reset = function reset() {
+    Html5.resetMediaElement(this.el_);
+  };
+
+  /**
+   * Get current source
+   *
+   * @return {Object}
+   * @method currentSrc
+   */
+
+
+  Html5.prototype.currentSrc = function currentSrc() {
+    if (this.currentSource_) {
+      return this.currentSource_.src;
+    }
+    return this.el_.currentSrc;
+  };
+
+  /**
+   * Get poster
+   *
+   * @return {String}
+   * @method poster
+   */
+
+
+  Html5.prototype.poster = function poster() {
+    return this.el_.poster;
+  };
+
+  /**
+   * Set poster
+   *
+   * @param {String} val URL to poster image
+   * @method
+   */
+
+
+  Html5.prototype.setPoster = function setPoster(val) {
+    this.el_.poster = val;
+  };
+
+  /**
+   * Get preload attribute
+   *
+   * @return {String}
+   * @method preload
+   */
+
+
+  Html5.prototype.preload = function preload() {
+    return this.el_.preload;
+  };
+
+  /**
+   * Set preload attribute
+   *
+   * @param {String} val Value for preload attribute
+   * @method setPreload
+   */
+
+
+  Html5.prototype.setPreload = function setPreload(val) {
+    this.el_.preload = val;
+  };
+
+  /**
+   * Get autoplay attribute
+   *
+   * @return {String}
+   * @method autoplay
+   */
+
+
+  Html5.prototype.autoplay = function autoplay() {
+    return this.el_.autoplay;
+  };
+
+  /**
+   * Set autoplay attribute
+   *
+   * @param {String} val Value for preload attribute
+   * @method setAutoplay
+   */
+
+
+  Html5.prototype.setAutoplay = function setAutoplay(val) {
+    this.el_.autoplay = val;
+  };
+
+  /**
+   * Get controls attribute
+   *
+   * @return {String}
+   * @method controls
+   */
+
+
+  Html5.prototype.controls = function controls() {
+    return this.el_.controls;
+  };
+
+  /**
+   * Set controls attribute
+   *
+   * @param {String} val Value for controls attribute
+   * @method setControls
+   */
+
+
+  Html5.prototype.setControls = function setControls(val) {
+    this.el_.controls = !!val;
+  };
+
+  /**
+   * Get loop attribute
+   *
+   * @return {String}
+   * @method loop
+   */
+
+
+  Html5.prototype.loop = function loop() {
+    return this.el_.loop;
+  };
+
+  /**
+   * Set loop attribute
+   *
+   * @param {String} val Value for loop attribute
+   * @method setLoop
+   */
+
+
+  Html5.prototype.setLoop = function setLoop(val) {
+    this.el_.loop = val;
+  };
+
+  /**
+   * Get error value
+   *
+   * @return {String}
+   * @method error
+   */
+
+
+  Html5.prototype.error = function error() {
+    return this.el_.error;
+  };
+
+  /**
+   * Get whether or not the player is in the "seeking" state
+   *
+   * @return {Boolean}
+   * @method seeking
+   */
+
+
+  Html5.prototype.seeking = function seeking() {
+    return this.el_.seeking;
+  };
+
+  /**
+   * Get a TimeRanges object that represents the
+   * ranges of the media resource to which it is possible
+   * for the user agent to seek.
+   *
+   * @return {TimeRangeObject}
+   * @method seekable
+   */
+
+
+  Html5.prototype.seekable = function seekable() {
+    return this.el_.seekable;
+  };
+
+  /**
+   * Get if video ended
+   *
+   * @return {Boolean}
+   * @method ended
+   */
+
+
+  Html5.prototype.ended = function ended() {
+    return this.el_.ended;
+  };
+
+  /**
+   * Get the value of the muted content attribute
+   * This attribute has no dynamic effect, it only
+   * controls the default state of the element
+   *
+   * @return {Boolean}
+   * @method defaultMuted
+   */
+
+
+  Html5.prototype.defaultMuted = function defaultMuted() {
+    return this.el_.defaultMuted;
+  };
+
+  /**
+   * Get desired speed at which the media resource is to play
+   *
+   * @return {Number}
+   * @method playbackRate
+   */
+
+
+  Html5.prototype.playbackRate = function playbackRate() {
+    return this.el_.playbackRate;
+  };
+
+  /**
+   * Returns a TimeRanges object that represents the ranges of the
+   * media resource that the user agent has played.
+   * @return {TimeRangeObject} the range of points on the media
+   * timeline that has been reached through normal playback
+   * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played
+   */
+
+
+  Html5.prototype.played = function played() {
+    return this.el_.played;
+  };
+
+  /**
+   * Set desired speed at which the media resource is to play
+   *
+   * @param {Number} val Speed at which the media resource is to play
+   * @method setPlaybackRate
+   */
+
+
+  Html5.prototype.setPlaybackRate = function setPlaybackRate(val) {
+    this.el_.playbackRate = val;
+  };
+
+  /**
+   * Get the current state of network activity for the element, from
+   * the list below
+   * NETWORK_EMPTY (numeric value 0)
+   * NETWORK_IDLE (numeric value 1)
+   * NETWORK_LOADING (numeric value 2)
+   * NETWORK_NO_SOURCE (numeric value 3)
+   *
+   * @return {Number}
+   * @method networkState
+   */
+
+
+  Html5.prototype.networkState = function networkState() {
+    return this.el_.networkState;
+  };
+
+  /**
+   * Get a value that expresses the current state of the element
+   * with respect to rendering the current playback position, from
+   * the codes in the list below
+   * HAVE_NOTHING (numeric value 0)
+   * HAVE_METADATA (numeric value 1)
+   * HAVE_CURRENT_DATA (numeric value 2)
+   * HAVE_FUTURE_DATA (numeric value 3)
+   * HAVE_ENOUGH_DATA (numeric value 4)
+   *
+   * @return {Number}
+   * @method readyState
+   */
+
+
+  Html5.prototype.readyState = function readyState() {
+    return this.el_.readyState;
+  };
+
+  /**
+   * Get width of video
+   *
+   * @return {Number}
+   * @method videoWidth
+   */
+
+
+  Html5.prototype.videoWidth = function videoWidth() {
+    return this.el_.videoWidth;
+  };
+
+  /**
+   * Get height of video
+   *
+   * @return {Number}
+   * @method videoHeight
+   */
+
+
+  Html5.prototype.videoHeight = function videoHeight() {
+    return this.el_.videoHeight;
+  };
+
+  /**
+   * Get text tracks
+   *
+   * @return {TextTrackList}
+   * @method textTracks
+   */
+
+
+  Html5.prototype.textTracks = function textTracks() {
+    return _Tech.prototype.textTracks.call(this);
+  };
+
+  /**
+   * Creates and returns a text track object
+   *
+   * @param {String} kind Text track kind (subtitles, captions, descriptions
+   *                                       chapters and metadata)
+   * @param {String=} label Label to identify the text track
+   * @param {String=} language Two letter language abbreviation
+   * @return {TextTrackObject}
+   * @method addTextTrack
+   */
+
+
+  Html5.prototype.addTextTrack = function addTextTrack(kind, label, language) {
+    if (!this.featuresNativeTextTracks) {
+      return _Tech.prototype.addTextTrack.call(this, kind, label, language);
+    }
+
+    return this.el_.addTextTrack(kind, label, language);
+  };
+
+  /**
+   * Creates a remote text track object and returns a html track element
+   *
+   * @param {Object} options The object should contain values for
+   * kind, language, label and src (location of the WebVTT file)
+   * @return {HTMLTrackElement}
+   * @method addRemoteTextTrack
+   */
+
+
+  Html5.prototype.addRemoteTextTrack = function addRemoteTextTrack() {
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    if (!this.featuresNativeTextTracks) {
+      return _Tech.prototype.addRemoteTextTrack.call(this, options);
+    }
+
+    var htmlTrackElement = _document2['default'].createElement('track');
+
+    if (options.kind) {
+      htmlTrackElement.kind = options.kind;
+    }
+    if (options.label) {
+      htmlTrackElement.label = options.label;
+    }
+    if (options.language || options.srclang) {
+      htmlTrackElement.srclang = options.language || options.srclang;
+    }
+    if (options['default']) {
+      htmlTrackElement['default'] = options['default'];
+    }
+    if (options.id) {
+      htmlTrackElement.id = options.id;
+    }
+    if (options.src) {
+      htmlTrackElement.src = options.src;
+    }
+
+    this.el().appendChild(htmlTrackElement);
+
+    // store HTMLTrackElement and TextTrack to remote list
+    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);
+    this.remoteTextTracks().addTrack_(htmlTrackElement.track);
+
+    return htmlTrackElement;
+  };
+
+  /**
+   * Remove remote text track from TextTrackList object
+   *
+   * @param {TextTrackObject} track Texttrack object to remove
+   * @method removeRemoteTextTrack
+   */
+
+
+  Html5.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {
+    if (!this.featuresNativeTextTracks) {
+      return _Tech.prototype.removeRemoteTextTrack.call(this, track);
+    }
+
+    var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);
+
+    // remove HTMLTrackElement and TextTrack from remote list
+    this.remoteTextTrackEls().removeTrackElement_(trackElement);
+    this.remoteTextTracks().removeTrack_(track);
+
+    var tracks = this.$$('track');
+
+    var i = tracks.length;
+
+    while (i--) {
+      if (track === tracks[i] || track === tracks[i].track) {
+        this.el().removeChild(tracks[i]);
+      }
+    }
+  };
+
+  return Html5;
+}(_tech2['default']);
+
+/* HTML5 Support Testing ---------------------------------------------------- */
+
+/*
+* Element for testing browser HTML5 video capabilities
+*
+* @type {Element}
+* @constant
+* @private
+*/
+
+
+Html5.TEST_VID = _document2['default'].createElement('video');
+var track = _document2['default'].createElement('track');
+
+track.kind = 'captions';
+track.srclang = 'en';
+track.label = 'English';
+Html5.TEST_VID.appendChild(track);
+
+/*
+ * Check if HTML5 video is supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.isSupported = function () {
+  // IE9 with no Media Player is a LIAR! (#984)
+  try {
+    Html5.TEST_VID.volume = 0.5;
+  } catch (e) {
+    return false;
+  }
+
+  return !!Html5.TEST_VID.canPlayType;
+};
+
+// Add Source Handler pattern functions to this tech
+_tech2['default'].withSourceHandlers(Html5);
+
+/*
+ * The default native source handler.
+ * This simply passes the source to the video element. Nothing fancy.
+ *
+ * @param  {Object} source   The source object
+ * @param  {Html5} tech  The instance of the HTML5 tech
+ */
+Html5.nativeSourceHandler = {};
+
+/*
+ * Check if the video element can play the given videotype
+ *
+ * @param  {String} type    The mimetype to check
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Html5.nativeSourceHandler.canPlayType = function (type) {
+  // IE9 on Windows 7 without MediaPlayer throws an error here
+  // https://github.com/videojs/video.js/issues/519
+  try {
+    return Html5.TEST_VID.canPlayType(type);
+  } catch (e) {
+    return '';
+  }
+};
+
+/*
+ * Check if the video element can handle the source natively
+ *
+ * @param  {Object} source  The source object
+ * @param  {Object} options The options passed to the tech
+ * @return {String}         'probably', 'maybe', or '' (empty string)
+ */
+Html5.nativeSourceHandler.canHandleSource = function (source, options) {
+
+  // If a type was provided we should rely on that
+  if (source.type) {
+    return Html5.nativeSourceHandler.canPlayType(source.type);
+
+    // If no type, fall back to checking 'video/[EXTENSION]'
+  } else if (source.src) {
+    var ext = Url.getFileExtension(source.src);
+
+    return Html5.nativeSourceHandler.canPlayType('video/' + ext);
+  }
+
+  return '';
+};
+
+/*
+ * Pass the source to the video element
+ * Adaptive source handlers will have more complicated workflows before passing
+ * video data to the video element
+ *
+ * @param  {Object} source   The source object
+ * @param  {Html5}  tech     The instance of the Html5 tech
+ * @param  {Object} options  The options to pass to the source
+ */
+Html5.nativeSourceHandler.handleSource = function (source, tech, options) {
+  tech.setSrc(source.src);
+};
+
+/*
+* Clean up the source handler when disposing the player or switching sources..
+* (no cleanup is needed when supporting the format natively)
+*/
+Html5.nativeSourceHandler.dispose = function () {};
+
+// Register the native source handler
+Html5.registerSourceHandler(Html5.nativeSourceHandler);
+
+/*
+ * Check if the volume can be changed in this browser/device.
+ * Volume cannot be changed in a lot of mobile devices.
+ * Specifically, it can't be changed from 1 on iOS.
+ *
+ * @return {Boolean}
+ */
+Html5.canControlVolume = function () {
+  // IE will error if Windows Media Player not installed #3315
+  try {
+    var volume = Html5.TEST_VID.volume;
+
+    Html5.TEST_VID.volume = volume / 2 + 0.1;
+    return volume !== Html5.TEST_VID.volume;
+  } catch (e) {
+    return false;
+  }
+};
+
+/*
+ * Check if playbackRate is supported in this browser/device.
+ *
+ * @return {Boolean}
+ */
+Html5.canControlPlaybackRate = function () {
+  // Playback rate API is implemented in Android Chrome, but doesn't do anything
+  // https://github.com/videojs/video.js/issues/3180
+  if (browser.IS_ANDROID && browser.IS_CHROME) {
+    return false;
+  }
+  // IE will error if Windows Media Player not installed #3315
+  try {
+    var playbackRate = Html5.TEST_VID.playbackRate;
+
+    Html5.TEST_VID.playbackRate = playbackRate / 2 + 0.1;
+    return playbackRate !== Html5.TEST_VID.playbackRate;
+  } catch (e) {
+    return false;
+  }
+};
+
+/*
+ * Check to see if native text tracks are supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.supportsNativeTextTracks = function () {
+  var supportsTextTracks = void 0;
+
+  // Figure out native text track support
+  // If mode is a number, we cannot change it because it'll disappear from view.
+  // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.
+  // Firefox isn't playing nice either with modifying the mode
+  // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862
+  supportsTextTracks = !!Html5.TEST_VID.textTracks;
+  if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {
+    supportsTextTracks = typeof Html5.TEST_VID.textTracks[0].mode !== 'number';
+  }
+  if (supportsTextTracks && browser.IS_FIREFOX) {
+    supportsTextTracks = false;
+  }
+  if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {
+    supportsTextTracks = false;
+  }
+
+  return supportsTextTracks;
+};
+
+/*
+ * Check to see if native video tracks are supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.supportsNativeVideoTracks = function () {
+  var supportsVideoTracks = !!Html5.TEST_VID.videoTracks;
+
+  return supportsVideoTracks;
+};
+
+/*
+ * Check to see if native audio tracks are supported by this browser/device
+ *
+ * @return {Boolean}
+ */
+Html5.supportsNativeAudioTracks = function () {
+  var supportsAudioTracks = !!Html5.TEST_VID.audioTracks;
+
+  return supportsAudioTracks;
+};
+
+/**
+ * An array of events available on the Html5 tech.
+ *
+ * @private
+ * @type {Array}
+ */
+Html5.Events = ['loadstart', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'seeking', 'seeked', 'ended', 'durationchange', 'timeupdate', 'progress', 'play', 'pause', 'ratechange', 'volumechange'];
+
+/*
+ * Set the tech's volume control support status
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresVolumeControl = Html5.canControlVolume();
+
+/*
+ * Set the tech's playbackRate support status
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresPlaybackRate = Html5.canControlPlaybackRate();
+
+/*
+ * Set the tech's status on moving the video element.
+ * In iOS, if you move a video element in the DOM, it breaks video playback.
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.movingMediaElementInDOM = !browser.IS_IOS;
+
+/*
+ * Set the the tech's fullscreen resize support status.
+ * HTML video is able to automatically resize when going to fullscreen.
+ * (No longer appears to be used. Can probably be removed.)
+ */
+Html5.prototype.featuresFullscreenResize = true;
+
+/*
+ * Set the tech's progress event support status
+ * (this disables the manual progress events of the Tech)
+ */
+Html5.prototype.featuresProgressEvents = true;
+
+/*
+ * Sets the tech's status on native text track support
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresNativeTextTracks = Html5.supportsNativeTextTracks();
+
+/**
+ * Sets the tech's status on native text track support
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresNativeVideoTracks = Html5.supportsNativeVideoTracks();
+
+/**
+ * Sets the tech's status on native audio track support
+ *
+ * @type {Boolean}
+ */
+Html5.prototype.featuresNativeAudioTracks = Html5.supportsNativeAudioTracks();
+
+// HTML5 Feature detection and Device Fixes --------------------------------- //
+var canPlayType = void 0;
+var mpegurlRE = /^application\/(?:x-|vnd\.apple\.)mpegurl/i;
+var mp4RE = /^video\/mp4/i;
+
+Html5.patchCanPlayType = function () {
+  // Android 4.0 and above can play HLS to some extent but it reports being unable to do so
+  if (browser.ANDROID_VERSION >= 4.0) {
+    if (!canPlayType) {
+      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;
+    }
+
+    Html5.TEST_VID.constructor.prototype.canPlayType = function (type) {
+      if (type && mpegurlRE.test(type)) {
+        return 'maybe';
+      }
+      return canPlayType.call(this, type);
+    };
+  }
+
+  // Override Android 2.2 and less canPlayType method which is broken
+  if (browser.IS_OLD_ANDROID) {
+    if (!canPlayType) {
+      canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;
+    }
+
+    Html5.TEST_VID.constructor.prototype.canPlayType = function (type) {
+      if (type && mp4RE.test(type)) {
+        return 'maybe';
+      }
+      return canPlayType.call(this, type);
+    };
+  }
+};
+
+Html5.unpatchCanPlayType = function () {
+  var r = Html5.TEST_VID.constructor.prototype.canPlayType;
+
+  Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;
+  canPlayType = null;
+  return r;
+};
+
+// by default, patch the video element
+Html5.patchCanPlayType();
+
+Html5.disposeMediaElement = function (el) {
+  if (!el) {
+    return;
+  }
+
+  if (el.parentNode) {
+    el.parentNode.removeChild(el);
+  }
+
+  // remove any child track or source nodes to prevent their loading
+  while (el.hasChildNodes()) {
+    el.removeChild(el.firstChild);
+  }
+
+  // remove any src reference. not setting `src=''` because that causes a warning
+  // in firefox
+  el.removeAttribute('src');
+
+  // force the media element to update its loading state by calling load()
+  // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)
+  if (typeof el.load === 'function') {
+    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)
+    (function () {
+      try {
+        el.load();
+      } catch (e) {
+        // not supported
+      }
+    })();
+  }
+};
+
+Html5.resetMediaElement = function (el) {
+  if (!el) {
+    return;
+  }
+
+  var sources = el.querySelectorAll('source');
+  var i = sources.length;
+
+  while (i--) {
+    el.removeChild(sources[i]);
+  }
+
+  // remove any src reference.
+  // not setting `src=''` because that throws an error
+  el.removeAttribute('src');
+
+  if (typeof el.load === 'function') {
+    // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)
+    (function () {
+      try {
+        el.load();
+      } catch (e) {
+        // satisfy linter
+      }
+    })();
+  }
+};
+
+_component2['default'].registerComponent('Html5', Html5);
+_tech2['default'].registerTech('Html5', Html5);
+exports['default'] = Html5;
+
+},{"../component":5,"../utils/browser.js":78,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/to-title-case.js":89,"../utils/url.js":90,"./tech.js":62,"global/document":92,"global/window":93,"object.assign":136,"tsml":146}],61:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component.js');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _tech = _dereq_('./tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+var _toTitleCase = _dereq_('../utils/to-title-case.js');
+
+var _toTitleCase2 = _interopRequireDefault(_toTitleCase);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file loader.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * The Media Loader is the component that decides which playback technology to load
+ * when the player is initialized.
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends Component
+ * @class MediaLoader
+ */
+var MediaLoader = function (_Component) {
+  _inherits(MediaLoader, _Component);
+
+  function MediaLoader(player, options, ready) {
+    _classCallCheck(this, MediaLoader);
+
+    // If there are no sources when the player is initialized,
+    // load the first supported playback technology.
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options, ready));
+
+    if (!options.playerOptions.sources || options.playerOptions.sources.length === 0) {
+      for (var i = 0, j = options.playerOptions.techOrder; i < j.length; i++) {
+        var techName = (0, _toTitleCase2['default'])(j[i]);
+        var tech = _tech2['default'].getTech(techName);
+
+        // Support old behavior of techs being registered as components.
+        // Remove once that deprecated behavior is removed.
+        if (!techName) {
+          tech = _component2['default'].getComponent(techName);
+        }
+
+        // Check if the browser supports this technology
+        if (tech && tech.isSupported()) {
+          player.loadTech_(techName);
+          break;
+        }
+      }
+    } else {
+      // Loop through playback technologies (HTML5, Flash) and check for support.
+      // Then load the best source.
+      // A few assumptions here:
+      //   All playback technologies respect preload false.
+      player.src(options.playerOptions.sources);
+    }
+    return _this;
+  }
+
+  return MediaLoader;
+}(_component2['default']);
+
+_component2['default'].registerComponent('MediaLoader', MediaLoader);
+exports['default'] = MediaLoader;
+
+},{"../component.js":5,"../utils/to-title-case.js":89,"./tech.js":62}],62:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _htmlTrackElement = _dereq_('../tracks/html-track-element');
+
+var _htmlTrackElement2 = _interopRequireDefault(_htmlTrackElement);
+
+var _htmlTrackElementList = _dereq_('../tracks/html-track-element-list');
+
+var _htmlTrackElementList2 = _interopRequireDefault(_htmlTrackElementList);
+
+var _mergeOptions = _dereq_('../utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _textTrack = _dereq_('../tracks/text-track');
+
+var _textTrack2 = _interopRequireDefault(_textTrack);
+
+var _textTrackList = _dereq_('../tracks/text-track-list');
+
+var _textTrackList2 = _interopRequireDefault(_textTrackList);
+
+var _videoTrackList = _dereq_('../tracks/video-track-list');
+
+var _videoTrackList2 = _interopRequireDefault(_videoTrackList);
+
+var _audioTrackList = _dereq_('../tracks/audio-track-list');
+
+var _audioTrackList2 = _interopRequireDefault(_audioTrackList);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _timeRanges = _dereq_('../utils/time-ranges.js');
+
+var _buffer = _dereq_('../utils/buffer.js');
+
+var _mediaError = _dereq_('../media-error.js');
+
+var _mediaError2 = _interopRequireDefault(_mediaError);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file tech.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Media Technology Controller - Base class for media playback
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * technology controllers like Flash and HTML5
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+function createTrackHelper(self, kind, label, language) {
+  var options = arguments.length <= 4 || arguments[4] === undefined ? {} : arguments[4];
+
+  var tracks = self.textTracks();
+
+  options.kind = kind;
+
+  if (label) {
+    options.label = label;
+  }
+  if (language) {
+    options.language = language;
+  }
+  options.tech = self;
+
+  var track = new _textTrack2['default'](options);
+
+  tracks.addTrack_(track);
+
+  return track;
+}
+
+/**
+ * Base class for media (HTML5 Video, Flash) controllers
+ *
+ * @param {Object=} options Options object
+ * @param {Function=} ready Ready callback function
+ * @extends Component
+ * @class Tech
+ */
+
+var Tech = function (_Component) {
+  _inherits(Tech, _Component);
+
+  function Tech() {
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+    var ready = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1];
+
+    _classCallCheck(this, Tech);
+
+    // we don't want the tech to report user activity automatically.
+    // This is done manually in addControlsListeners
+    options.reportTouchActivity = false;
+
+    // keep track of whether the current source has played at all to
+    // implement a very limited played()
+    var _this = _possibleConstructorReturn(this, _Component.call(this, null, options, ready));
+
+    _this.hasStarted_ = false;
+    _this.on('playing', function () {
+      this.hasStarted_ = true;
+    });
+    _this.on('loadstart', function () {
+      this.hasStarted_ = false;
+    });
+
+    _this.textTracks_ = options.textTracks;
+    _this.videoTracks_ = options.videoTracks;
+    _this.audioTracks_ = options.audioTracks;
+
+    // Manually track progress in cases where the browser/flash player doesn't report it.
+    if (!_this.featuresProgressEvents) {
+      _this.manualProgressOn();
+    }
+
+    // Manually track timeupdates in cases where the browser/flash player doesn't report it.
+    if (!_this.featuresTimeupdateEvents) {
+      _this.manualTimeUpdatesOn();
+    }
+
+    if (options.nativeCaptions === false || options.nativeTextTracks === false) {
+      _this.featuresNativeTextTracks = false;
+    }
+
+    if (!_this.featuresNativeTextTracks) {
+      _this.on('ready', _this.emulateTextTracks);
+    }
+
+    _this.initTextTrackListeners();
+    _this.initTrackListeners();
+
+    // Turn on component tap events
+    _this.emitTapEvents();
+    return _this;
+  }
+
+  /* Fallbacks for unsupported event types
+  ================================================================================ */
+  // Manually trigger progress events based on changes to the buffered amount
+  // Many flash players and older HTML5 browsers don't send progress or progress-like events
+  /**
+   * Turn on progress events
+   *
+   * @method manualProgressOn
+   */
+
+
+  Tech.prototype.manualProgressOn = function manualProgressOn() {
+    this.on('durationchange', this.onDurationChange);
+
+    this.manualProgress = true;
+
+    // Trigger progress watching when a source begins loading
+    this.one('ready', this.trackProgress);
+  };
+
+  /**
+   * Turn off progress events
+   *
+   * @method manualProgressOff
+   */
+
+
+  Tech.prototype.manualProgressOff = function manualProgressOff() {
+    this.manualProgress = false;
+    this.stopTrackingProgress();
+
+    this.off('durationchange', this.onDurationChange);
+  };
+
+  /**
+   * Track progress
+   *
+   * @method trackProgress
+   */
+
+
+  Tech.prototype.trackProgress = function trackProgress() {
+    this.stopTrackingProgress();
+    this.progressInterval = this.setInterval(Fn.bind(this, function () {
+      // Don't trigger unless buffered amount is greater than last time
+
+      var numBufferedPercent = this.bufferedPercent();
+
+      if (this.bufferedPercent_ !== numBufferedPercent) {
+        this.trigger('progress');
+      }
+
+      this.bufferedPercent_ = numBufferedPercent;
+
+      if (numBufferedPercent === 1) {
+        this.stopTrackingProgress();
+      }
+    }), 500);
+  };
+
+  /**
+   * Update duration
+   *
+   * @method onDurationChange
+   */
+
+
+  Tech.prototype.onDurationChange = function onDurationChange() {
+    this.duration_ = this.duration();
+  };
+
+  /**
+   * Create and get TimeRange object for buffering
+   *
+   * @return {TimeRangeObject}
+   * @method buffered
+   */
+
+
+  Tech.prototype.buffered = function buffered() {
+    return (0, _timeRanges.createTimeRange)(0, 0);
+  };
+
+  /**
+   * Get buffered percent
+   *
+   * @return {Number}
+   * @method bufferedPercent
+   */
+
+
+  Tech.prototype.bufferedPercent = function bufferedPercent() {
+    return (0, _buffer.bufferedPercent)(this.buffered(), this.duration_);
+  };
+
+  /**
+   * Stops tracking progress by clearing progress interval
+   *
+   * @method stopTrackingProgress
+   */
+
+
+  Tech.prototype.stopTrackingProgress = function stopTrackingProgress() {
+    this.clearInterval(this.progressInterval);
+  };
+
+  /**
+   * Set event listeners for on play and pause and tracking current time
+   *
+   * @method manualTimeUpdatesOn
+   */
+
+
+  Tech.prototype.manualTimeUpdatesOn = function manualTimeUpdatesOn() {
+    this.manualTimeUpdates = true;
+
+    this.on('play', this.trackCurrentTime);
+    this.on('pause', this.stopTrackingCurrentTime);
+  };
+
+  /**
+   * Remove event listeners for on play and pause and tracking current time
+   *
+   * @method manualTimeUpdatesOff
+   */
+
+
+  Tech.prototype.manualTimeUpdatesOff = function manualTimeUpdatesOff() {
+    this.manualTimeUpdates = false;
+    this.stopTrackingCurrentTime();
+    this.off('play', this.trackCurrentTime);
+    this.off('pause', this.stopTrackingCurrentTime);
+  };
+
+  /**
+   * Tracks current time
+   *
+   * @method trackCurrentTime
+   */
+
+
+  Tech.prototype.trackCurrentTime = function trackCurrentTime() {
+    if (this.currentTimeInterval) {
+      this.stopTrackingCurrentTime();
+    }
+    this.currentTimeInterval = this.setInterval(function () {
+      this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });
+
+      // 42 = 24 fps // 250 is what Webkit uses // FF uses 15
+    }, 250);
+  };
+
+  /**
+   * Turn off play progress tracking (when paused or dragging)
+   *
+   * @method stopTrackingCurrentTime
+   */
+
+
+  Tech.prototype.stopTrackingCurrentTime = function stopTrackingCurrentTime() {
+    this.clearInterval(this.currentTimeInterval);
+
+    // #1002 - if the video ends right before the next timeupdate would happen,
+    // the progress bar won't make it all the way to the end
+    this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });
+  };
+
+  /**
+   * Turn off any manual progress or timeupdate tracking
+   *
+   * @method dispose
+   */
+
+
+  Tech.prototype.dispose = function dispose() {
+
+    // clear out all tracks because we can't reuse them between techs
+    this.clearTracks(['audio', 'video', 'text']);
+
+    // Turn off any manual progress or timeupdate tracking
+    if (this.manualProgress) {
+      this.manualProgressOff();
+    }
+
+    if (this.manualTimeUpdates) {
+      this.manualTimeUpdatesOff();
+    }
+
+    _Component.prototype.dispose.call(this);
+  };
+
+  /**
+   * clear out a track list, or multiple track lists
+   *
+   * Note: Techs without source handlers should call this between
+   * sources for video & audio tracks, as usually you don't want
+   * to use them between tracks and we have no automatic way to do
+   * it for you
+   *
+   * @method clearTracks
+   * @param {Array|String} types type(s) of track lists to empty
+   */
+
+
+  Tech.prototype.clearTracks = function clearTracks(types) {
+    var _this2 = this;
+
+    types = [].concat(types);
+    // clear out all tracks because we can't reuse them between techs
+    types.forEach(function (type) {
+      var list = _this2[type + 'Tracks']() || [];
+      var i = list.length;
+
+      while (i--) {
+        var track = list[i];
+
+        if (type === 'text') {
+          _this2.removeRemoteTextTrack(track);
+        }
+        list.removeTrack_(track);
+      }
+    });
+  };
+
+  /**
+   * Reset the tech. Removes all sources and resets readyState.
+   *
+   * @method reset
+   */
+
+
+  Tech.prototype.reset = function reset() {};
+
+  /**
+   * When invoked without an argument, returns a MediaError object
+   * representing the current error state of the player or null if
+   * there is no error. When invoked with an argument, set the current
+   * error state of the player.
+   * @param {MediaError=} err    Optional an error object
+   * @return {MediaError}        the current error object or null
+   * @method error
+   */
+
+
+  Tech.prototype.error = function error(err) {
+    if (err !== undefined) {
+      this.error_ = new _mediaError2['default'](err);
+      this.trigger('error');
+    }
+    return this.error_;
+  };
+
+  /**
+   * Return the time ranges that have been played through for the
+   * current source. This implementation is incomplete. It does not
+   * track the played time ranges, only whether the source has played
+   * at all or not.
+   * @return {TimeRangeObject} a single time range if this video has
+   * played or an empty set of ranges if not.
+   * @method played
+   */
+
+
+  Tech.prototype.played = function played() {
+    if (this.hasStarted_) {
+      return (0, _timeRanges.createTimeRange)(0, 0);
+    }
+    return (0, _timeRanges.createTimeRange)();
+  };
+
+  /**
+   * Set current time
+   *
+   * @method setCurrentTime
+   */
+
+
+  Tech.prototype.setCurrentTime = function setCurrentTime() {
+    // improve the accuracy of manual timeupdates
+    if (this.manualTimeUpdates) {
+      this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });
+    }
+  };
+
+  /**
+   * Initialize texttrack listeners
+   *
+   * @method initTextTrackListeners
+   */
+
+
+  Tech.prototype.initTextTrackListeners = function initTextTrackListeners() {
+    var textTrackListChanges = Fn.bind(this, function () {
+      this.trigger('texttrackchange');
+    });
+
+    var tracks = this.textTracks();
+
+    if (!tracks) {
+      return;
+    }
+
+    tracks.addEventListener('removetrack', textTrackListChanges);
+    tracks.addEventListener('addtrack', textTrackListChanges);
+
+    this.on('dispose', Fn.bind(this, function () {
+      tracks.removeEventListener('removetrack', textTrackListChanges);
+      tracks.removeEventListener('addtrack', textTrackListChanges);
+    }));
+  };
+
+  /**
+   * Initialize audio and video track listeners
+   *
+   * @method initTrackListeners
+   */
+
+
+  Tech.prototype.initTrackListeners = function initTrackListeners() {
+    var _this3 = this;
+
+    var trackTypes = ['video', 'audio'];
+
+    trackTypes.forEach(function (type) {
+      var trackListChanges = function trackListChanges() {
+        _this3.trigger(type + 'trackchange');
+      };
+
+      var tracks = _this3[type + 'Tracks']();
+
+      tracks.addEventListener('removetrack', trackListChanges);
+      tracks.addEventListener('addtrack', trackListChanges);
+
+      _this3.on('dispose', function () {
+        tracks.removeEventListener('removetrack', trackListChanges);
+        tracks.removeEventListener('addtrack', trackListChanges);
+      });
+    });
+  };
+
+  /**
+   * Emulate texttracks
+   *
+   * @method emulateTextTracks
+   */
+
+
+  Tech.prototype.emulateTextTracks = function emulateTextTracks() {
+    var _this4 = this;
+
+    var tracks = this.textTracks();
+
+    if (!tracks) {
+      return;
+    }
+
+    if (!_window2['default'].WebVTT && this.el().parentNode !== null && this.el().parentNode !== undefined) {
+      (function () {
+        var script = _document2['default'].createElement('script');
+
+        script.src = _this4.options_['vtt.js'] || 'https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js';
+        script.onload = function () {
+          _this4.trigger('vttjsloaded');
+        };
+        script.onerror = function () {
+          _this4.trigger('vttjserror');
+        };
+        _this4.on('dispose', function () {
+          script.onload = null;
+          script.onerror = null;
+        });
+        // but have not loaded yet and we set it to true before the inject so that
+        // we don't overwrite the injected window.WebVTT if it loads right away
+        _window2['default'].WebVTT = true;
+        _this4.el().parentNode.appendChild(script);
+      })();
+    }
+
+    var updateDisplay = function updateDisplay() {
+      return _this4.trigger('texttrackchange');
+    };
+    var textTracksChanges = function textTracksChanges() {
+      updateDisplay();
+
+      for (var i = 0; i < tracks.length; i++) {
+        var track = tracks[i];
+
+        track.removeEventListener('cuechange', updateDisplay);
+        if (track.mode === 'showing') {
+          track.addEventListener('cuechange', updateDisplay);
+        }
+      }
+    };
+
+    textTracksChanges();
+    tracks.addEventListener('change', textTracksChanges);
+
+    this.on('dispose', function () {
+      tracks.removeEventListener('change', textTracksChanges);
+    });
+  };
+
+  /**
+   * Get videotracks
+   *
+   * @returns {VideoTrackList}
+   * @method videoTracks
+   */
+
+
+  Tech.prototype.videoTracks = function videoTracks() {
+    this.videoTracks_ = this.videoTracks_ || new _videoTrackList2['default']();
+    return this.videoTracks_;
+  };
+
+  /**
+   * Get audiotracklist
+   *
+   * @returns {AudioTrackList}
+   * @method audioTracks
+   */
+
+
+  Tech.prototype.audioTracks = function audioTracks() {
+    this.audioTracks_ = this.audioTracks_ || new _audioTrackList2['default']();
+    return this.audioTracks_;
+  };
+
+  /*
+   * Provide default methods for text tracks.
+   *
+   * Html5 tech overrides these.
+   */
+
+  /**
+   * Get texttracks
+   *
+   * @returns {TextTrackList}
+   * @method textTracks
+   */
+
+
+  Tech.prototype.textTracks = function textTracks() {
+    this.textTracks_ = this.textTracks_ || new _textTrackList2['default']();
+    return this.textTracks_;
+  };
+
+  /**
+   * Get remote texttracks
+   *
+   * @returns {TextTrackList}
+   * @method remoteTextTracks
+   */
+
+
+  Tech.prototype.remoteTextTracks = function remoteTextTracks() {
+    this.remoteTextTracks_ = this.remoteTextTracks_ || new _textTrackList2['default']();
+    return this.remoteTextTracks_;
+  };
+
+  /**
+   * Get remote htmltrackelements
+   *
+   * @returns {HTMLTrackElementList}
+   * @method remoteTextTrackEls
+   */
+
+
+  Tech.prototype.remoteTextTrackEls = function remoteTextTrackEls() {
+    this.remoteTextTrackEls_ = this.remoteTextTrackEls_ || new _htmlTrackElementList2['default']();
+    return this.remoteTextTrackEls_;
+  };
+
+  /**
+   * Creates and returns a remote text track object
+   *
+   * @param {String} kind Text track kind (subtitles, captions, descriptions
+   *                                       chapters and metadata)
+   * @param {String=} label Label to identify the text track
+   * @param {String=} language Two letter language abbreviation
+   * @return {TextTrackObject}
+   * @method addTextTrack
+   */
+
+
+  Tech.prototype.addTextTrack = function addTextTrack(kind, label, language) {
+    if (!kind) {
+      throw new Error('TextTrack kind is required but was not provided');
+    }
+
+    return createTrackHelper(this, kind, label, language);
+  };
+
+  /**
+   * Creates a remote text track object and returns a emulated html track element
+   *
+   * @param {Object} options The object should contain values for
+   * kind, language, label and src (location of the WebVTT file)
+   * @return {HTMLTrackElement}
+   * @method addRemoteTextTrack
+   */
+
+
+  Tech.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) {
+    var track = (0, _mergeOptions2['default'])(options, {
+      tech: this
+    });
+
+    var htmlTrackElement = new _htmlTrackElement2['default'](track);
+
+    // store HTMLTrackElement and TextTrack to remote list
+    this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);
+    this.remoteTextTracks().addTrack_(htmlTrackElement.track);
+
+    // must come after remoteTextTracks()
+    this.textTracks().addTrack_(htmlTrackElement.track);
+
+    return htmlTrackElement;
+  };
+
+  /**
+   * Remove remote texttrack
+   *
+   * @param {TextTrackObject} track Texttrack to remove
+   * @method removeRemoteTextTrack
+   */
+
+
+  Tech.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {
+    this.textTracks().removeTrack_(track);
+
+    var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);
+
+    // remove HTMLTrackElement and TextTrack from remote list
+    this.remoteTextTrackEls().removeTrackElement_(trackElement);
+    this.remoteTextTracks().removeTrack_(track);
+  };
+
+  /**
+   * Provide a default setPoster method for techs
+   * Poster support for techs should be optional, so we don't want techs to
+   * break if they don't have a way to set a poster.
+   *
+   * @method setPoster
+   */
+
+
+  Tech.prototype.setPoster = function setPoster() {};
+
+  /*
+   * Check if the tech can support the given type
+   *
+   * The base tech does not support any type, but source handlers might
+   * overwrite this.
+   *
+   * @param  {String} type    The mimetype to check
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+
+
+  Tech.prototype.canPlayType = function canPlayType() {
+    return '';
+  };
+
+  /*
+   * Return whether the argument is a Tech or not.
+   * Can be passed either a Class like `Html5` or a instance like `player.tech_`
+   *
+   * @param {Object} component An item to check
+   * @return {Boolean}         Whether it is a tech or not
+   */
+
+
+  Tech.isTech = function isTech(component) {
+    return component.prototype instanceof Tech || component instanceof Tech || component === Tech;
+  };
+
+  /**
+   * Registers a Tech
+   *
+   * @param {String} name Name of the Tech to register
+   * @param {Object} tech The tech to register
+   * @static
+   * @method registerComponent
+   */
+
+
+  Tech.registerTech = function registerTech(name, tech) {
+    if (!Tech.techs_) {
+      Tech.techs_ = {};
+    }
+
+    if (!Tech.isTech(tech)) {
+      throw new Error('Tech ' + name + ' must be a Tech');
+    }
+
+    Tech.techs_[name] = tech;
+    return tech;
+  };
+
+  /**
+   * Gets a component by name
+   *
+   * @param {String} name Name of the component to get
+   * @return {Component}
+   * @static
+   * @method getComponent
+   */
+
+
+  Tech.getTech = function getTech(name) {
+    if (Tech.techs_ && Tech.techs_[name]) {
+      return Tech.techs_[name];
+    }
+
+    if (_window2['default'] && _window2['default'].videojs && _window2['default'].videojs[name]) {
+      _log2['default'].warn('The ' + name + ' tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)');
+      return _window2['default'].videojs[name];
+    }
+  };
+
+  return Tech;
+}(_component2['default']);
+
+/**
+ * List of associated text tracks
+ *
+ * @type {TextTrackList}
+ * @private
+ */
+
+
+Tech.prototype.textTracks_; // eslint-disable-line
+
+/**
+ * List of associated audio tracks
+ *
+ * @type {AudioTrackList}
+ * @private
+ */
+Tech.prototype.audioTracks_; // eslint-disable-line
+
+/**
+ * List of associated video tracks
+ *
+ * @type {VideoTrackList}
+ * @private
+ */
+Tech.prototype.videoTracks_; // eslint-disable-line
+
+Tech.prototype.featuresVolumeControl = true;
+
+// Resizing plugins using request fullscreen reloads the plugin
+Tech.prototype.featuresFullscreenResize = false;
+Tech.prototype.featuresPlaybackRate = false;
+
+// Optional events that we can manually mimic with timers
+// currently not triggered by video-js-swf
+Tech.prototype.featuresProgressEvents = false;
+Tech.prototype.featuresTimeupdateEvents = false;
+
+Tech.prototype.featuresNativeTextTracks = false;
+
+/**
+ * A functional mixin for techs that want to use the Source Handler pattern.
+ *
+ * ##### EXAMPLE:
+ *
+ *   Tech.withSourceHandlers.call(MyTech);
+ *
+ */
+Tech.withSourceHandlers = function (_Tech) {
+
+  /**
+   * Register a source handler
+   * Source handlers are scripts for handling specific formats.
+   * The source handler pattern is used for adaptive formats (HLS, DASH) that
+   * manually load video data and feed it into a Source Buffer (Media Source Extensions)
+   * @param  {Function} handler  The source handler
+   * @param  {Boolean}  first    Register it before any existing handlers
+   */
+  _Tech.registerSourceHandler = function (handler, index) {
+    var handlers = _Tech.sourceHandlers;
+
+    if (!handlers) {
+      handlers = _Tech.sourceHandlers = [];
+    }
+
+    if (index === undefined) {
+      // add to the end of the list
+      index = handlers.length;
+    }
+
+    handlers.splice(index, 0, handler);
+  };
+
+  /**
+   * Check if the tech can support the given type
+   * @param  {String} type    The mimetype to check
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  _Tech.canPlayType = function (type) {
+    var handlers = _Tech.sourceHandlers || [];
+    var can = void 0;
+
+    for (var i = 0; i < handlers.length; i++) {
+      can = handlers[i].canPlayType(type);
+
+      if (can) {
+        return can;
+      }
+    }
+
+    return '';
+  };
+
+  /**
+   * Return the first source handler that supports the source
+   * TODO: Answer question: should 'probably' be prioritized over 'maybe'
+   * @param  {Object} source  The source object
+   * @param  {Object} options The options passed to the tech
+   * @returns {Object}       The first source handler that supports the source
+   * @returns {null}         Null if no source handler is found
+   */
+  _Tech.selectSourceHandler = function (source, options) {
+    var handlers = _Tech.sourceHandlers || [];
+    var can = void 0;
+
+    for (var i = 0; i < handlers.length; i++) {
+      can = handlers[i].canHandleSource(source, options);
+
+      if (can) {
+        return handlers[i];
+      }
+    }
+
+    return null;
+  };
+
+  /**
+   * Check if the tech can support the given source
+   * @param  {Object} srcObj  The source object
+   * @param  {Object} options The options passed to the tech
+   * @return {String}         'probably', 'maybe', or '' (empty string)
+   */
+  _Tech.canPlaySource = function (srcObj, options) {
+    var sh = _Tech.selectSourceHandler(srcObj, options);
+
+    if (sh) {
+      return sh.canHandleSource(srcObj, options);
+    }
+
+    return '';
+  };
+
+  /**
+   * When using a source handler, prefer its implementation of
+   * any function normally provided by the tech.
+   */
+  var deferrable = ['seekable', 'duration'];
+
+  deferrable.forEach(function (fnName) {
+    var originalFn = this[fnName];
+
+    if (typeof originalFn !== 'function') {
+      return;
+    }
+
+    this[fnName] = function () {
+      if (this.sourceHandler_ && this.sourceHandler_[fnName]) {
+        return this.sourceHandler_[fnName].apply(this.sourceHandler_, arguments);
+      }
+      return originalFn.apply(this, arguments);
+    };
+  }, _Tech.prototype);
+
+  /**
+   * Create a function for setting the source using a source object
+   * and source handlers.
+   * Should never be called unless a source handler was found.
+   * @param {Object} source  A source object with src and type keys
+   * @return {Tech} self
+   */
+  _Tech.prototype.setSource = function (source) {
+    var sh = _Tech.selectSourceHandler(source, this.options_);
+
+    if (!sh) {
+      // Fall back to a native source hander when unsupported sources are
+      // deliberately set
+      if (_Tech.nativeSourceHandler) {
+        sh = _Tech.nativeSourceHandler;
+      } else {
+        _log2['default'].error('No source hander found for the current source.');
+      }
+    }
+
+    // Dispose any existing source handler
+    this.disposeSourceHandler();
+    this.off('dispose', this.disposeSourceHandler);
+
+    // if we have a source and get another one
+    // then we are loading something new
+    // than clear all of our current tracks
+    if (this.currentSource_) {
+      this.clearTracks(['audio', 'video']);
+
+      this.currentSource_ = null;
+    }
+
+    if (sh !== _Tech.nativeSourceHandler) {
+
+      this.currentSource_ = source;
+
+      // Catch if someone replaced the src without calling setSource.
+      // If they do, set currentSource_ to null and dispose our source handler.
+      this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);
+      this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+      this.one(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);
+    }
+
+    this.sourceHandler_ = sh.handleSource(source, this, this.options_);
+    this.on('dispose', this.disposeSourceHandler);
+
+    return this;
+  };
+
+  // On the first loadstart after setSource
+  _Tech.prototype.firstLoadStartListener_ = function () {
+    this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+  };
+
+  // On successive loadstarts when setSource has not been called again
+  _Tech.prototype.successiveLoadStartListener_ = function () {
+    this.currentSource_ = null;
+    this.disposeSourceHandler();
+    this.one(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+  };
+
+  /*
+   * Clean up any existing source handler
+   */
+  _Tech.prototype.disposeSourceHandler = function () {
+    if (this.sourceHandler_ && this.sourceHandler_.dispose) {
+      this.off(this.el_, 'loadstart', _Tech.prototype.firstLoadStartListener_);
+      this.off(this.el_, 'loadstart', _Tech.prototype.successiveLoadStartListener_);
+      this.sourceHandler_.dispose();
+      this.sourceHandler_ = null;
+    }
+  };
+};
+
+_component2['default'].registerComponent('Tech', Tech);
+// Old name for Tech
+_component2['default'].registerComponent('MediaTechController', Tech);
+Tech.registerTech('Tech', Tech);
+exports['default'] = Tech;
+
+},{"../component":5,"../media-error.js":46,"../tracks/audio-track-list":63,"../tracks/html-track-element":66,"../tracks/html-track-element-list":65,"../tracks/text-track":72,"../tracks/text-track-list":70,"../tracks/video-track-list":76,"../utils/buffer.js":79,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/time-ranges.js":88,"global/document":92,"global/window":93}],63:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackList = _dereq_('./track-list');
+
+var _trackList2 = _interopRequireDefault(_trackList);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file audio-track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * anywhere we call this function we diverge from the spec
+ * as we only support one enabled audiotrack at a time
+ *
+ * @param {Array|AudioTrackList} list list to work on
+ * @param {AudioTrack} track the track to skip
+ */
+var disableOthers = function disableOthers(list, track) {
+  for (var i = 0; i < list.length; i++) {
+    if (track.id === list[i].id) {
+      continue;
+    }
+    // another audio track is enabled, disable it
+    list[i].enabled = false;
+  }
+};
+
+/**
+ * A list of possible audio tracks. All functionality is in the
+ * base class Tracklist and the spec for AudioTrackList is located at:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist
+ *
+ * interface AudioTrackList : EventTarget {
+ *   readonly attribute unsigned long length;
+ *   getter AudioTrack (unsigned long index);
+ *   AudioTrack? getTrackById(DOMString id);
+ *
+ *   attribute EventHandler onchange;
+ *   attribute EventHandler onaddtrack;
+ *   attribute EventHandler onremovetrack;
+ * };
+ *
+ * @param {AudioTrack[]} tracks a list of audio tracks to instantiate the list with
+ * @extends TrackList
+ * @class AudioTrackList
+ */
+
+var AudioTrackList = function (_TrackList) {
+  _inherits(AudioTrackList, _TrackList);
+
+  function AudioTrackList() {
+    var _this, _ret;
+
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, AudioTrackList);
+
+    var list = void 0;
+
+    // make sure only 1 track is enabled
+    // sorted from last index to first index
+    for (var i = tracks.length - 1; i >= 0; i--) {
+      if (tracks[i].enabled) {
+        disableOthers(tracks, tracks[i]);
+        break;
+      }
+    }
+
+    // IE8 forces us to implement inheritance ourselves
+    // as it does not support Object.defineProperty properly
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+      for (var prop in _trackList2['default'].prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = _trackList2['default'].prototype[prop];
+        }
+      }
+      for (var _prop in AudioTrackList.prototype) {
+        if (_prop !== 'constructor') {
+          list[_prop] = AudioTrackList.prototype[_prop];
+        }
+      }
+    }
+
+    list = (_this = _possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);
+    list.changing_ = false;
+
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  AudioTrackList.prototype.addTrack_ = function addTrack_(track) {
+    var _this2 = this;
+
+    if (track.enabled) {
+      disableOthers(this, track);
+    }
+
+    _TrackList.prototype.addTrack_.call(this, track);
+    // native tracks don't have this
+    if (!track.addEventListener) {
+      return;
+    }
+
+    track.addEventListener('enabledchange', function () {
+      // when we are disabling other tracks (since we don't support
+      // more than one track at a time) we will set changing_
+      // to true so that we don't trigger additional change events
+      if (_this2.changing_) {
+        return;
+      }
+      _this2.changing_ = true;
+      disableOthers(_this2, track);
+      _this2.changing_ = false;
+      _this2.trigger('change');
+    });
+  };
+
+  AudioTrackList.prototype.addTrack = function addTrack(track) {
+    this.addTrack_(track);
+  };
+
+  AudioTrackList.prototype.removeTrack = function removeTrack(track) {
+    _TrackList.prototype.removeTrack_.call(this, track);
+  };
+
+  return AudioTrackList;
+}(_trackList2['default']);
+
+exports['default'] = AudioTrackList;
+
+},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],64:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackEnums = _dereq_('./track-enums');
+
+var _track = _dereq_('./track');
+
+var _track2 = _interopRequireDefault(_track);
+
+var _mergeOptions = _dereq_('../utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * A single audio text track as defined in:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack
+ *
+ * interface AudioTrack {
+ *   readonly attribute DOMString id;
+ *   readonly attribute DOMString kind;
+ *   readonly attribute DOMString label;
+ *   readonly attribute DOMString language;
+ *   attribute boolean enabled;
+ * };
+ *
+ * @param {Object=} options Object of option names and values
+ * @class AudioTrack
+ */
+var AudioTrack = function (_Track) {
+  _inherits(AudioTrack, _Track);
+
+  function AudioTrack() {
+    var _this, _ret;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, AudioTrack);
+
+    var settings = (0, _mergeOptions2['default'])(options, {
+      kind: _trackEnums.AudioTrackKind[options.kind] || ''
+    });
+    // on IE8 this will be a document element
+    // for every other browser this will be a normal object
+    var track = (_this = _possibleConstructorReturn(this, _Track.call(this, settings)), _this);
+    var enabled = false;
+
+    if (browser.IS_IE8) {
+      for (var prop in AudioTrack.prototype) {
+        if (prop !== 'constructor') {
+          track[prop] = AudioTrack.prototype[prop];
+        }
+      }
+    }
+
+    Object.defineProperty(track, 'enabled', {
+      get: function get() {
+        return enabled;
+      },
+      set: function set(newEnabled) {
+        // an invalid or unchanged value
+        if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {
+          return;
+        }
+        enabled = newEnabled;
+        this.trigger('enabledchange');
+      }
+    });
+
+    // if the user sets this track to selected then
+    // set selected to that true value otherwise
+    // we keep it false
+    if (settings.enabled) {
+      track.enabled = settings.enabled;
+    }
+    track.loaded_ = true;
+
+    return _ret = track, _possibleConstructorReturn(_this, _ret);
+  }
+
+  return AudioTrack;
+}(_track2['default']);
+
+exports['default'] = AudioTrack;
+
+},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],65:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * @file html-track-element-list.js
+                                                                                                                                                           */
+
+var HtmlTrackElementList = function () {
+  function HtmlTrackElementList() {
+    var trackElements = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, HtmlTrackElementList);
+
+    var list = this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+
+      for (var prop in HtmlTrackElementList.prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = HtmlTrackElementList.prototype[prop];
+        }
+      }
+    }
+
+    list.trackElements_ = [];
+
+    Object.defineProperty(list, 'length', {
+      get: function get() {
+        return this.trackElements_.length;
+      }
+    });
+
+    for (var i = 0, length = trackElements.length; i < length; i++) {
+      list.addTrackElement_(trackElements[i]);
+    }
+
+    if (browser.IS_IE8) {
+      return list;
+    }
+  }
+
+  HtmlTrackElementList.prototype.addTrackElement_ = function addTrackElement_(trackElement) {
+    this.trackElements_.push(trackElement);
+  };
+
+  HtmlTrackElementList.prototype.getTrackElementByTrack_ = function getTrackElementByTrack_(track) {
+    var trackElement_ = void 0;
+
+    for (var i = 0, length = this.trackElements_.length; i < length; i++) {
+      if (track === this.trackElements_[i].track) {
+        trackElement_ = this.trackElements_[i];
+
+        break;
+      }
+    }
+
+    return trackElement_;
+  };
+
+  HtmlTrackElementList.prototype.removeTrackElement_ = function removeTrackElement_(trackElement) {
+    for (var i = 0, length = this.trackElements_.length; i < length; i++) {
+      if (trackElement === this.trackElements_[i]) {
+        this.trackElements_.splice(i, 1);
+
+        break;
+      }
+    }
+  };
+
+  return HtmlTrackElementList;
+}();
+
+exports['default'] = HtmlTrackElementList;
+
+},{"../utils/browser.js":78,"global/document":92}],66:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _eventTarget = _dereq_('../event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+var _textTrack = _dereq_('../tracks/text-track');
+
+var _textTrack2 = _interopRequireDefault(_textTrack);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file html-track-element.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+var NONE = 0;
+var LOADING = 1;
+var LOADED = 2;
+var ERROR = 3;
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement
+ *
+ * interface HTMLTrackElement : HTMLElement {
+ *   attribute DOMString kind;
+ *   attribute DOMString src;
+ *   attribute DOMString srclang;
+ *   attribute DOMString label;
+ *   attribute boolean default;
+ *
+ *   const unsigned short NONE = 0;
+ *   const unsigned short LOADING = 1;
+ *   const unsigned short LOADED = 2;
+ *   const unsigned short ERROR = 3;
+ *   readonly attribute unsigned short readyState;
+ *
+ *   readonly attribute TextTrack track;
+ * };
+ *
+ * @param {Object} options TextTrack configuration
+ * @class HTMLTrackElement
+ */
+
+var HTMLTrackElement = function (_EventTarget) {
+  _inherits(HTMLTrackElement, _EventTarget);
+
+  function HTMLTrackElement() {
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, HTMLTrackElement);
+
+    var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
+
+    var readyState = void 0;
+    var trackElement = _this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      trackElement = _document2['default'].createElement('custom');
+
+      for (var prop in HTMLTrackElement.prototype) {
+        if (prop !== 'constructor') {
+          trackElement[prop] = HTMLTrackElement.prototype[prop];
+        }
+      }
+    }
+
+    var track = new _textTrack2['default'](options);
+
+    trackElement.kind = track.kind;
+    trackElement.src = track.src;
+    trackElement.srclang = track.language;
+    trackElement.label = track.label;
+    trackElement['default'] = track['default'];
+
+    Object.defineProperty(trackElement, 'readyState', {
+      get: function get() {
+        return readyState;
+      }
+    });
+
+    Object.defineProperty(trackElement, 'track', {
+      get: function get() {
+        return track;
+      }
+    });
+
+    readyState = NONE;
+
+    track.addEventListener('loadeddata', function () {
+      readyState = LOADED;
+
+      trackElement.trigger({
+        type: 'load',
+        target: trackElement
+      });
+    });
+
+    if (browser.IS_IE8) {
+      var _ret;
+
+      return _ret = trackElement, _possibleConstructorReturn(_this, _ret);
+    }
+    return _this;
+  }
+
+  return HTMLTrackElement;
+}(_eventTarget2['default']);
+
+HTMLTrackElement.prototype.allowedEvents_ = {
+  load: 'load'
+};
+
+HTMLTrackElement.NONE = NONE;
+HTMLTrackElement.LOADING = LOADING;
+HTMLTrackElement.LOADED = LOADED;
+HTMLTrackElement.ERROR = ERROR;
+
+exports['default'] = HTMLTrackElement;
+
+},{"../event-target":42,"../tracks/text-track":72,"../utils/browser.js":78,"global/document":92}],67:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
+                                                                                                                                                           * @file text-track-cue-list.js
+                                                                                                                                                           */
+
+
+/**
+ * A List of text track cues as defined in:
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist
+ *
+ * interface TextTrackCueList {
+ *   readonly attribute unsigned long length;
+ *   getter TextTrackCue (unsigned long index);
+ *   TextTrackCue? getCueById(DOMString id);
+ * };
+ *
+ * @param {Array} cues A list of cues to be initialized with
+ * @class TextTrackCueList
+ */
+
+var TextTrackCueList = function () {
+  function TextTrackCueList(cues) {
+    _classCallCheck(this, TextTrackCueList);
+
+    var list = this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+
+      for (var prop in TextTrackCueList.prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = TextTrackCueList.prototype[prop];
+        }
+      }
+    }
+
+    TextTrackCueList.prototype.setCues_.call(list, cues);
+
+    Object.defineProperty(list, 'length', {
+      get: function get() {
+        return this.length_;
+      }
+    });
+
+    if (browser.IS_IE8) {
+      return list;
+    }
+  }
+
+  /**
+   * A setter for cues in this list
+   *
+   * @param {Array} cues an array of cues
+   * @method setCues_
+   * @private
+   */
+
+
+  TextTrackCueList.prototype.setCues_ = function setCues_(cues) {
+    var oldLength = this.length || 0;
+    var i = 0;
+    var l = cues.length;
+
+    this.cues_ = cues;
+    this.length_ = cues.length;
+
+    var defineProp = function defineProp(index) {
+      if (!('' + index in this)) {
+        Object.defineProperty(this, '' + index, {
+          get: function get() {
+            return this.cues_[index];
+          }
+        });
+      }
+    };
+
+    if (oldLength < l) {
+      i = oldLength;
+
+      for (; i < l; i++) {
+        defineProp.call(this, i);
+      }
+    }
+  };
+
+  /**
+   * Get a cue that is currently in the Cue list by id
+   *
+   * @param {String} id
+   * @method getCueById
+   * @return {Object} a single cue
+   */
+
+
+  TextTrackCueList.prototype.getCueById = function getCueById(id) {
+    var result = null;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      var cue = this[i];
+
+      if (cue.id === id) {
+        result = cue;
+        break;
+      }
+    }
+
+    return result;
+  };
+
+  return TextTrackCueList;
+}();
+
+exports['default'] = TextTrackCueList;
+
+},{"../utils/browser.js":78,"global/document":92}],68:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-display.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+var darkGray = '#222';
+var lightGray = '#ccc';
+var fontMap = {
+  monospace: 'monospace',
+  sansSerif: 'sans-serif',
+  serif: 'serif',
+  monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace',
+  monospaceSerif: '"Courier New", monospace',
+  proportionalSansSerif: 'sans-serif',
+  proportionalSerif: 'serif',
+  casual: '"Comic Sans MS", Impact, fantasy',
+  script: '"Monotype Corsiva", cursive',
+  smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif'
+};
+
+/**
+ * Add cue HTML to display
+ *
+ * @param {Number} color Hex number for color, like #f0e
+ * @param {Number} opacity Value for opacity,0.0 - 1.0
+ * @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'
+ * @method constructColor
+ */
+function constructColor(color, opacity) {
+  return 'rgba(' +
+  // color looks like "#f0e"
+  parseInt(color[1] + color[1], 16) + ',' + parseInt(color[2] + color[2], 16) + ',' + parseInt(color[3] + color[3], 16) + ',' + opacity + ')';
+}
+
+/**
+ * Try to update style
+ * Some style changes will throw an error, particularly in IE8. Those should be noops.
+ *
+ * @param {Element} el The element to be styles
+ * @param {CSSProperty} style The CSS property to be styled
+ * @param {CSSStyle} rule The actual style to be applied to the property
+ * @method tryUpdateStyle
+ */
+function tryUpdateStyle(el, style, rule) {
+  try {
+    el.style[style] = rule;
+  } catch (e) {
+
+    // Satisfies linter.
+    return;
+  }
+}
+
+/**
+ * The component for displaying text track cues
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @param {Function=} ready    Ready callback function
+ * @extends Component
+ * @class TextTrackDisplay
+ */
+
+var TextTrackDisplay = function (_Component) {
+  _inherits(TextTrackDisplay, _Component);
+
+  function TextTrackDisplay(player, options, ready) {
+    _classCallCheck(this, TextTrackDisplay);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options, ready));
+
+    player.on('loadstart', Fn.bind(_this, _this.toggleDisplay));
+    player.on('texttrackchange', Fn.bind(_this, _this.updateDisplay));
+
+    // This used to be called during player init, but was causing an error
+    // if a track should show by default and the display hadn't loaded yet.
+    // Should probably be moved to an external track loader when we support
+    // tracks that don't need a display.
+    player.ready(Fn.bind(_this, function () {
+      if (player.tech_ && player.tech_.featuresNativeTextTracks) {
+        this.hide();
+        return;
+      }
+
+      player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));
+
+      var tracks = this.options_.playerOptions.tracks || [];
+
+      for (var i = 0; i < tracks.length; i++) {
+        this.player_.addRemoteTextTrack(tracks[i]);
+      }
+
+      var modes = { captions: 1, subtitles: 1 };
+      var trackList = this.player_.textTracks();
+      var firstDesc = void 0;
+      var firstCaptions = void 0;
+
+      if (trackList) {
+        for (var _i = 0; _i < trackList.length; _i++) {
+          var track = trackList[_i];
+
+          if (track['default']) {
+            if (track.kind === 'descriptions' && !firstDesc) {
+              firstDesc = track;
+            } else if (track.kind in modes && !firstCaptions) {
+              firstCaptions = track;
+            }
+          }
+        }
+
+        // We want to show the first default track but captions and subtitles
+        // take precedence over descriptions.
+        // So, display the first default captions or subtitles track
+        // and otherwise the first default descriptions track.
+        if (firstCaptions) {
+          firstCaptions.mode = 'showing';
+        } else if (firstDesc) {
+          firstDesc.mode = 'showing';
+        }
+      }
+    }));
+    return _this;
+  }
+
+  /**
+   * Toggle display texttracks
+   *
+   * @method toggleDisplay
+   */
+
+
+  TextTrackDisplay.prototype.toggleDisplay = function toggleDisplay() {
+    if (this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks) {
+      this.hide();
+    } else {
+      this.show();
+    }
+  };
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  TextTrackDisplay.prototype.createEl = function createEl() {
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-text-track-display'
+    }, {
+      'aria-live': 'assertive',
+      'aria-atomic': 'true'
+    });
+  };
+
+  /**
+   * Clear display texttracks
+   *
+   * @method clearDisplay
+   */
+
+
+  TextTrackDisplay.prototype.clearDisplay = function clearDisplay() {
+    if (typeof _window2['default'].WebVTT === 'function') {
+      _window2['default'].WebVTT.processCues(_window2['default'], [], this.el_);
+    }
+  };
+
+  /**
+   * Update display texttracks
+   *
+   * @method updateDisplay
+   */
+
+
+  TextTrackDisplay.prototype.updateDisplay = function updateDisplay() {
+    var tracks = this.player_.textTracks();
+
+    this.clearDisplay();
+
+    if (!tracks) {
+      return;
+    }
+
+    // Track display prioritization model: if multiple tracks are 'showing',
+    //  display the first 'subtitles' or 'captions' track which is 'showing',
+    //  otherwise display the first 'descriptions' track which is 'showing'
+
+    var descriptionsTrack = null;
+    var captionsSubtitlesTrack = null;
+
+    var i = tracks.length;
+
+    while (i--) {
+      var track = tracks[i];
+
+      if (track.mode === 'showing') {
+        if (track.kind === 'descriptions') {
+          descriptionsTrack = track;
+        } else {
+          captionsSubtitlesTrack = track;
+        }
+      }
+    }
+
+    if (captionsSubtitlesTrack) {
+      this.updateForTrack(captionsSubtitlesTrack);
+    } else if (descriptionsTrack) {
+      this.updateForTrack(descriptionsTrack);
+    }
+  };
+
+  /**
+   * Add texttrack to texttrack list
+   *
+   * @param {TextTrackObject} track Texttrack object to be added to list
+   * @method updateForTrack
+   */
+
+
+  TextTrackDisplay.prototype.updateForTrack = function updateForTrack(track) {
+    if (typeof _window2['default'].WebVTT !== 'function' || !track.activeCues) {
+      return;
+    }
+
+    var overrides = this.player_.textTrackSettings.getValues();
+    var cues = [];
+
+    for (var _i2 = 0; _i2 < track.activeCues.length; _i2++) {
+      cues.push(track.activeCues[_i2]);
+    }
+
+    _window2['default'].WebVTT.processCues(_window2['default'], cues, this.el_);
+
+    var i = cues.length;
+
+    while (i--) {
+      var cue = cues[i];
+
+      if (!cue) {
+        continue;
+      }
+
+      var cueDiv = cue.displayState;
+
+      if (overrides.color) {
+        cueDiv.firstChild.style.color = overrides.color;
+      }
+      if (overrides.textOpacity) {
+        tryUpdateStyle(cueDiv.firstChild, 'color', constructColor(overrides.color || '#fff', overrides.textOpacity));
+      }
+      if (overrides.backgroundColor) {
+        cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;
+      }
+      if (overrides.backgroundOpacity) {
+        tryUpdateStyle(cueDiv.firstChild, 'backgroundColor', constructColor(overrides.backgroundColor || '#000', overrides.backgroundOpacity));
+      }
+      if (overrides.windowColor) {
+        if (overrides.windowOpacity) {
+          tryUpdateStyle(cueDiv, 'backgroundColor', constructColor(overrides.windowColor, overrides.windowOpacity));
+        } else {
+          cueDiv.style.backgroundColor = overrides.windowColor;
+        }
+      }
+      if (overrides.edgeStyle) {
+        if (overrides.edgeStyle === 'dropshadow') {
+          cueDiv.firstChild.style.textShadow = '2px 2px 3px ' + darkGray + ', 2px 2px 4px ' + darkGray + ', 2px 2px 5px ' + darkGray;
+        } else if (overrides.edgeStyle === 'raised') {
+          cueDiv.firstChild.style.textShadow = '1px 1px ' + darkGray + ', 2px 2px ' + darkGray + ', 3px 3px ' + darkGray;
+        } else if (overrides.edgeStyle === 'depressed') {
+          cueDiv.firstChild.style.textShadow = '1px 1px ' + lightGray + ', 0 1px ' + lightGray + ', -1px -1px ' + darkGray + ', 0 -1px ' + darkGray;
+        } else if (overrides.edgeStyle === 'uniform') {
+          cueDiv.firstChild.style.textShadow = '0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray + ', 0 0 4px ' + darkGray;
+        }
+      }
+      if (overrides.fontPercent && overrides.fontPercent !== 1) {
+        var fontSize = _window2['default'].parseFloat(cueDiv.style.fontSize);
+
+        cueDiv.style.fontSize = fontSize * overrides.fontPercent + 'px';
+        cueDiv.style.height = 'auto';
+        cueDiv.style.top = 'auto';
+        cueDiv.style.bottom = '2px';
+      }
+      if (overrides.fontFamily && overrides.fontFamily !== 'default') {
+        if (overrides.fontFamily === 'small-caps') {
+          cueDiv.firstChild.style.fontVariant = 'small-caps';
+        } else {
+          cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];
+        }
+      }
+    }
+  };
+
+  return TextTrackDisplay;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TextTrackDisplay', TextTrackDisplay);
+exports['default'] = TextTrackDisplay;
+
+},{"../component":5,"../utils/fn.js":82,"global/window":93}],69:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * Utilities for capturing text track state and re-creating tracks
+ * based on a capture.
+ *
+ * @file text-track-list-converter.js
+ */
+
+/**
+ * Examine a single text track and return a JSON-compatible javascript
+ * object that represents the text track's state.
+ * @param track {TextTrackObject} the text track to query
+ * @return {Object} a serializable javascript representation of the
+ * @private
+ */
+var trackToJson_ = function trackToJson_(track) {
+  var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) {
+
+    if (track[prop]) {
+      acc[prop] = track[prop];
+    }
+
+    return acc;
+  }, {
+    cues: track.cues && Array.prototype.map.call(track.cues, function (cue) {
+      return {
+        startTime: cue.startTime,
+        endTime: cue.endTime,
+        text: cue.text,
+        id: cue.id
+      };
+    })
+  });
+
+  return ret;
+};
+
+/**
+ * Examine a tech and return a JSON-compatible javascript array that
+ * represents the state of all text tracks currently configured. The
+ * return array is compatible with `jsonToTextTracks`.
+ * @param tech {tech} the tech object to query
+ * @return {Array} a serializable javascript representation of the
+ * @function textTracksToJson
+ */
+var textTracksToJson = function textTracksToJson(tech) {
+
+  var trackEls = tech.$$('track');
+
+  var trackObjs = Array.prototype.map.call(trackEls, function (t) {
+    return t.track;
+  });
+  var tracks = Array.prototype.map.call(trackEls, function (trackEl) {
+    var json = trackToJson_(trackEl.track);
+
+    if (trackEl.src) {
+      json.src = trackEl.src;
+    }
+    return json;
+  });
+
+  return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {
+    return trackObjs.indexOf(track) === -1;
+  }).map(trackToJson_));
+};
+
+/**
+ * Creates a set of remote text tracks on a tech based on an array of
+ * javascript text track representations.
+ * @param json {Array} an array of text track representation objects,
+ * like those that would be produced by `textTracksToJson`
+ * @param tech {tech} the tech to create text tracks on
+ * @function jsonToTextTracks
+ */
+var jsonToTextTracks = function jsonToTextTracks(json, tech) {
+  json.forEach(function (track) {
+    var addedTrack = tech.addRemoteTextTrack(track).track;
+
+    if (!track.src && track.cues) {
+      track.cues.forEach(function (cue) {
+        return addedTrack.addCue(cue);
+      });
+    }
+  });
+
+  return tech.textTracks();
+};
+
+exports['default'] = { textTracksToJson: textTracksToJson, jsonToTextTracks: jsonToTextTracks, trackToJson_: trackToJson_ };
+
+},{}],70:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackList = _dereq_('./track-list');
+
+var _trackList2 = _interopRequireDefault(_trackList);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * A list of possible text tracks. All functionality is in the
+ * base class TrackList. The spec for TextTrackList is located at:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist
+ *
+ * interface TextTrackList : EventTarget {
+ *   readonly attribute unsigned long length;
+ *   getter TextTrack (unsigned long index);
+ *   TextTrack? getTrackById(DOMString id);
+ *
+ *   attribute EventHandler onchange;
+ *   attribute EventHandler onaddtrack;
+ *   attribute EventHandler onremovetrack;
+ * };
+ *
+ * @param {TextTrack[]} tracks A list of tracks to initialize the list with
+ * @extends TrackList
+ * @class TextTrackList
+ */
+var TextTrackList = function (_TrackList) {
+  _inherits(TextTrackList, _TrackList);
+
+  function TextTrackList() {
+    var _this, _ret;
+
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, TextTrackList);
+
+    var list = void 0;
+
+    // IE8 forces us to implement inheritance ourselves
+    // as it does not support Object.defineProperty properly
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+      for (var prop in _trackList2['default'].prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = _trackList2['default'].prototype[prop];
+        }
+      }
+      for (var _prop in TextTrackList.prototype) {
+        if (_prop !== 'constructor') {
+          list[_prop] = TextTrackList.prototype[_prop];
+        }
+      }
+    }
+
+    list = (_this = _possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  TextTrackList.prototype.addTrack_ = function addTrack_(track) {
+    _TrackList.prototype.addTrack_.call(this, track);
+    track.addEventListener('modechange', Fn.bind(this, function () {
+      this.trigger('change');
+    }));
+  };
+
+  /**
+   * Remove TextTrack from TextTrackList
+   * NOTE: Be mindful of what is passed in as it may be a HTMLTrackElement
+   *
+   * @param {TextTrack} rtrack
+   * @method removeTrack_
+   * @private
+   */
+
+
+  TextTrackList.prototype.removeTrack_ = function removeTrack_(rtrack) {
+    var track = void 0;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      if (this[i] === rtrack) {
+        track = this[i];
+        if (track.off) {
+          track.off();
+        }
+
+        this.tracks_.splice(i, 1);
+
+        break;
+      }
+    }
+
+    if (!track) {
+      return;
+    }
+
+    this.trigger({
+      track: track,
+      type: 'removetrack'
+    });
+  };
+
+  /**
+   * Get a TextTrack from TextTrackList by a tracks id
+   *
+   * @param {String} id - the id of the track to get
+   * @method getTrackById
+   * @return {TextTrack}
+   * @private
+   */
+
+
+  TextTrackList.prototype.getTrackById = function getTrackById(id) {
+    var result = null;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      var track = this[i];
+
+      if (track.id === id) {
+        result = track;
+        break;
+      }
+    }
+
+    return result;
+  };
+
+  return TextTrackList;
+}(_trackList2['default']);
+
+exports['default'] = TextTrackList;
+
+},{"../utils/browser.js":78,"../utils/fn.js":82,"./track-list":74,"global/document":92}],71:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _component = _dereq_('../component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _events = _dereq_('../utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _tuple = _dereq_('safe-json-parse/tuple');
+
+var _tuple2 = _interopRequireDefault(_tuple);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track-settings.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+function captionOptionsMenuTemplate(uniqueId, dialogLabelId, dialogDescriptionId) {
+  var template = '\n    <div role="document">\n      <div role="heading" aria-level="1" id="' + dialogLabelId + '" class="vjs-control-text">Captions Settings Dialog</div>\n      <div id="' + dialogDescriptionId + '" class="vjs-control-text">Beginning of dialog window. Escape will cancel and close the window.</div>\n      <div class="vjs-tracksettings">\n        <div class="vjs-tracksettings-colors">\n          <fieldset class="vjs-fg-color vjs-tracksetting">\n            <legend>Text</legend>\n            <label class="vjs-label" for="captions-foreground-color-' + uniqueId + '">Color</label>\n            <select id="captions-foreground-color-' + uniqueId + '">\n              <option value="#FFF" selected>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              <label class="vjs-label" for="captions-foreground-opacity-' + uniqueId + '">Transparency</label>\n              <select id="captions-foreground-opacity-' + uniqueId + '">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="vjs-bg-color vjs-tracksetting">\n            <legend>Background</legend>\n            <label class="vjs-label" for="captions-background-color-' + uniqueId + '">Color</label>\n            <select id="captions-background-color-' + uniqueId + '">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-background-opacity-' + uniqueId + '">Transparency</label>\n              <select id="captions-background-opacity-' + uniqueId + '">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="0">Transparent</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="window-color vjs-tracksetting">\n            <legend>Window</legend>\n            <label class="vjs-label" for="captions-window-color-' + uniqueId + '">Color</label>\n            <select id="captions-window-color-' + uniqueId + '">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-window-opacity-' + uniqueId + '">Transparency</label>\n              <select id="captions-window-opacity-' + uniqueId + '">\n                <option value="0" selected>Transparent</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="1">Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n        </div> <!-- vjs-tracksettings-colors -->\n        <div class="vjs-tracksettings-font">\n          <div class="vjs-font-percent vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-size-' + uniqueId + '">Font Size</label>\n            <select id="captions-font-size-' + uniqueId + '">\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>\n          <div class="vjs-edge-style vjs-tracksetting">\n            <label class="vjs-label" for="captions-edge-style-' + uniqueId + '">Text Edge Style</label>\n            <select id="captions-edge-style-' + uniqueId + '">\n              <option value="none" selected>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>\n          <div class="vjs-font-family vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-family-' + uniqueId + '">Font Family</label>\n            <select id="captions-font-family-' + uniqueId + '">\n              <option value="proportionalSansSerif" selected>Proportional Sans-Serif</option>\n              <option value="monospaceSansSerif">Monospace Sans-Serif</option>\n              <option value="proportionalSerif">Proportional Serif</option>\n              <option value="monospaceSerif">Monospace 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>\n        </div> <!-- vjs-tracksettings-font -->\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      </div> <!-- vjs-tracksettings -->\n    </div> <!--  role="document" -->\n  ';
+
+  return template;
+}
+
+function getSelectedOptionValue(target) {
+  var selectedOption = void 0;
+
+  // not all browsers support selectedOptions, so, fallback to options
+  if (target.selectedOptions) {
+    selectedOption = target.selectedOptions[0];
+  } else if (target.options) {
+    selectedOption = target.options[target.options.selectedIndex];
+  }
+
+  return selectedOption.value;
+}
+
+function setSelectedOption(target, value) {
+  if (!value) {
+    return;
+  }
+
+  var i = void 0;
+
+  for (i = 0; i < target.options.length; i++) {
+    var option = target.options[i];
+
+    if (option.value === value) {
+      break;
+    }
+  }
+
+  target.selectedIndex = i;
+}
+
+/**
+ * Manipulate settings of texttracks
+ *
+ * @param {Object} player  Main Player
+ * @param {Object=} options Object of option names and values
+ * @extends Component
+ * @class TextTrackSettings
+ */
+
+var TextTrackSettings = function (_Component) {
+  _inherits(TextTrackSettings, _Component);
+
+  function TextTrackSettings(player, options) {
+    _classCallCheck(this, TextTrackSettings);
+
+    var _this = _possibleConstructorReturn(this, _Component.call(this, player, options));
+
+    _this.hide();
+
+    // Grab `persistTextTrackSettings` from the player options if not passed in child options
+    if (options.persistTextTrackSettings === undefined) {
+      _this.options_.persistTextTrackSettings = _this.options_.playerOptions.persistTextTrackSettings;
+    }
+
+    Events.on(_this.$('.vjs-done-button'), 'click', Fn.bind(_this, function () {
+      this.saveSettings();
+      this.hide();
+    }));
+
+    Events.on(_this.$('.vjs-default-button'), 'click', Fn.bind(_this, function () {
+      this.$('.vjs-fg-color > select').selectedIndex = 0;
+      this.$('.vjs-bg-color > select').selectedIndex = 0;
+      this.$('.window-color > select').selectedIndex = 0;
+      this.$('.vjs-text-opacity > select').selectedIndex = 0;
+      this.$('.vjs-bg-opacity > select').selectedIndex = 0;
+      this.$('.vjs-window-opacity > select').selectedIndex = 0;
+      this.$('.vjs-edge-style select').selectedIndex = 0;
+      this.$('.vjs-font-family select').selectedIndex = 0;
+      this.$('.vjs-font-percent select').selectedIndex = 2;
+      this.updateDisplay();
+    }));
+
+    Events.on(_this.$('.vjs-fg-color > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-bg-color > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.window-color > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-text-opacity > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-bg-opacity > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-window-opacity > select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-font-percent select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-edge-style select'), 'change', Fn.bind(_this, _this.updateDisplay));
+    Events.on(_this.$('.vjs-font-family select'), 'change', Fn.bind(_this, _this.updateDisplay));
+
+    if (_this.options_.persistTextTrackSettings) {
+      _this.restoreSettings();
+    }
+    return _this;
+  }
+
+  /**
+   * Create the component's DOM element
+   *
+   * @return {Element}
+   * @method createEl
+   */
+
+
+  TextTrackSettings.prototype.createEl = function createEl() {
+    var uniqueId = this.id_;
+    var dialogLabelId = 'TTsettingsDialogLabel-' + uniqueId;
+    var dialogDescriptionId = 'TTsettingsDialogDescription-' + uniqueId;
+
+    return _Component.prototype.createEl.call(this, 'div', {
+      className: 'vjs-caption-settings vjs-modal-overlay',
+      innerHTML: captionOptionsMenuTemplate(uniqueId, dialogLabelId, dialogDescriptionId),
+      tabIndex: -1
+    }, {
+      'role': 'dialog',
+      'aria-labelledby': dialogLabelId,
+      'aria-describedby': dialogDescriptionId
+    });
+  };
+
+  /**
+   * Get texttrack settings
+   * Settings are
+   * .vjs-edge-style
+   * .vjs-font-family
+   * .vjs-fg-color
+   * .vjs-text-opacity
+   * .vjs-bg-color
+   * .vjs-bg-opacity
+   * .window-color
+   * .vjs-window-opacity
+   *
+   * @return {Object}
+   * @method getValues
+   */
+
+
+  TextTrackSettings.prototype.getValues = function getValues() {
+    var textEdge = getSelectedOptionValue(this.$('.vjs-edge-style select'));
+    var fontFamily = getSelectedOptionValue(this.$('.vjs-font-family select'));
+    var fgColor = getSelectedOptionValue(this.$('.vjs-fg-color > select'));
+    var textOpacity = getSelectedOptionValue(this.$('.vjs-text-opacity > select'));
+    var bgColor = getSelectedOptionValue(this.$('.vjs-bg-color > select'));
+    var bgOpacity = getSelectedOptionValue(this.$('.vjs-bg-opacity > select'));
+    var windowColor = getSelectedOptionValue(this.$('.window-color > select'));
+    var windowOpacity = getSelectedOptionValue(this.$('.vjs-window-opacity > select'));
+    var fontPercent = _window2['default'].parseFloat(getSelectedOptionValue(this.$('.vjs-font-percent > select')));
+
+    var result = {
+      fontPercent: fontPercent,
+      fontFamily: fontFamily,
+      textOpacity: textOpacity,
+      windowColor: windowColor,
+      windowOpacity: windowOpacity,
+      backgroundOpacity: bgOpacity,
+      edgeStyle: textEdge,
+      color: fgColor,
+      backgroundColor: bgColor
+    };
+
+    for (var name in result) {
+      if (result[name] === '' || result[name] === 'none' || name === 'fontPercent' && result[name] === 1.00) {
+        delete result[name];
+      }
+    }
+    return result;
+  };
+
+  /**
+   * Set texttrack settings
+   * Settings are
+   * .vjs-edge-style
+   * .vjs-font-family
+   * .vjs-fg-color
+   * .vjs-text-opacity
+   * .vjs-bg-color
+   * .vjs-bg-opacity
+   * .window-color
+   * .vjs-window-opacity
+   *
+   * @param {Object} values Object with texttrack setting values
+   * @method setValues
+   */
+
+
+  TextTrackSettings.prototype.setValues = function setValues(values) {
+    setSelectedOption(this.$('.vjs-edge-style select'), values.edgeStyle);
+    setSelectedOption(this.$('.vjs-font-family select'), values.fontFamily);
+    setSelectedOption(this.$('.vjs-fg-color > select'), values.color);
+    setSelectedOption(this.$('.vjs-text-opacity > select'), values.textOpacity);
+    setSelectedOption(this.$('.vjs-bg-color > select'), values.backgroundColor);
+    setSelectedOption(this.$('.vjs-bg-opacity > select'), values.backgroundOpacity);
+    setSelectedOption(this.$('.window-color > select'), values.windowColor);
+    setSelectedOption(this.$('.vjs-window-opacity > select'), values.windowOpacity);
+
+    var fontPercent = values.fontPercent;
+
+    if (fontPercent) {
+      fontPercent = fontPercent.toFixed(2);
+    }
+
+    setSelectedOption(this.$('.vjs-font-percent > select'), fontPercent);
+  };
+
+  /**
+   * Restore texttrack settings
+   *
+   * @method restoreSettings
+   */
+
+
+  TextTrackSettings.prototype.restoreSettings = function restoreSettings() {
+    var err = void 0;
+    var values = void 0;
+
+    try {
+      var _safeParseTuple = (0, _tuple2['default'])(_window2['default'].localStorage.getItem('vjs-text-track-settings'));
+
+      err = _safeParseTuple[0];
+      values = _safeParseTuple[1];
+
+
+      if (err) {
+        _log2['default'].error(err);
+      }
+    } catch (e) {
+      _log2['default'].warn(e);
+    }
+
+    if (values) {
+      this.setValues(values);
+    }
+  };
+
+  /**
+   * Save texttrack settings to local storage
+   *
+   * @method saveSettings
+   */
+
+
+  TextTrackSettings.prototype.saveSettings = function saveSettings() {
+    if (!this.options_.persistTextTrackSettings) {
+      return;
+    }
+
+    var values = this.getValues();
+
+    try {
+      if (Object.getOwnPropertyNames(values).length > 0) {
+        _window2['default'].localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));
+      } else {
+        _window2['default'].localStorage.removeItem('vjs-text-track-settings');
+      }
+    } catch (e) {
+      _log2['default'].warn(e);
+    }
+  };
+
+  /**
+   * Update display of texttrack settings
+   *
+   * @method updateDisplay
+   */
+
+
+  TextTrackSettings.prototype.updateDisplay = function updateDisplay() {
+    var ttDisplay = this.player_.getChild('textTrackDisplay');
+
+    if (ttDisplay) {
+      ttDisplay.updateDisplay();
+    }
+  };
+
+  return TextTrackSettings;
+}(_component2['default']);
+
+_component2['default'].registerComponent('TextTrackSettings', TextTrackSettings);
+
+exports['default'] = TextTrackSettings;
+
+},{"../component":5,"../utils/events.js":81,"../utils/fn.js":82,"../utils/log.js":85,"global/window":93,"safe-json-parse/tuple":145}],72:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _textTrackCueList = _dereq_('./text-track-cue-list');
+
+var _textTrackCueList2 = _interopRequireDefault(_textTrackCueList);
+
+var _fn = _dereq_('../utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _trackEnums = _dereq_('./track-enums');
+
+var _log = _dereq_('../utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _track = _dereq_('./track.js');
+
+var _track2 = _interopRequireDefault(_track);
+
+var _url = _dereq_('../utils/url.js');
+
+var _xhr = _dereq_('xhr');
+
+var _xhr2 = _interopRequireDefault(_xhr);
+
+var _mergeOptions = _dereq_('../utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file text-track.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * takes a webvtt file contents and parses it into cues
+ *
+ * @param {String} srcContent webVTT file contents
+ * @param {Track} track track to addcues to
+ */
+var parseCues = function parseCues(srcContent, track) {
+  var parser = new _window2['default'].WebVTT.Parser(_window2['default'], _window2['default'].vttjs, _window2['default'].WebVTT.StringDecoder());
+  var errors = [];
+
+  parser.oncue = function (cue) {
+    track.addCue(cue);
+  };
+
+  parser.onparsingerror = function (error) {
+    errors.push(error);
+  };
+
+  parser.onflush = function () {
+    track.trigger({
+      type: 'loadeddata',
+      target: track
+    });
+  };
+
+  parser.parse(srcContent);
+  if (errors.length > 0) {
+    if (_window2['default'].console && _window2['default'].console.groupCollapsed) {
+      _window2['default'].console.groupCollapsed('Text Track parsing errors for ' + track.src);
+    }
+    errors.forEach(function (error) {
+      return _log2['default'].error(error);
+    });
+    if (_window2['default'].console && _window2['default'].console.groupEnd) {
+      _window2['default'].console.groupEnd();
+    }
+  }
+
+  parser.flush();
+};
+
+/**
+ * load a track from a  specifed url
+ *
+ * @param {String} src url to load track from
+ * @param {Track} track track to addcues to
+ */
+var loadTrack = function loadTrack(src, track) {
+  var opts = {
+    uri: src
+  };
+  var crossOrigin = (0, _url.isCrossOrigin)(src);
+
+  if (crossOrigin) {
+    opts.cors = crossOrigin;
+  }
+
+  (0, _xhr2['default'])(opts, Fn.bind(this, function (err, response, responseBody) {
+    if (err) {
+      return _log2['default'].error(err, response);
+    }
+
+    track.loaded_ = true;
+
+    // Make sure that vttjs has loaded, otherwise, wait till it finished loading
+    // NOTE: this is only used for the alt/video.novtt.js build
+    if (typeof _window2['default'].WebVTT !== 'function') {
+      if (track.tech_) {
+        (function () {
+          var loadHandler = function loadHandler() {
+            return parseCues(responseBody, track);
+          };
+
+          track.tech_.on('vttjsloaded', loadHandler);
+          track.tech_.on('vttjserror', function () {
+            _log2['default'].error('vttjs failed to load, stopping trying to process ' + track.src);
+            track.tech_.off('vttjsloaded', loadHandler);
+          });
+        })();
+      }
+    } else {
+      parseCues(responseBody, track);
+    }
+  }));
+};
+
+/**
+ * A single text track as defined in:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack
+ *
+ * interface TextTrack : EventTarget {
+ *   readonly attribute TextTrackKind kind;
+ *   readonly attribute DOMString label;
+ *   readonly attribute DOMString language;
+ *
+ *   readonly attribute DOMString id;
+ *   readonly attribute DOMString inBandMetadataTrackDispatchType;
+ *
+ *   attribute TextTrackMode mode;
+ *
+ *   readonly attribute TextTrackCueList? cues;
+ *   readonly attribute TextTrackCueList? activeCues;
+ *
+ *   void addCue(TextTrackCue cue);
+ *   void removeCue(TextTrackCue cue);
+ *
+ *   attribute EventHandler oncuechange;
+ * };
+ *
+ * @param {Object=} options Object of option names and values
+ * @extends Track
+ * @class TextTrack
+ */
+
+var TextTrack = function (_Track) {
+  _inherits(TextTrack, _Track);
+
+  function TextTrack() {
+    var _this, _ret2;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, TextTrack);
+
+    if (!options.tech) {
+      throw new Error('A tech was not provided.');
+    }
+
+    var settings = (0, _mergeOptions2['default'])(options, {
+      kind: _trackEnums.TextTrackKind[options.kind] || 'subtitles',
+      language: options.language || options.srclang || ''
+    });
+    var mode = _trackEnums.TextTrackMode[settings.mode] || 'disabled';
+    var default_ = settings['default'];
+
+    if (settings.kind === 'metadata' || settings.kind === 'chapters') {
+      mode = 'hidden';
+    }
+    // on IE8 this will be a document element
+    // for every other browser this will be a normal object
+    var tt = (_this = _possibleConstructorReturn(this, _Track.call(this, settings)), _this);
+
+    tt.tech_ = settings.tech;
+
+    if (browser.IS_IE8) {
+      for (var prop in TextTrack.prototype) {
+        if (prop !== 'constructor') {
+          tt[prop] = TextTrack.prototype[prop];
+        }
+      }
+    }
+
+    tt.cues_ = [];
+    tt.activeCues_ = [];
+
+    var cues = new _textTrackCueList2['default'](tt.cues_);
+    var activeCues = new _textTrackCueList2['default'](tt.activeCues_);
+    var changed = false;
+    var timeupdateHandler = Fn.bind(tt, function () {
+
+      // Accessing this.activeCues for the side-effects of updating itself
+      // due to it's nature as a getter function. Do not remove or cues will
+      // stop updating!
+      /* eslint-disable no-unused-expressions */
+      this.activeCues;
+      /* eslint-enable no-unused-expressions */
+      if (changed) {
+        this.trigger('cuechange');
+        changed = false;
+      }
+    });
+
+    if (mode !== 'disabled') {
+      tt.tech_.on('timeupdate', timeupdateHandler);
+    }
+
+    Object.defineProperty(tt, 'default', {
+      get: function get() {
+        return default_;
+      },
+      set: function set() {}
+    });
+
+    Object.defineProperty(tt, 'mode', {
+      get: function get() {
+        return mode;
+      },
+      set: function set(newMode) {
+        if (!_trackEnums.TextTrackMode[newMode]) {
+          return;
+        }
+        mode = newMode;
+        if (mode === 'showing') {
+          this.tech_.on('timeupdate', timeupdateHandler);
+        }
+        this.trigger('modechange');
+      }
+    });
+
+    Object.defineProperty(tt, 'cues', {
+      get: function get() {
+        if (!this.loaded_) {
+          return null;
+        }
+
+        return cues;
+      },
+      set: function set() {}
+    });
+
+    Object.defineProperty(tt, 'activeCues', {
+      get: function get() {
+        if (!this.loaded_) {
+          return null;
+        }
+
+        // nothing to do
+        if (this.cues.length === 0) {
+          return activeCues;
+        }
+
+        var ct = this.tech_.currentTime();
+        var active = [];
+
+        for (var i = 0, l = this.cues.length; i < l; i++) {
+          var cue = this.cues[i];
+
+          if (cue.startTime <= ct && cue.endTime >= ct) {
+            active.push(cue);
+          } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) {
+            active.push(cue);
+          }
+        }
+
+        changed = false;
+
+        if (active.length !== this.activeCues_.length) {
+          changed = true;
+        } else {
+          for (var _i = 0; _i < active.length; _i++) {
+            if (this.activeCues_.indexOf(active[_i]) === -1) {
+              changed = true;
+            }
+          }
+        }
+
+        this.activeCues_ = active;
+        activeCues.setCues_(this.activeCues_);
+
+        return activeCues;
+      },
+      set: function set() {}
+    });
+
+    if (settings.src) {
+      tt.src = settings.src;
+      loadTrack(settings.src, tt);
+    } else {
+      tt.loaded_ = true;
+    }
+
+    return _ret2 = tt, _possibleConstructorReturn(_this, _ret2);
+  }
+
+  /**
+   * add a cue to the internal list of cues
+   *
+   * @param {Object} cue the cue to add to our internal list
+   * @method addCue
+   */
+
+
+  TextTrack.prototype.addCue = function addCue(cue) {
+    var tracks = this.tech_.textTracks();
+
+    if (tracks) {
+      for (var i = 0; i < tracks.length; i++) {
+        if (tracks[i] !== this) {
+          tracks[i].removeCue(cue);
+        }
+      }
+    }
+
+    this.cues_.push(cue);
+    this.cues.setCues_(this.cues_);
+  };
+
+  /**
+   * remvoe a cue from our internal list
+   *
+   * @param {Object} removeCue the cue to remove from our internal list
+   * @method removeCue
+   */
+
+
+  TextTrack.prototype.removeCue = function removeCue(_removeCue) {
+    var removed = false;
+
+    for (var i = 0, l = this.cues_.length; i < l; i++) {
+      var cue = this.cues_[i];
+
+      if (cue === _removeCue) {
+        this.cues_.splice(i, 1);
+        removed = true;
+      }
+    }
+
+    if (removed) {
+      this.cues.setCues_(this.cues_);
+    }
+  };
+
+  return TextTrack;
+}(_track2['default']);
+
+/**
+ * cuechange - One or more cues in the track have become active or stopped being active.
+ */
+
+
+TextTrack.prototype.allowedEvents_ = {
+  cuechange: 'cuechange'
+};
+
+exports['default'] = TextTrack;
+
+},{"../utils/browser.js":78,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options":86,"../utils/url.js":90,"./text-track-cue-list":67,"./track-enums":73,"./track.js":75,"global/window":93,"xhr":147}],73:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * @file track-kinds.js
+ */
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind
+ *
+ * enum VideoTrackKind {
+ *   "alternative",
+ *   "captions",
+ *   "main",
+ *   "sign",
+ *   "subtitles",
+ *   "commentary",
+ *   "",
+ * };
+ */
+var VideoTrackKind = exports.VideoTrackKind = {
+  alternative: 'alternative',
+  captions: 'captions',
+  main: 'main',
+  sign: 'sign',
+  subtitles: 'subtitles',
+  commentary: 'commentary'
+};
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind
+ *
+ * enum AudioTrackKind {
+ *   "alternative",
+ *   "descriptions",
+ *   "main",
+ *   "main-desc",
+ *   "translation",
+ *   "commentary",
+ *   "",
+ * };
+ */
+var AudioTrackKind = exports.AudioTrackKind = {
+  'alternative': 'alternative',
+  'descriptions': 'descriptions',
+  'main': 'main',
+  'main-desc': 'main-desc',
+  'translation': 'translation',
+  'commentary': 'commentary'
+};
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind
+ *
+ * enum TextTrackKind {
+ *   "subtitles",
+ *   "captions",
+ *   "descriptions",
+ *   "chapters",
+ *   "metadata"
+ * };
+ */
+var TextTrackKind = exports.TextTrackKind = {
+  subtitles: 'subtitles',
+  captions: 'captions',
+  descriptions: 'descriptions',
+  chapters: 'chapters',
+  metadata: 'metadata'
+};
+
+/**
+ * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode
+ *
+ * enum TextTrackMode { "disabled",  "hidden",  "showing" };
+ */
+var TextTrackMode = exports.TextTrackMode = {
+  disabled: 'disabled',
+  hidden: 'hidden',
+  showing: 'showing'
+};
+
+},{}],74:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _eventTarget = _dereq_('../event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * Common functionaliy between Text, Audio, and Video TrackLists
+ * Interfaces defined in the following spec:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html
+ *
+ * @param {Track[]} tracks A list of tracks to initialize the list with
+ * @param {Object} list the child object with inheritance done manually for ie8
+ * @extends EventTarget
+ * @class TrackList
+ */
+var TrackList = function (_EventTarget) {
+  _inherits(TrackList, _EventTarget);
+
+  function TrackList() {
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    var _ret;
+
+    var list = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+    _classCallCheck(this, TrackList);
+
+    var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
+
+    if (!list) {
+      list = _this; // eslint-disable-line
+      if (browser.IS_IE8) {
+        list = _document2['default'].createElement('custom');
+        for (var prop in TrackList.prototype) {
+          if (prop !== 'constructor') {
+            list[prop] = TrackList.prototype[prop];
+          }
+        }
+      }
+    }
+
+    list.tracks_ = [];
+    Object.defineProperty(list, 'length', {
+      get: function get() {
+        return this.tracks_.length;
+      }
+    });
+
+    for (var i = 0; i < tracks.length; i++) {
+      list.addTrack_(tracks[i]);
+    }
+
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  /**
+   * Add a Track from TrackList
+   *
+   * @param {Mixed} track
+   * @method addTrack_
+   * @private
+   */
+
+
+  TrackList.prototype.addTrack_ = function addTrack_(track) {
+    var index = this.tracks_.length;
+
+    if (!('' + index in this)) {
+      Object.defineProperty(this, index, {
+        get: function get() {
+          return this.tracks_[index];
+        }
+      });
+    }
+
+    // Do not add duplicate tracks
+    if (this.tracks_.indexOf(track) === -1) {
+      this.tracks_.push(track);
+      this.trigger({
+        track: track,
+        type: 'addtrack'
+      });
+    }
+  };
+
+  /**
+   * Remove a Track from TrackList
+   *
+   * @param {Track} rtrack track to be removed
+   * @method removeTrack_
+   * @private
+   */
+
+
+  TrackList.prototype.removeTrack_ = function removeTrack_(rtrack) {
+    var track = void 0;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      if (this[i] === rtrack) {
+        track = this[i];
+        if (track.off) {
+          track.off();
+        }
+
+        this.tracks_.splice(i, 1);
+
+        break;
+      }
+    }
+
+    if (!track) {
+      return;
+    }
+
+    this.trigger({
+      track: track,
+      type: 'removetrack'
+    });
+  };
+
+  /**
+   * Get a Track from the TrackList by a tracks id
+   *
+   * @param {String} id - the id of the track to get
+   * @method getTrackById
+   * @return {Track}
+   * @private
+   */
+
+
+  TrackList.prototype.getTrackById = function getTrackById(id) {
+    var result = null;
+
+    for (var i = 0, l = this.length; i < l; i++) {
+      var track = this[i];
+
+      if (track.id === id) {
+        result = track;
+        break;
+      }
+    }
+
+    return result;
+  };
+
+  return TrackList;
+}(_eventTarget2['default']);
+
+/**
+ * change - One or more tracks in the track list have been enabled or disabled.
+ * addtrack - A track has been added to the track list.
+ * removetrack - A track has been removed from the track list.
+ */
+
+
+TrackList.prototype.allowedEvents_ = {
+  change: 'change',
+  addtrack: 'addtrack',
+  removetrack: 'removetrack'
+};
+
+// emulate attribute EventHandler support to allow for feature detection
+for (var event in TrackList.prototype.allowedEvents_) {
+  TrackList.prototype['on' + event] = null;
+}
+
+exports['default'] = TrackList;
+
+},{"../event-target":42,"../utils/browser.js":78,"global/document":92}],75:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _guid = _dereq_('../utils/guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _eventTarget = _dereq_('../event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file track.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * setup the common parts of an audio, video, or text track
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html
+ *
+ * @param {String} type The type of track we are dealing with audio|video|text
+ * @param {Object=} options Object of option names and values
+ * @extends EventTarget
+ * @class Track
+ */
+var Track = function (_EventTarget) {
+  _inherits(Track, _EventTarget);
+
+  function Track() {
+    var _ret;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, Track);
+
+    var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
+
+    var track = _this; // eslint-disable-line
+
+    if (browser.IS_IE8) {
+      track = _document2['default'].createElement('custom');
+      for (var prop in Track.prototype) {
+        if (prop !== 'constructor') {
+          track[prop] = Track.prototype[prop];
+        }
+      }
+    }
+
+    var trackProps = {
+      id: options.id || 'vjs_track_' + Guid.newGUID(),
+      kind: options.kind || '',
+      label: options.label || '',
+      language: options.language || ''
+    };
+
+    var _loop = function _loop(key) {
+      Object.defineProperty(track, key, {
+        get: function get() {
+          return trackProps[key];
+        },
+        set: function set() {}
+      });
+    };
+
+    for (var key in trackProps) {
+      _loop(key);
+    }
+
+    return _ret = track, _possibleConstructorReturn(_this, _ret);
+  }
+
+  return Track;
+}(_eventTarget2['default']);
+
+exports['default'] = Track;
+
+},{"../event-target":42,"../utils/browser.js":78,"../utils/guid.js":84,"global/document":92}],76:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackList = _dereq_('./track-list');
+
+var _trackList2 = _interopRequireDefault(_trackList);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * @file video-track-list.js
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
+
+
+/**
+ * disable other video tracks before selecting the new one
+ *
+ * @param {Array|VideoTrackList} list list to work on
+ * @param {VideoTrack} track the track to skip
+ */
+var disableOthers = function disableOthers(list, track) {
+  for (var i = 0; i < list.length; i++) {
+    if (track.id === list[i].id) {
+      continue;
+    }
+    // another audio track is enabled, disable it
+    list[i].selected = false;
+  }
+};
+
+/**
+* A list of possiblee video tracks. Most functionality is in the
+ * base class Tracklist and the spec for VideoTrackList is located at:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist
+ *
+ * interface VideoTrackList : EventTarget {
+ *   readonly attribute unsigned long length;
+ *   getter VideoTrack (unsigned long index);
+ *   VideoTrack? getTrackById(DOMString id);
+ *   readonly attribute long selectedIndex;
+ *
+ *   attribute EventHandler onchange;
+ *   attribute EventHandler onaddtrack;
+ *   attribute EventHandler onremovetrack;
+ * };
+ *
+ * @param {VideoTrack[]} tracks a list of video tracks to instantiate the list with
+ # @extends TrackList
+ * @class VideoTrackList
+ */
+
+var VideoTrackList = function (_TrackList) {
+  _inherits(VideoTrackList, _TrackList);
+
+  function VideoTrackList() {
+    var _this, _ret;
+
+    var tracks = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+
+    _classCallCheck(this, VideoTrackList);
+
+    var list = void 0;
+
+    // make sure only 1 track is enabled
+    // sorted from last index to first index
+    for (var i = tracks.length - 1; i >= 0; i--) {
+      if (tracks[i].selected) {
+        disableOthers(tracks, tracks[i]);
+        break;
+      }
+    }
+
+    // IE8 forces us to implement inheritance ourselves
+    // as it does not support Object.defineProperty properly
+    if (browser.IS_IE8) {
+      list = _document2['default'].createElement('custom');
+      for (var prop in _trackList2['default'].prototype) {
+        if (prop !== 'constructor') {
+          list[prop] = _trackList2['default'].prototype[prop];
+        }
+      }
+      for (var _prop in VideoTrackList.prototype) {
+        if (_prop !== 'constructor') {
+          list[_prop] = VideoTrackList.prototype[_prop];
+        }
+      }
+    }
+
+    list = (_this = _possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);
+    list.changing_ = false;
+
+    Object.defineProperty(list, 'selectedIndex', {
+      get: function get() {
+        for (var _i = 0; _i < this.length; _i++) {
+          if (this[_i].selected) {
+            return _i;
+          }
+        }
+        return -1;
+      },
+      set: function set() {}
+    });
+
+    return _ret = list, _possibleConstructorReturn(_this, _ret);
+  }
+
+  VideoTrackList.prototype.addTrack_ = function addTrack_(track) {
+    var _this2 = this;
+
+    if (track.selected) {
+      disableOthers(this, track);
+    }
+
+    _TrackList.prototype.addTrack_.call(this, track);
+    // native tracks don't have this
+    if (!track.addEventListener) {
+      return;
+    }
+    track.addEventListener('selectedchange', function () {
+      if (_this2.changing_) {
+        return;
+      }
+      _this2.changing_ = true;
+      disableOthers(_this2, track);
+      _this2.changing_ = false;
+      _this2.trigger('change');
+    });
+  };
+
+  VideoTrackList.prototype.addTrack = function addTrack(track) {
+    this.addTrack_(track);
+  };
+
+  VideoTrackList.prototype.removeTrack = function removeTrack(track) {
+    _TrackList.prototype.removeTrack_.call(this, track);
+  };
+
+  return VideoTrackList;
+}(_trackList2['default']);
+
+exports['default'] = VideoTrackList;
+
+},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],77:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _trackEnums = _dereq_('./track-enums');
+
+var _track = _dereq_('./track');
+
+var _track2 = _interopRequireDefault(_track);
+
+var _mergeOptions = _dereq_('../utils/merge-options');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _browser = _dereq_('../utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * A single video text track as defined in:
+ * @link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack
+ *
+ * interface VideoTrack {
+ *   readonly attribute DOMString id;
+ *   readonly attribute DOMString kind;
+ *   readonly attribute DOMString label;
+ *   readonly attribute DOMString language;
+ *   attribute boolean selected;
+ * };
+ *
+ * @param {Object=} options Object of option names and values
+ * @class VideoTrack
+ */
+var VideoTrack = function (_Track) {
+  _inherits(VideoTrack, _Track);
+
+  function VideoTrack() {
+    var _this, _ret;
+
+    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+    _classCallCheck(this, VideoTrack);
+
+    var settings = (0, _mergeOptions2['default'])(options, {
+      kind: _trackEnums.VideoTrackKind[options.kind] || ''
+    });
+
+    // on IE8 this will be a document element
+    // for every other browser this will be a normal object
+    var track = (_this = _possibleConstructorReturn(this, _Track.call(this, settings)), _this);
+    var selected = false;
+
+    if (browser.IS_IE8) {
+      for (var prop in VideoTrack.prototype) {
+        if (prop !== 'constructor') {
+          track[prop] = VideoTrack.prototype[prop];
+        }
+      }
+    }
+
+    Object.defineProperty(track, 'selected', {
+      get: function get() {
+        return selected;
+      },
+      set: function set(newSelected) {
+        // an invalid or unchanged value
+        if (typeof newSelected !== 'boolean' || newSelected === selected) {
+          return;
+        }
+        selected = newSelected;
+        this.trigger('selectedchange');
+      }
+    });
+
+    // if the user sets this track to selected then
+    // set selected to that true value otherwise
+    // we keep it false
+    if (settings.selected) {
+      track.selected = settings.selected;
+    }
+
+    return _ret = track, _possibleConstructorReturn(_this, _ret);
+  }
+
+  return VideoTrack;
+}(_track2['default']);
+
+exports['default'] = VideoTrack;
+
+},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],78:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.BACKGROUND_SIZE_SUPPORTED = exports.TOUCH_ENABLED = exports.IE_VERSION = exports.IS_IE8 = exports.IS_CHROME = exports.IS_EDGE = exports.IS_FIREFOX = exports.IS_NATIVE_ANDROID = exports.IS_OLD_ANDROID = exports.ANDROID_VERSION = exports.IS_ANDROID = exports.IOS_VERSION = exports.IS_IOS = exports.IS_IPOD = exports.IS_IPHONE = exports.IS_IPAD = undefined;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * @file browser.js
+ */
+var USER_AGENT = _window2['default'].navigator && _window2['default'].navigator.userAgent || '';
+var webkitVersionMap = /AppleWebKit\/([\d.]+)/i.exec(USER_AGENT);
+var appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;
+
+/*
+ * Device is an iPhone
+ *
+ * @type {Boolean}
+ * @constant
+ * @private
+ */
+var IS_IPAD = exports.IS_IPAD = /iPad/i.test(USER_AGENT);
+
+// The Facebook app's UIWebView identifies as both an iPhone and iPad, so
+// to identify iPhones, we need to exclude iPads.
+// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/
+var IS_IPHONE = exports.IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD;
+var IS_IPOD = exports.IS_IPOD = /iPod/i.test(USER_AGENT);
+var IS_IOS = exports.IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;
+
+var IOS_VERSION = exports.IOS_VERSION = function () {
+  var match = USER_AGENT.match(/OS (\d+)_/i);
+
+  if (match && match[1]) {
+    return match[1];
+  }
+  return null;
+}();
+
+var IS_ANDROID = exports.IS_ANDROID = /Android/i.test(USER_AGENT);
+var ANDROID_VERSION = exports.ANDROID_VERSION = function () {
+  // This matches Android Major.Minor.Patch versions
+  // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned
+  var match = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);
+
+  if (!match) {
+    return null;
+  }
+
+  var major = match[1] && parseFloat(match[1]);
+  var minor = match[2] && parseFloat(match[2]);
+
+  if (major && minor) {
+    return parseFloat(match[1] + '.' + match[2]);
+  } else if (major) {
+    return major;
+  }
+  return null;
+}();
+
+// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser
+var IS_OLD_ANDROID = exports.IS_OLD_ANDROID = IS_ANDROID && /webkit/i.test(USER_AGENT) && ANDROID_VERSION < 2.3;
+var IS_NATIVE_ANDROID = exports.IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;
+
+var IS_FIREFOX = exports.IS_FIREFOX = /Firefox/i.test(USER_AGENT);
+var IS_EDGE = exports.IS_EDGE = /Edge/i.test(USER_AGENT);
+var IS_CHROME = exports.IS_CHROME = !IS_EDGE && /Chrome/i.test(USER_AGENT);
+var IS_IE8 = exports.IS_IE8 = /MSIE\s8\.0/.test(USER_AGENT);
+var IE_VERSION = exports.IE_VERSION = function (result) {
+  return result && parseFloat(result[1]);
+}(/MSIE\s(\d+)\.\d/.exec(USER_AGENT));
+
+var TOUCH_ENABLED = exports.TOUCH_ENABLED = !!('ontouchstart' in _window2['default'] || _window2['default'].DocumentTouch && _document2['default'] instanceof _window2['default'].DocumentTouch);
+var BACKGROUND_SIZE_SUPPORTED = exports.BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in _document2['default'].createElement('video').style;
+
+},{"global/document":92,"global/window":93}],79:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.bufferedPercent = bufferedPercent;
+
+var _timeRanges = _dereq_('./time-ranges.js');
+
+/**
+ * Compute how much your video has been buffered
+ *
+ * @param  {Object} Buffered object
+ * @param  {Number} Total duration
+ * @return {Number} Percent buffered of the total duration
+ * @private
+ * @function bufferedPercent
+ */
+function bufferedPercent(buffered, duration) {
+  var bufferedDuration = 0;
+  var start = void 0;
+  var end = void 0;
+
+  if (!duration) {
+    return 0;
+  }
+
+  if (!buffered || !buffered.length) {
+    buffered = (0, _timeRanges.createTimeRange)(0, 0);
+  }
+
+  for (var i = 0; i < buffered.length; i++) {
+    start = buffered.start(i);
+    end = buffered.end(i);
+
+    // buffered end can be bigger than duration by a very small fraction
+    if (end > duration) {
+      end = duration;
+    }
+
+    bufferedDuration += end - start;
+  }
+
+  return bufferedDuration / duration;
+} /**
+   * @file buffer.js
+   */
+
+},{"./time-ranges.js":88}],80:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.$$ = exports.$ = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file dom.js
+                                                                                                                                                                                                                                                   */
+
+
+var _templateObject = _taggedTemplateLiteralLoose(['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 ', ' to ', '.'], ['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 ', ' to ', '.']);
+
+exports.isEl = isEl;
+exports.getEl = getEl;
+exports.createEl = createEl;
+exports.textContent = textContent;
+exports.insertElFirst = insertElFirst;
+exports.getElData = getElData;
+exports.hasElData = hasElData;
+exports.removeElData = removeElData;
+exports.hasElClass = hasElClass;
+exports.addElClass = addElClass;
+exports.removeElClass = removeElClass;
+exports.toggleElClass = toggleElClass;
+exports.setElAttributes = setElAttributes;
+exports.getElAttributes = getElAttributes;
+exports.blockTextSelection = blockTextSelection;
+exports.unblockTextSelection = unblockTextSelection;
+exports.findElPosition = findElPosition;
+exports.getPointerPosition = getPointerPosition;
+exports.isTextNode = isTextNode;
+exports.emptyEl = emptyEl;
+exports.normalizeContent = normalizeContent;
+exports.appendContent = appendContent;
+exports.insertContent = insertContent;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _guid = _dereq_('./guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _log = _dereq_('./log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _tsml = _dereq_('tsml');
+
+var _tsml2 = _interopRequireDefault(_tsml);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
+
+/**
+ * Detect if a value is a string with any non-whitespace characters.
+ *
+ * @param  {String} str
+ * @return {Boolean}
+ */
+function isNonBlankString(str) {
+  return typeof str === 'string' && /\S/.test(str);
+}
+
+/**
+ * Throws an error if the passed string has whitespace. This is used by
+ * class methods to be relatively consistent with the classList API.
+ *
+ * @param  {String} str
+ * @return {Boolean}
+ */
+function throwIfWhitespace(str) {
+  if (/\s/.test(str)) {
+    throw new Error('class has illegal whitespace characters');
+  }
+}
+
+/**
+ * Produce a regular expression for matching a class name.
+ *
+ * @param  {String} className
+ * @return {RegExp}
+ */
+function classRegExp(className) {
+  return new RegExp('(^|\\s)' + className + '($|\\s)');
+}
+
+/**
+ * Determines, via duck typing, whether or not a value is a DOM element.
+ *
+ * @function isEl
+ * @param    {Mixed} value
+ * @return   {Boolean}
+ */
+function isEl(value) {
+  return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 1;
+}
+
+/**
+ * Creates functions to query the DOM using a given method.
+ *
+ * @function createQuerier
+ * @private
+ * @param  {String} method
+ * @return {Function}
+ */
+function createQuerier(method) {
+  return function (selector, context) {
+    if (!isNonBlankString(selector)) {
+      return _document2['default'][method](null);
+    }
+    if (isNonBlankString(context)) {
+      context = _document2['default'].querySelector(context);
+    }
+
+    var ctx = isEl(context) ? context : _document2['default'];
+
+    return ctx[method] && ctx[method](selector);
+  };
+}
+
+/**
+ * Shorthand for document.getElementById()
+ * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.
+ *
+ * @param  {String} id  Element ID
+ * @return {Element}    Element with supplied ID
+ * @function getEl
+ */
+function getEl(id) {
+  if (id.indexOf('#') === 0) {
+    id = id.slice(1);
+  }
+
+  return _document2['default'].getElementById(id);
+}
+
+/**
+ * Creates an element and applies properties.
+ *
+ * @param  {String} [tagName='div'] Name of tag to be created.
+ * @param  {Object} [properties={}] Element properties to be applied.
+ * @param  {Object} [attributes={}] Element attributes to be applied.
+ * @return {Element}
+ * @function createEl
+ */
+function createEl() {
+  var tagName = arguments.length <= 0 || arguments[0] === undefined ? 'div' : arguments[0];
+  var properties = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+  var attributes = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+  var el = _document2['default'].createElement(tagName);
+
+  Object.getOwnPropertyNames(properties).forEach(function (propName) {
+    var val = properties[propName];
+
+    // See #2176
+    // We originally were accepting both properties and attributes in the
+    // same object, but that doesn't work so well.
+    if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {
+      _log2['default'].warn((0, _tsml2['default'])(_templateObject, propName, val));
+      el.setAttribute(propName, val);
+    } else {
+      el[propName] = val;
+    }
+  });
+
+  Object.getOwnPropertyNames(attributes).forEach(function (attrName) {
+    el.setAttribute(attrName, attributes[attrName]);
+  });
+
+  return el;
+}
+
+/**
+ * Injects text into an element, replacing any existing contents entirely.
+ *
+ * @param  {Element} el
+ * @param  {String} text
+ * @return {Element}
+ * @function textContent
+ */
+function textContent(el, text) {
+  if (typeof el.textContent === 'undefined') {
+    el.innerText = text;
+  } else {
+    el.textContent = text;
+  }
+}
+
+/**
+ * Insert an element as the first child node of another
+ *
+ * @param  {Element} child   Element to insert
+ * @param  {Element} parent Element to insert child into
+ * @private
+ * @function insertElFirst
+ */
+function insertElFirst(child, parent) {
+  if (parent.firstChild) {
+    parent.insertBefore(child, parent.firstChild);
+  } else {
+    parent.appendChild(child);
+  }
+}
+
+/**
+ * Element Data Store. Allows for binding data to an element without putting it directly on the element.
+ * Ex. Event listeners are stored here.
+ * (also from jsninja.com, slightly modified and updated for closure compiler)
+ *
+ * @type {Object}
+ * @private
+ */
+var elData = {};
+
+/*
+ * Unique attribute name to store an element's guid in
+ *
+ * @type {String}
+ * @constant
+ * @private
+ */
+var elIdAttr = 'vdata' + new Date().getTime();
+
+/**
+ * Returns the cache object where data for an element is stored
+ *
+ * @param  {Element} el Element to store data for.
+ * @return {Object}
+ * @function getElData
+ */
+function getElData(el) {
+  var id = el[elIdAttr];
+
+  if (!id) {
+    id = el[elIdAttr] = Guid.newGUID();
+  }
+
+  if (!elData[id]) {
+    elData[id] = {};
+  }
+
+  return elData[id];
+}
+
+/**
+ * Returns whether or not an element has cached data
+ *
+ * @param  {Element} el A dom element
+ * @return {Boolean}
+ * @private
+ * @function hasElData
+ */
+function hasElData(el) {
+  var id = el[elIdAttr];
+
+  if (!id) {
+    return false;
+  }
+
+  return !!Object.getOwnPropertyNames(elData[id]).length;
+}
+
+/**
+ * Delete data for the element from the cache and the guid attr from getElementById
+ *
+ * @param  {Element} el Remove data for an element
+ * @private
+ * @function removeElData
+ */
+function removeElData(el) {
+  var id = el[elIdAttr];
+
+  if (!id) {
+    return;
+  }
+
+  // Remove all stored data
+  delete elData[id];
+
+  // Remove the elIdAttr property from the DOM node
+  try {
+    delete el[elIdAttr];
+  } catch (e) {
+    if (el.removeAttribute) {
+      el.removeAttribute(elIdAttr);
+    } else {
+      // IE doesn't appear to support removeAttribute on the document element
+      el[elIdAttr] = null;
+    }
+  }
+}
+
+/**
+ * Check if an element has a CSS class
+ *
+ * @function hasElClass
+ * @param {Element} element Element to check
+ * @param {String} classToCheck Classname to check
+ */
+function hasElClass(element, classToCheck) {
+  if (element.classList) {
+    return element.classList.contains(classToCheck);
+  }
+  throwIfWhitespace(classToCheck);
+  return classRegExp(classToCheck).test(element.className);
+}
+
+/**
+ * Add a CSS class name to an element
+ *
+ * @function addElClass
+ * @param {Element} element    Element to add class name to
+ * @param {String} classToAdd Classname to add
+ */
+function addElClass(element, classToAdd) {
+  if (element.classList) {
+    element.classList.add(classToAdd);
+
+    // Don't need to `throwIfWhitespace` here because `hasElClass` will do it
+    // in the case of classList not being supported.
+  } else if (!hasElClass(element, classToAdd)) {
+    element.className = (element.className + ' ' + classToAdd).trim();
+  }
+
+  return element;
+}
+
+/**
+ * Remove a CSS class name from an element
+ *
+ * @function removeElClass
+ * @param {Element} element    Element to remove from class name
+ * @param {String} classToRemove Classname to remove
+ */
+function removeElClass(element, classToRemove) {
+  if (element.classList) {
+    element.classList.remove(classToRemove);
+  } else {
+    throwIfWhitespace(classToRemove);
+    element.className = element.className.split(/\s+/).filter(function (c) {
+      return c !== classToRemove;
+    }).join(' ');
+  }
+
+  return element;
+}
+
+/**
+ * Adds or removes a CSS class name on an element depending on an optional
+ * condition or the presence/absence of the class name.
+ *
+ * @function toggleElClass
+ * @param    {Element} element
+ * @param    {String} classToToggle
+ * @param    {Boolean|Function} [predicate]
+ *           Can be a function that returns a Boolean. If `true`, the class
+ *           will be added; if `false`, the class will be removed. If not
+ *           given, the class will be added if not present and vice versa.
+ */
+function toggleElClass(element, classToToggle, predicate) {
+
+  // This CANNOT use `classList` internally because IE does not support the
+  // second parameter to the `classList.toggle()` method! Which is fine because
+  // `classList` will be used by the add/remove functions.
+  var has = hasElClass(element, classToToggle);
+
+  if (typeof predicate === 'function') {
+    predicate = predicate(element, classToToggle);
+  }
+
+  if (typeof predicate !== 'boolean') {
+    predicate = !has;
+  }
+
+  // If the necessary class operation matches the current state of the
+  // element, no action is required.
+  if (predicate === has) {
+    return;
+  }
+
+  if (predicate) {
+    addElClass(element, classToToggle);
+  } else {
+    removeElClass(element, classToToggle);
+  }
+
+  return element;
+}
+
+/**
+ * Apply attributes to an HTML element.
+ *
+ * @param  {Element} el         Target element.
+ * @param  {Object=} attributes Element attributes to be applied.
+ * @private
+ * @function setElAttributes
+ */
+function setElAttributes(el, attributes) {
+  Object.getOwnPropertyNames(attributes).forEach(function (attrName) {
+    var attrValue = attributes[attrName];
+
+    if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {
+      el.removeAttribute(attrName);
+    } else {
+      el.setAttribute(attrName, attrValue === true ? '' : attrValue);
+    }
+  });
+}
+
+/**
+ * Get an element's attribute values, as defined on the HTML tag
+ * Attributes are not the same as properties. They're defined on the tag
+ * or with setAttribute (which shouldn't be used with HTML)
+ * This will return true or false for boolean attributes.
+ *
+ * @param  {Element} tag Element from which to get tag attributes
+ * @return {Object}
+ * @private
+ * @function getElAttributes
+ */
+function getElAttributes(tag) {
+  var obj = {};
+
+  // known boolean attributes
+  // we can check for matching boolean properties, but older browsers
+  // won't know about HTML5 boolean attributes that we still read from
+  var knownBooleans = ',' + 'autoplay,controls,loop,muted,default' + ',';
+
+  if (tag && tag.attributes && tag.attributes.length > 0) {
+    var attrs = tag.attributes;
+
+    for (var i = attrs.length - 1; i >= 0; i--) {
+      var attrName = attrs[i].name;
+      var attrVal = attrs[i].value;
+
+      // check for known booleans
+      // the matching element property will return a value for typeof
+      if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) {
+        // the value of an included boolean attribute is typically an empty
+        // string ('') which would equal false if we just check for a false value.
+        // we also don't want support bad code like autoplay='false'
+        attrVal = attrVal !== null ? true : false;
+      }
+
+      obj[attrName] = attrVal;
+    }
+  }
+
+  return obj;
+}
+
+/**
+ * Attempt to block the ability to select text while dragging controls
+ *
+ * @return {Boolean}
+ * @function blockTextSelection
+ */
+function blockTextSelection() {
+  _document2['default'].body.focus();
+  _document2['default'].onselectstart = function () {
+    return false;
+  };
+}
+
+/**
+ * Turn off text selection blocking
+ *
+ * @return {Boolean}
+ * @function unblockTextSelection
+ */
+function unblockTextSelection() {
+  _document2['default'].onselectstart = function () {
+    return true;
+  };
+}
+
+/**
+ * Offset Left
+ * getBoundingClientRect technique from
+ * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/
+ *
+ * @function findElPosition
+ * @param {Element} el Element from which to get offset
+ * @return {Object}
+ */
+function findElPosition(el) {
+  var box = void 0;
+
+  if (el.getBoundingClientRect && el.parentNode) {
+    box = el.getBoundingClientRect();
+  }
+
+  if (!box) {
+    return {
+      left: 0,
+      top: 0
+    };
+  }
+
+  var docEl = _document2['default'].documentElement;
+  var body = _document2['default'].body;
+
+  var clientLeft = docEl.clientLeft || body.clientLeft || 0;
+  var scrollLeft = _window2['default'].pageXOffset || body.scrollLeft;
+  var left = box.left + scrollLeft - clientLeft;
+
+  var clientTop = docEl.clientTop || body.clientTop || 0;
+  var scrollTop = _window2['default'].pageYOffset || body.scrollTop;
+  var top = box.top + scrollTop - clientTop;
+
+  // Android sometimes returns slightly off decimal values, so need to round
+  return {
+    left: Math.round(left),
+    top: Math.round(top)
+  };
+}
+
+/**
+ * Get pointer position in element
+ * Returns an object with x and y coordinates.
+ * The base on the coordinates are the bottom left of the element.
+ *
+ * @function getPointerPosition
+ * @param {Element} el Element on which to get the pointer position on
+ * @param {Event} event Event object
+ * @return {Object} This object will have x and y coordinates corresponding to the mouse position
+ */
+function getPointerPosition(el, event) {
+  var position = {};
+  var box = findElPosition(el);
+  var boxW = el.offsetWidth;
+  var boxH = el.offsetHeight;
+
+  var boxY = box.top;
+  var boxX = box.left;
+  var pageY = event.pageY;
+  var pageX = event.pageX;
+
+  if (event.changedTouches) {
+    pageX = event.changedTouches[0].pageX;
+    pageY = event.changedTouches[0].pageY;
+  }
+
+  position.y = Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH));
+  position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));
+
+  return position;
+}
+
+/**
+ * Determines, via duck typing, whether or not a value is a text node.
+ *
+ * @param  {Mixed} value
+ * @return {Boolean}
+ */
+function isTextNode(value) {
+  return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 3;
+}
+
+/**
+ * Empties the contents of an element.
+ *
+ * @function emptyEl
+ * @param    {Element} el
+ * @return   {Element}
+ */
+function emptyEl(el) {
+  while (el.firstChild) {
+    el.removeChild(el.firstChild);
+  }
+  return el;
+}
+
+/**
+ * Normalizes content for eventual insertion into the DOM.
+ *
+ * This allows a wide range of content definition methods, but protects
+ * from falling into the trap of simply writing to `innerHTML`, which is
+ * an XSS concern.
+ *
+ * The content for an element can be passed in multiple types and
+ * combinations, whose behavior is as follows:
+ *
+ * - String
+ *   Normalized into a text node.
+ *
+ * - Element, TextNode
+ *   Passed through.
+ *
+ * - Array
+ *   A one-dimensional array of strings, elements, nodes, or functions (which
+ *   return single strings, elements, or nodes).
+ *
+ * - Function
+ *   If the sole argument, is expected to produce a string, element,
+ *   node, or array.
+ *
+ * @function normalizeContent
+ * @param    {String|Element|TextNode|Array|Function} content
+ * @return   {Array}
+ */
+function normalizeContent(content) {
+
+  // First, invoke content if it is a function. If it produces an array,
+  // that needs to happen before normalization.
+  if (typeof content === 'function') {
+    content = content();
+  }
+
+  // Next up, normalize to an array, so one or many items can be normalized,
+  // filtered, and returned.
+  return (Array.isArray(content) ? content : [content]).map(function (value) {
+
+    // First, invoke value if it is a function to produce a new value,
+    // which will be subsequently normalized to a Node of some kind.
+    if (typeof value === 'function') {
+      value = value();
+    }
+
+    if (isEl(value) || isTextNode(value)) {
+      return value;
+    }
+
+    if (typeof value === 'string' && /\S/.test(value)) {
+      return _document2['default'].createTextNode(value);
+    }
+  }).filter(function (value) {
+    return value;
+  });
+}
+
+/**
+ * Normalizes and appends content to an element.
+ *
+ * @function appendContent
+ * @param    {Element} el
+ * @param    {String|Element|TextNode|Array|Function} content
+ *           See: `normalizeContent`
+ * @return   {Element}
+ */
+function appendContent(el, content) {
+  normalizeContent(content).forEach(function (node) {
+    return el.appendChild(node);
+  });
+  return el;
+}
+
+/**
+ * Normalizes and inserts content into an element; this is identical to
+ * `appendContent()`, except it empties the element first.
+ *
+ * @function insertContent
+ * @param    {Element} el
+ * @param    {String|Element|TextNode|Array|Function} content
+ *           See: `normalizeContent`
+ * @return   {Element}
+ */
+function insertContent(el, content) {
+  return appendContent(emptyEl(el), content);
+}
+
+/**
+ * Finds a single DOM element matching `selector` within the optional
+ * `context` of another DOM element (defaulting to `document`).
+ *
+ * @function $
+ * @param    {String} selector
+ *           A valid CSS selector, which will be passed to `querySelector`.
+ *
+ * @param    {Element|String} [context=document]
+ *           A DOM element within which to query. Can also be a selector
+ *           string in which case the first matching element will be used
+ *           as context. If missing (or no element matches selector), falls
+ *           back to `document`.
+ *
+ * @return   {Element|null}
+ */
+var $ = exports.$ = createQuerier('querySelector');
+
+/**
+ * Finds a all DOM elements matching `selector` within the optional
+ * `context` of another DOM element (defaulting to `document`).
+ *
+ * @function $$
+ * @param    {String} selector
+ *           A valid CSS selector, which will be passed to `querySelectorAll`.
+ *
+ * @param    {Element|String} [context=document]
+ *           A DOM element within which to query. Can also be a selector
+ *           string in which case the first matching element will be used
+ *           as context. If missing (or no element matches selector), falls
+ *           back to `document`.
+ *
+ * @return   {NodeList}
+ */
+var $$ = exports.$$ = createQuerier('querySelectorAll');
+
+},{"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93,"tsml":146}],81:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.fixEvent = fixEvent;
+exports.on = on;
+exports.off = off;
+exports.trigger = trigger;
+exports.one = one;
+
+var _dom = _dereq_('./dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _guid = _dereq_('./guid.js');
+
+var Guid = _interopRequireWildcard(_guid);
+
+var _log = _dereq_('./log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+/**
+ * Clean up the listener cache and dispatchers
+*
+ * @param  {Element|Object} elem Element to clean up
+ * @param  {String} type Type of event to clean up
+ * @private
+ * @method _cleanUpEvents
+ */
+function _cleanUpEvents(elem, type) {
+  var data = Dom.getElData(elem);
+
+  // Remove the events of a particular type if there are none left
+  if (data.handlers[type].length === 0) {
+    delete data.handlers[type];
+    // data.handlers[type] = null;
+    // Setting to null was causing an error with data.handlers
+
+    // Remove the meta-handler from the element
+    if (elem.removeEventListener) {
+      elem.removeEventListener(type, data.dispatcher, false);
+    } else if (elem.detachEvent) {
+      elem.detachEvent('on' + type, data.dispatcher);
+    }
+  }
+
+  // Remove the events object if there are no types left
+  if (Object.getOwnPropertyNames(data.handlers).length <= 0) {
+    delete data.handlers;
+    delete data.dispatcher;
+    delete data.disabled;
+  }
+
+  // Finally remove the element data if there is no data left
+  if (Object.getOwnPropertyNames(data).length === 0) {
+    Dom.removeElData(elem);
+  }
+}
+
+/**
+ * Loops through an array of event types and calls the requested method for each type.
+ *
+ * @param  {Function} fn   The event method we want to use.
+ * @param  {Element|Object} elem Element or object to bind listeners to
+ * @param  {String}   type Type of event to bind to.
+ * @param  {Function} callback   Event listener.
+ * @private
+ * @function _handleMultipleEvents
+ */
+/**
+ * @file events.js
+ *
+ * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)
+ * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)
+ * This should work very similarly to jQuery's events, however it's based off the book version which isn't as
+ * robust as jquery's, so there's probably some differences.
+ */
+
+function _handleMultipleEvents(fn, elem, types, callback) {
+  types.forEach(function (type) {
+    // Call the event method for each one of the types
+    fn(elem, type, callback);
+  });
+}
+
+/**
+ * Fix a native event to have standard property values
+ *
+ * @param  {Object} event Event object to fix
+ * @return {Object}
+ * @private
+ * @method fixEvent
+ */
+function fixEvent(event) {
+
+  function returnTrue() {
+    return true;
+  }
+
+  function returnFalse() {
+    return false;
+  }
+
+  // Test if fixing up is needed
+  // Used to check if !event.stopPropagation instead of isPropagationStopped
+  // But native events return true for stopPropagation, but don't have
+  // other expected methods like isPropagationStopped. Seems to be a problem
+  // with the Javascript Ninja code. So we're just overriding all events now.
+  if (!event || !event.isPropagationStopped) {
+    (function () {
+      var old = event || _window2['default'].event;
+
+      event = {};
+      // Clone the old object so that we can modify the values event = {};
+      // IE8 Doesn't like when you mess with native event properties
+      // Firefox returns false for event.hasOwnProperty('type') and other props
+      //  which makes copying more difficult.
+      // TODO: Probably best to create a whitelist of event props
+      for (var key in old) {
+        // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y
+        // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation
+        // and webkitMovementX/Y
+        if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY') {
+          // Chrome 32+ warns if you try to copy deprecated returnValue, but
+          // we still want to if preventDefault isn't supported (IE8).
+          if (!(key === 'returnValue' && old.preventDefault)) {
+            event[key] = old[key];
+          }
+        }
+      }
+
+      // The event occurred on this element
+      if (!event.target) {
+        event.target = event.srcElement || _document2['default'];
+      }
+
+      // Handle which other element the event is related to
+      if (!event.relatedTarget) {
+        event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+      }
+
+      // Stop the default browser action
+      event.preventDefault = function () {
+        if (old.preventDefault) {
+          old.preventDefault();
+        }
+        event.returnValue = false;
+        old.returnValue = false;
+        event.defaultPrevented = true;
+      };
+
+      event.defaultPrevented = false;
+
+      // Stop the event from bubbling
+      event.stopPropagation = function () {
+        if (old.stopPropagation) {
+          old.stopPropagation();
+        }
+        event.cancelBubble = true;
+        old.cancelBubble = true;
+        event.isPropagationStopped = returnTrue;
+      };
+
+      event.isPropagationStopped = returnFalse;
+
+      // Stop the event from bubbling and executing other handlers
+      event.stopImmediatePropagation = function () {
+        if (old.stopImmediatePropagation) {
+          old.stopImmediatePropagation();
+        }
+        event.isImmediatePropagationStopped = returnTrue;
+        event.stopPropagation();
+      };
+
+      event.isImmediatePropagationStopped = returnFalse;
+
+      // Handle mouse position
+      if (event.clientX !== null && event.clientX !== undefined) {
+        var doc = _document2['default'].documentElement;
+        var body = _document2['default'].body;
+
+        event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+        event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+      }
+
+      // Handle key presses
+      event.which = event.charCode || event.keyCode;
+
+      // Fix button for mouse clicks:
+      // 0 == left; 1 == middle; 2 == right
+      if (event.button !== null && event.button !== undefined) {
+
+        // The following is disabled because it does not pass videojs-standard
+        // and... yikes.
+        /* eslint-disable */
+        event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0;
+        /* eslint-enable */
+      }
+    })();
+  }
+
+  // Returns fixed-up instance
+  return event;
+}
+
+/**
+ * Add an event listener to element
+ * It stores the handler function in a separate cache object
+ * and adds a generic handler to the element's event,
+ * along with a unique id (guid) to the element.
+ *
+ * @param  {Element|Object}   elem Element or object to bind listeners to
+ * @param  {String|Array}   type Type of event to bind to.
+ * @param  {Function} fn   Event listener.
+ * @method on
+ */
+function on(elem, type, fn) {
+  if (Array.isArray(type)) {
+    return _handleMultipleEvents(on, elem, type, fn);
+  }
+
+  var data = Dom.getElData(elem);
+
+  // We need a place to store all our handler data
+  if (!data.handlers) {
+    data.handlers = {};
+  }
+
+  if (!data.handlers[type]) {
+    data.handlers[type] = [];
+  }
+
+  if (!fn.guid) {
+    fn.guid = Guid.newGUID();
+  }
+
+  data.handlers[type].push(fn);
+
+  if (!data.dispatcher) {
+    data.disabled = false;
+
+    data.dispatcher = function (event, hash) {
+
+      if (data.disabled) {
+        return;
+      }
+
+      event = fixEvent(event);
+
+      var handlers = data.handlers[event.type];
+
+      if (handlers) {
+        // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.
+        var handlersCopy = handlers.slice(0);
+
+        for (var m = 0, n = handlersCopy.length; m < n; m++) {
+          if (event.isImmediatePropagationStopped()) {
+            break;
+          } else {
+            try {
+              handlersCopy[m].call(elem, event, hash);
+            } catch (e) {
+              _log2['default'].error(e);
+            }
+          }
+        }
+      }
+    };
+  }
+
+  if (data.handlers[type].length === 1) {
+    if (elem.addEventListener) {
+      elem.addEventListener(type, data.dispatcher, false);
+    } else if (elem.attachEvent) {
+      elem.attachEvent('on' + type, data.dispatcher);
+    }
+  }
+}
+
+/**
+ * Removes event listeners from an element
+ *
+ * @param  {Element|Object}   elem Object to remove listeners from
+ * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.
+ * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.
+ * @method off
+ */
+function off(elem, type, fn) {
+  // Don't want to add a cache object through getElData if not needed
+  if (!Dom.hasElData(elem)) {
+    return;
+  }
+
+  var data = Dom.getElData(elem);
+
+  // If no events exist, nothing to unbind
+  if (!data.handlers) {
+    return;
+  }
+
+  if (Array.isArray(type)) {
+    return _handleMultipleEvents(off, elem, type, fn);
+  }
+
+  // Utility function
+  var removeType = function removeType(t) {
+    data.handlers[t] = [];
+    _cleanUpEvents(elem, t);
+  };
+
+  // Are we removing all bound events?
+  if (!type) {
+    for (var t in data.handlers) {
+      removeType(t);
+    }
+    return;
+  }
+
+  var handlers = data.handlers[type];
+
+  // If no handlers exist, nothing to unbind
+  if (!handlers) {
+    return;
+  }
+
+  // If no listener was provided, remove all listeners for type
+  if (!fn) {
+    removeType(type);
+    return;
+  }
+
+  // We're only removing a single handler
+  if (fn.guid) {
+    for (var n = 0; n < handlers.length; n++) {
+      if (handlers[n].guid === fn.guid) {
+        handlers.splice(n--, 1);
+      }
+    }
+  }
+
+  _cleanUpEvents(elem, type);
+}
+
+/**
+ * Trigger an event for an element
+ *
+ * @param  {Element|Object}      elem  Element to trigger an event on
+ * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute
+ * @param  {Object} [hash] data hash to pass along with the event
+ * @return {Boolean=} Returned only if default was prevented
+ * @method trigger
+ */
+function trigger(elem, event, hash) {
+  // Fetches element data and a reference to the parent (for bubbling).
+  // Don't want to add a data object to cache for every parent,
+  // so checking hasElData first.
+  var elemData = Dom.hasElData(elem) ? Dom.getElData(elem) : {};
+  var parent = elem.parentNode || elem.ownerDocument;
+  // type = event.type || event,
+  // handler;
+
+  // If an event name was passed as a string, creates an event out of it
+  if (typeof event === 'string') {
+    event = { type: event, target: elem };
+  }
+  // Normalizes the event properties.
+  event = fixEvent(event);
+
+  // If the passed element has a dispatcher, executes the established handlers.
+  if (elemData.dispatcher) {
+    elemData.dispatcher.call(elem, event, hash);
+  }
+
+  // Unless explicitly stopped or the event does not bubble (e.g. media events)
+  // recursively calls this function to bubble the event up the DOM.
+  if (parent && !event.isPropagationStopped() && event.bubbles === true) {
+    trigger.call(null, parent, event, hash);
+
+    // If at the top of the DOM, triggers the default action unless disabled.
+  } else if (!parent && !event.defaultPrevented) {
+    var targetData = Dom.getElData(event.target);
+
+    // Checks if the target has a default action for this event.
+    if (event.target[event.type]) {
+      // Temporarily disables event dispatching on the target as we have already executed the handler.
+      targetData.disabled = true;
+      // Executes the default action.
+      if (typeof event.target[event.type] === 'function') {
+        event.target[event.type]();
+      }
+      // Re-enables event dispatching.
+      targetData.disabled = false;
+    }
+  }
+
+  // Inform the triggerer if the default was prevented by returning false
+  return !event.defaultPrevented;
+}
+
+/**
+ * Trigger a listener only once for an event
+ *
+ * @param  {Element|Object}   elem Element or object to
+ * @param  {String|Array}   type Name/type of event
+ * @param  {Function} fn Event handler function
+ * @method one
+ */
+function one(elem, type, fn) {
+  if (Array.isArray(type)) {
+    return _handleMultipleEvents(one, elem, type, fn);
+  }
+  var func = function func() {
+    off(elem, type, func);
+    fn.apply(this, arguments);
+  };
+
+  // copy the guid to the new function so it can removed using the original function's ID
+  func.guid = fn.guid = fn.guid || Guid.newGUID();
+  on(elem, type, func);
+}
+
+},{"./dom.js":80,"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93}],82:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.bind = undefined;
+
+var _guid = _dereq_('./guid.js');
+
+/**
+ * Bind (a.k.a proxy or Context). A simple method for changing the context of a function
+ * It also stores a unique id on the function so it can be easily removed from events
+ *
+ * @param  {*}   context The object to bind as scope
+ * @param  {Function} fn      The function to be bound to a scope
+ * @param  {Number=}   uid     An optional unique ID for the function to be set
+ * @return {Function}
+ * @private
+ * @method bind
+ */
+var bind = exports.bind = function bind(context, fn, uid) {
+  // Make sure the function has a unique ID
+  if (!fn.guid) {
+    fn.guid = (0, _guid.newGUID)();
+  }
+
+  // Create the new function that changes the context
+  var ret = function ret() {
+    return fn.apply(context, arguments);
+  };
+
+  // Allow for the ability to individualize this function
+  // Needed in the case where multiple objects might share the same prototype
+  // IF both items add an event listener with the same function, then you try to remove just one
+  // it will remove both because they both have the same guid.
+  // when using this, you need to use the bind method when you remove the listener as well.
+  // currently used in text tracks
+  ret.guid = uid ? uid + '_' + fn.guid : fn.guid;
+
+  return ret;
+}; /**
+    * @file fn.js
+    */
+
+},{"./guid.js":84}],83:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+/**
+ * @file format-time.js
+ *
+ * Format seconds as a time string, H:MM:SS or M:SS
+ * Supplying a guide (in seconds) will force a number of leading zeros
+ * to cover the length of the guide
+ *
+ * @param  {Number} seconds Number of seconds to be turned into a string
+ * @param  {Number} guide   Number (in seconds) to model the string after
+ * @return {String}         Time formatted as H:MM:SS or M:SS
+ * @private
+ * @function formatTime
+ */
+function formatTime(seconds) {
+  var guide = arguments.length <= 1 || arguments[1] === undefined ? seconds : arguments[1];
+
+  seconds = seconds < 0 ? 0 : seconds;
+  var s = Math.floor(seconds % 60);
+  var m = Math.floor(seconds / 60 % 60);
+  var h = Math.floor(seconds / 3600);
+  var gm = Math.floor(guide / 60 % 60);
+  var gh = Math.floor(guide / 3600);
+
+  // handle invalid times
+  if (isNaN(seconds) || seconds === Infinity) {
+    // '-' is false for all relational operators (e.g. <, >=) so this setting
+    // will add the minimum number of fields specified by the guide
+    h = m = s = '-';
+  }
+
+  // Check if we need to show hours
+  h = h > 0 || gh > 0 ? h + ':' : '';
+
+  // If hours are showing, we may need to add a leading zero.
+  // Always show at least one digit of minutes.
+  m = ((h || gm >= 10) && m < 10 ? '0' + m : m) + ':';
+
+  // Check if leading zero is need for seconds
+  s = s < 10 ? '0' + s : s;
+
+  return h + m + s;
+}
+
+exports['default'] = formatTime;
+
+},{}],84:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.newGUID = newGUID;
+/**
+ * @file guid.js
+ *
+ * Unique ID for an element or function
+ * @type {Number}
+ * @private
+ */
+var _guid = 1;
+
+/**
+ * Get the next unique ID
+ *
+ * @return {String}
+ * @function newGUID
+ */
+function newGUID() {
+  return _guid++;
+}
+
+},{}],85:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.logByType = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file log.js
+                                                                                                                                                                                                                                                   */
+
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _browser = _dereq_('./browser');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var log = void 0;
+
+/**
+ * Log messages to the console and history based on the type of message
+ *
+ * @param  {String} type
+ *         The name of the console method to use.
+ * @param  {Array} args
+ *         The arguments to be passed to the matching console method.
+ * @param  {Boolean} [stringify]
+ *         By default, only old IEs should get console argument stringification,
+ *         but this is exposed as a parameter to facilitate testing.
+ */
+var logByType = exports.logByType = function logByType(type, args) {
+  var stringify = arguments.length <= 2 || arguments[2] === undefined ? !!_browser.IE_VERSION && _browser.IE_VERSION < 11 : arguments[2];
+
+
+  // If there's no console then don't try to output messages, but they will
+  // still be stored in `log.history`.
+  //
+  // Was setting these once outside of this function, but containing them
+  // in the function makes it easier to test cases where console doesn't exist
+  // when the module is executed.
+  var fn = _window2['default'].console && _window2['default'].console[type] || function () {};
+
+  if (type !== 'log') {
+
+    // add the type to the front of the message when it's not "log"
+    args.unshift(type.toUpperCase() + ':');
+  }
+
+  // add to history
+  log.history.push(args);
+
+  // add console prefix after adding to history
+  args.unshift('VIDEOJS:');
+
+  // IEs previous to 11 log objects uselessly as "[object Object]"; so, JSONify
+  // objects and arrays for those less-capable browsers.
+  if (stringify) {
+    args = args.map(function (a) {
+      if (a && (typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object' || Array.isArray(a)) {
+        try {
+          return JSON.stringify(a);
+        } catch (x) {
+          return String(a);
+        }
+      }
+
+      // Cast to string before joining, so we get null and undefined explicitly
+      // included in output (as we would in a modern console).
+      return String(a);
+    }).join(' ');
+  }
+
+  // Old IE versions do not allow .apply() for console methods (they are
+  // reported as objects rather than functions).
+  if (!fn.apply) {
+    fn(args);
+  } else {
+    fn[Array.isArray(args) ? 'apply' : 'call'](console, args);
+  }
+};
+
+/**
+ * Log plain debug messages
+ *
+ * @function log
+ */
+log = function log() {
+  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  logByType('log', args);
+};
+
+/**
+ * Keep a history of log messages
+ *
+ * @type {Array}
+ */
+log.history = [];
+
+/**
+ * Log error messages
+ *
+ * @method error
+ */
+log.error = function () {
+  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+    args[_key2] = arguments[_key2];
+  }
+
+  return logByType('error', args);
+};
+
+/**
+ * Log warning messages
+ *
+ * @method warn
+ */
+log.warn = function () {
+  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+    args[_key3] = arguments[_key3];
+  }
+
+  return logByType('warn', args);
+};
+
+exports['default'] = log;
+
+},{"./browser":78,"global/window":93}],86:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file merge-options.js
+                                                                                                                                                                                                                                                   */
+
+
+exports['default'] = mergeOptions;
+
+var _merge = _dereq_('lodash-compat/object/merge');
+
+var _merge2 = _interopRequireDefault(_merge);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function isPlain(obj) {
+  return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj.toString() === '[object Object]' && obj.constructor === Object;
+}
+
+/**
+ * Merge customizer. video.js simply overwrites non-simple objects
+ * (like arrays) instead of attempting to overlay them.
+ * @see https://lodash.com/docs#merge
+ */
+function customizer(destination, source) {
+  // If we're not working with a plain object, copy the value as is
+  // If source is an array, for instance, it will replace destination
+  if (!isPlain(source)) {
+    return source;
+  }
+
+  // If the new value is a plain object but the first object value is not
+  // we need to create a new object for the first object to merge with.
+  // This makes it consistent with how merge() works by default
+  // and also protects from later changes the to first object affecting
+  // the second object's values.
+  if (!isPlain(destination)) {
+    return mergeOptions(source);
+  }
+}
+
+/**
+ * Merge one or more options objects, recursively merging **only**
+ * plain object properties.  Previously `deepMerge`.
+ *
+ * @param  {...Object} source One or more objects to merge
+ * @returns {Object}          a new object that is the union of all
+ * provided objects
+ * @function mergeOptions
+ */
+function mergeOptions() {
+  // contruct the call dynamically to handle the variable number of
+  // objects to merge
+  var args = Array.prototype.slice.call(arguments);
+
+  // unshift an empty object into the front of the call as the target
+  // of the merge
+  args.unshift({});
+
+  // customize conflict resolution to match our historical merge behavior
+  args.push(customizer);
+
+  _merge2['default'].apply(null, args);
+
+  // return the mutated result object
+  return args[0];
+}
+
+},{"lodash-compat/object/merge":131}],87:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.setTextContent = exports.createStyleElement = undefined;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var createStyleElement = exports.createStyleElement = function createStyleElement(className) {
+  var style = _document2['default'].createElement('style');
+
+  style.className = className;
+
+  return style;
+};
+
+var setTextContent = exports.setTextContent = function setTextContent(el, content) {
+  if (el.styleSheet) {
+    el.styleSheet.cssText = content;
+  } else {
+    el.textContent = content;
+  }
+};
+
+},{"global/document":92}],88:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.createTimeRange = undefined;
+exports.createTimeRanges = createTimeRanges;
+
+var _log = _dereq_('./log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function rangeCheck(fnName, index, maxIndex) {
+  if (index < 0 || index > maxIndex) {
+    throw new Error('Failed to execute \'' + fnName + '\' on \'TimeRanges\': The index provided (' + index + ') is greater than or equal to the maximum bound (' + maxIndex + ').');
+  }
+}
+
+function getRange(fnName, valueIndex, ranges, rangeIndex) {
+  if (rangeIndex === undefined) {
+    _log2['default'].warn('DEPRECATED: Function \'' + fnName + '\' on \'TimeRanges\' called without an index argument.');
+    rangeIndex = 0;
+  }
+  rangeCheck(fnName, rangeIndex, ranges.length - 1);
+  return ranges[rangeIndex][valueIndex];
+}
+
+function createTimeRangesObj(ranges) {
+  if (ranges === undefined || ranges.length === 0) {
+    return {
+      length: 0,
+      start: function start() {
+        throw new Error('This TimeRanges object is empty');
+      },
+      end: function end() {
+        throw new Error('This TimeRanges object is empty');
+      }
+    };
+  }
+  return {
+    length: ranges.length,
+    start: getRange.bind(null, 'start', 0, ranges),
+    end: getRange.bind(null, 'end', 1, ranges)
+  };
+}
+
+/**
+ * @file time-ranges.js
+ *
+ * Should create a fake TimeRange object
+ * Mimics an HTML5 time range instance, which has functions that
+ * return the start and end times for a range
+ * TimeRanges are returned by the buffered() method
+ *
+ * @param  {(Number|Array)} Start of a single range or an array of ranges
+ * @param  {Number} End of a single range
+ * @private
+ * @method createTimeRanges
+ */
+function createTimeRanges(start, end) {
+  if (Array.isArray(start)) {
+    return createTimeRangesObj(start);
+  } else if (start === undefined || end === undefined) {
+    return createTimeRangesObj();
+  }
+  return createTimeRangesObj([[start, end]]);
+}
+
+exports.createTimeRange = createTimeRanges;
+
+},{"./log.js":85}],89:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+/**
+ * @file to-title-case.js
+ *
+ * Uppercase the first letter of a string
+ *
+ * @param  {String} string String to be uppercased
+ * @return {String}
+ * @private
+ * @method toTitleCase
+ */
+function toTitleCase(string) {
+  return string.charAt(0).toUpperCase() + string.slice(1);
+}
+
+exports["default"] = toTitleCase;
+
+},{}],90:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.isCrossOrigin = exports.getFileExtension = exports.getAbsoluteURL = exports.parseUrl = undefined;
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Resolve and parse the elements of a URL
+ *
+ * @param  {String} url The url to parse
+ * @return {Object}     An object of url details
+ * @method parseUrl
+ */
+/**
+ * @file url.js
+ */
+var parseUrl = exports.parseUrl = function parseUrl(url) {
+  var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];
+
+  // add the url to an anchor and let the browser parse the URL
+  var a = _document2['default'].createElement('a');
+
+  a.href = url;
+
+  // IE8 (and 9?) Fix
+  // ie8 doesn't parse the URL correctly until the anchor is actually
+  // added to the body, and an innerHTML is needed to trigger the parsing
+  var addToBody = a.host === '' && a.protocol !== 'file:';
+  var div = void 0;
+
+  if (addToBody) {
+    div = _document2['default'].createElement('div');
+    div.innerHTML = '<a href="' + url + '"></a>';
+    a = div.firstChild;
+    // prevent the div from affecting layout
+    div.setAttribute('style', 'display:none; position:absolute;');
+    _document2['default'].body.appendChild(div);
+  }
+
+  // Copy the specific URL properties to a new object
+  // This is also needed for IE8 because the anchor loses its
+  // properties when it's removed from the dom
+  var details = {};
+
+  for (var i = 0; i < props.length; i++) {
+    details[props[i]] = a[props[i]];
+  }
+
+  // IE9 adds the port to the host property unlike everyone else. If
+  // a port identifier is added for standard ports, strip it.
+  if (details.protocol === 'http:') {
+    details.host = details.host.replace(/:80$/, '');
+  }
+
+  if (details.protocol === 'https:') {
+    details.host = details.host.replace(/:443$/, '');
+  }
+
+  if (addToBody) {
+    _document2['default'].body.removeChild(div);
+  }
+
+  return details;
+};
+
+/**
+ * Get absolute version of relative URL. Used to tell flash correct URL.
+ * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
+ *
+ * @param  {String} url URL to make absolute
+ * @return {String}     Absolute URL
+ * @private
+ * @method getAbsoluteURL
+ */
+var getAbsoluteURL = exports.getAbsoluteURL = function getAbsoluteURL(url) {
+  // Check if absolute URL
+  if (!url.match(/^https?:\/\//)) {
+    // Convert to absolute URL. Flash hosted off-site needs an absolute URL.
+    var div = _document2['default'].createElement('div');
+
+    div.innerHTML = '<a href="' + url + '">x</a>';
+    url = div.firstChild.href;
+  }
+
+  return url;
+};
+
+/**
+ * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path
+ *
+ * @param {String}    path    The fileName path like '/path/to/file.mp4'
+ * @returns {String}          The extension in lower case or an empty string if no extension could be found.
+ * @method getFileExtension
+ */
+var getFileExtension = exports.getFileExtension = function getFileExtension(path) {
+  if (typeof path === 'string') {
+    var splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i;
+    var pathParts = splitPathRe.exec(path);
+
+    if (pathParts) {
+      return pathParts.pop().toLowerCase();
+    }
+  }
+
+  return '';
+};
+
+/**
+ * Returns whether the url passed is a cross domain request or not.
+ *
+ * @param {String} url The url to check
+ * @return {Boolean}   Whether it is a cross domain request or not
+ * @method isCrossOrigin
+ */
+var isCrossOrigin = exports.isCrossOrigin = function isCrossOrigin(url) {
+  var winLoc = _window2['default'].location;
+  var urlInfo = parseUrl(url);
+
+  // IE8 protocol relative urls will return ':' for protocol
+  var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;
+
+  // Check if url is for another domain/origin
+  // IE8 doesn't know location.origin, so we won't rely on it here
+  var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host;
+
+  return crossOrigin;
+};
+
+},{"global/document":92,"global/window":93}],91:[function(_dereq_,module,exports){
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
+                                                                                                                                                                                                                                                   * @file video.js
+                                                                                                                                                                                                                                                   */
+
+/* global define */
+
+// Include the built-in techs
+
+
+var _window = _dereq_('global/window');
+
+var _window2 = _interopRequireDefault(_window);
+
+var _document = _dereq_('global/document');
+
+var _document2 = _interopRequireDefault(_document);
+
+var _setup = _dereq_('./setup');
+
+var setup = _interopRequireWildcard(_setup);
+
+var _stylesheet = _dereq_('./utils/stylesheet.js');
+
+var stylesheet = _interopRequireWildcard(_stylesheet);
+
+var _component = _dereq_('./component');
+
+var _component2 = _interopRequireDefault(_component);
+
+var _eventTarget = _dereq_('./event-target');
+
+var _eventTarget2 = _interopRequireDefault(_eventTarget);
+
+var _events = _dereq_('./utils/events.js');
+
+var Events = _interopRequireWildcard(_events);
+
+var _player = _dereq_('./player');
+
+var _player2 = _interopRequireDefault(_player);
+
+var _plugins = _dereq_('./plugins.js');
+
+var _plugins2 = _interopRequireDefault(_plugins);
+
+var _mergeOptions = _dereq_('./utils/merge-options.js');
+
+var _mergeOptions2 = _interopRequireDefault(_mergeOptions);
+
+var _fn = _dereq_('./utils/fn.js');
+
+var Fn = _interopRequireWildcard(_fn);
+
+var _textTrack = _dereq_('./tracks/text-track.js');
+
+var _textTrack2 = _interopRequireDefault(_textTrack);
+
+var _audioTrack = _dereq_('./tracks/audio-track.js');
+
+var _audioTrack2 = _interopRequireDefault(_audioTrack);
+
+var _videoTrack = _dereq_('./tracks/video-track.js');
+
+var _videoTrack2 = _interopRequireDefault(_videoTrack);
+
+var _timeRanges = _dereq_('./utils/time-ranges.js');
+
+var _formatTime = _dereq_('./utils/format-time.js');
+
+var _formatTime2 = _interopRequireDefault(_formatTime);
+
+var _log = _dereq_('./utils/log.js');
+
+var _log2 = _interopRequireDefault(_log);
+
+var _dom = _dereq_('./utils/dom.js');
+
+var Dom = _interopRequireWildcard(_dom);
+
+var _browser = _dereq_('./utils/browser.js');
+
+var browser = _interopRequireWildcard(_browser);
+
+var _url = _dereq_('./utils/url.js');
+
+var Url = _interopRequireWildcard(_url);
+
+var _extend = _dereq_('./extend.js');
+
+var _extend2 = _interopRequireDefault(_extend);
+
+var _merge2 = _dereq_('lodash-compat/object/merge');
+
+var _merge3 = _interopRequireDefault(_merge2);
+
+var _xhr = _dereq_('xhr');
+
+var _xhr2 = _interopRequireDefault(_xhr);
+
+var _tech = _dereq_('./tech/tech.js');
+
+var _tech2 = _interopRequireDefault(_tech);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+// HTML5 Element Shim for IE8
+if (typeof HTMLVideoElement === 'undefined') {
+  _document2['default'].createElement('video');
+  _document2['default'].createElement('audio');
+  _document2['default'].createElement('track');
+}
+
+/**
+ * Doubles as the main function for users to create a player instance and also
+ * the main library object.
+ * The `videojs` function can be used to initialize or retrieve a player.
+ * ```js
+ *     var myPlayer = videojs('my_video_id');
+ * ```
+ *
+ * @param  {String|Element} id      Video element or video element ID
+ * @param  {Object=} options        Optional options object for config/settings
+ * @param  {Function=} ready        Optional ready callback
+ * @return {Player}                 A player instance
+ * @mixes videojs
+ * @method videojs
+ */
+function videojs(id, options, ready) {
+  var tag = void 0;
+
+  // Allow for element or ID to be passed in
+  // String ID
+  if (typeof id === 'string') {
+
+    // Adjust for jQuery ID syntax
+    if (id.indexOf('#') === 0) {
+      id = id.slice(1);
+    }
+
+    // If a player instance has already been created for this ID return it.
+    if (videojs.getPlayers()[id]) {
+
+      // If options or ready funtion are passed, warn
+      if (options) {
+        _log2['default'].warn('Player "' + id + '" is already initialised. Options will not be applied.');
+      }
+
+      if (ready) {
+        videojs.getPlayers()[id].ready(ready);
+      }
+
+      return videojs.getPlayers()[id];
+    }
+
+    // Otherwise get element for ID
+    tag = Dom.getEl(id);
+
+    // ID is a media element
+  } else {
+    tag = id;
+  }
+
+  // Check for a useable element
+  // re: nodeName, could be a box div also
+  if (!tag || !tag.nodeName) {
+    throw new TypeError('The element or ID supplied is not valid. (videojs)');
+  }
+
+  // Element may have a player attr referring to an already created player instance.
+  // If not, set up a new player and return the instance.
+  return tag.player || _player2['default'].players[tag.playerId] || new _player2['default'](tag, options, ready);
+}
+
+// Add default styles
+if (_window2['default'].VIDEOJS_NO_DYNAMIC_STYLE !== true) {
+  var style = Dom.$('.vjs-styles-defaults');
+
+  if (!style) {
+    style = stylesheet.createStyleElement('vjs-styles-defaults');
+    var head = Dom.$('head');
+
+    if (head) {
+      head.insertBefore(style, head.firstChild);
+    }
+    stylesheet.setTextContent(style, '\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    ');
+  }
+}
+
+// Run Auto-load players
+// 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)
+setup.autoSetupTimeout(1, videojs);
+
+/*
+ * Current software version (semver)
+ *
+ * @type {String}
+ */
+videojs.VERSION = '5.12.1';
+
+/**
+ * The global options object. These are the settings that take effect
+ * if no overrides are specified when the player is created.
+ *
+ * ```js
+ *     videojs.options.autoplay = true
+ *     // -> all players will autoplay by default
+ * ```
+ *
+ * @type {Object}
+ */
+videojs.options = _player2['default'].prototype.options_;
+
+/**
+ * Get an object with the currently created players, keyed by player ID
+ *
+ * @return {Object} The created players
+ * @mixes videojs
+ * @method getPlayers
+ */
+videojs.getPlayers = function () {
+  return _player2['default'].players;
+};
+
+/**
+ * Expose players object.
+ *
+ * @memberOf videojs
+ * @property {Object} players
+ */
+videojs.players = _player2['default'].players;
+
+/**
+ * Get a component class object by name
+ * ```js
+ *     var VjsButton = videojs.getComponent('Button');
+ *     // Create a new instance of the component
+ *     var myButton = new VjsButton(myPlayer);
+ * ```
+ *
+ * @return {Component} Component identified by name
+ * @mixes videojs
+ * @method getComponent
+ */
+videojs.getComponent = _component2['default'].getComponent;
+
+/**
+ * Register a component so it can referred to by name
+ * Used when adding to other
+ * components, either through addChild
+ * `component.addChild('myComponent')`
+ * or through default children options
+ * `{ children: ['myComponent'] }`.
+ * ```js
+ *     // Get a component to subclass
+ *     var VjsButton = videojs.getComponent('Button');
+ *     // Subclass the component (see 'extend' doc for more info)
+ *     var MySpecialButton = videojs.extend(VjsButton, {});
+ *     // Register the new component
+ *     VjsButton.registerComponent('MySepcialButton', MySepcialButton);
+ *     // (optionally) add the new component as a default player child
+ *     myPlayer.addChild('MySepcialButton');
+ * ```
+ * NOTE: You could also just initialize the component before adding.
+ * `component.addChild(new MyComponent());`
+ *
+ * @param {String} The class name of the component
+ * @param {Component} The component class
+ * @return {Component} The newly registered component
+ * @mixes videojs
+ * @method registerComponent
+ */
+videojs.registerComponent = function (name, comp) {
+  if (_tech2['default'].isTech(comp)) {
+    _log2['default'].warn('The ' + name + ' tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)');
+  }
+
+  _component2['default'].registerComponent.call(_component2['default'], name, comp);
+};
+
+/**
+ * Get a Tech class object by name
+ * ```js
+ *     var Html5 = videojs.getTech('Html5');
+ *     // Create a new instance of the component
+ *     var html5 = new Html5(options);
+ * ```
+ *
+ * @return {Tech} Tech identified by name
+ * @mixes videojs
+ * @method getComponent
+ */
+videojs.getTech = _tech2['default'].getTech;
+
+/**
+ * Register a Tech so it can referred to by name.
+ * This is used in the tech order for the player.
+ *
+ * ```js
+ *     // get the Html5 Tech
+ *     var Html5 = videojs.getTech('Html5');
+ *     var MyTech = videojs.extend(Html5, {});
+ *     // Register the new Tech
+ *     VjsButton.registerTech('Tech', MyTech);
+ *     var player = videojs('myplayer', {
+ *       techOrder: ['myTech', 'html5']
+ *     });
+ * ```
+ *
+ * @param {String} The class name of the tech
+ * @param {Tech} The tech class
+ * @return {Tech} The newly registered Tech
+ * @mixes videojs
+ * @method registerTech
+ */
+videojs.registerTech = _tech2['default'].registerTech;
+
+/**
+ * A suite of browser and device tests
+ *
+ * @type {Object}
+ * @private
+ */
+videojs.browser = browser;
+
+/**
+ * Whether or not the browser supports touch events. Included for backward
+ * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`
+ * instead going forward.
+ *
+ * @deprecated
+ * @type {Boolean}
+ */
+videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;
+
+/**
+ * Subclass an existing class
+ * Mimics ES6 subclassing with the `extend` keyword
+ * ```js
+ *     // Create a basic javascript 'class'
+ *     function MyClass(name) {
+ *       // Set a property at initialization
+ *       this.myName = name;
+ *     }
+ *     // Create an instance method
+ *     MyClass.prototype.sayMyName = function() {
+ *       alert(this.myName);
+ *     };
+ *     // Subclass the exisitng class and change the name
+ *     // when initializing
+ *     var MySubClass = videojs.extend(MyClass, {
+ *       constructor: function(name) {
+ *         // Call the super class constructor for the subclass
+ *         MyClass.call(this, name)
+ *       }
+ *     });
+ *     // Create an instance of the new sub class
+ *     var myInstance = new MySubClass('John');
+ *     myInstance.sayMyName(); // -> should alert "John"
+ * ```
+ *
+ * @param {Function} The Class to subclass
+ * @param {Object} An object including instace methods for the new class
+ *                   Optionally including a `constructor` function
+ * @return {Function} The newly created subclass
+ * @mixes videojs
+ * @method extend
+ */
+videojs.extend = _extend2['default'];
+
+/**
+ * Merge two options objects recursively
+ * Performs a deep merge like lodash.merge but **only merges plain objects**
+ * (not arrays, elements, anything else)
+ * Other values will be copied directly from the second object.
+ * ```js
+ *     var defaultOptions = {
+ *       foo: true,
+ *       bar: {
+ *         a: true,
+ *         b: [1,2,3]
+ *       }
+ *     };
+ *     var newOptions = {
+ *       foo: false,
+ *       bar: {
+ *         b: [4,5,6]
+ *       }
+ *     };
+ *     var result = videojs.mergeOptions(defaultOptions, newOptions);
+ *     // result.foo = false;
+ *     // result.bar.a = true;
+ *     // result.bar.b = [4,5,6];
+ * ```
+ *
+ * @param {Object} defaults  The options object whose values will be overriden
+ * @param {Object} overrides The options object with values to override the first
+ * @param {Object} etc       Any number of additional options objects
+ *
+ * @return {Object} a new object with the merged values
+ * @mixes videojs
+ * @method mergeOptions
+ */
+videojs.mergeOptions = _mergeOptions2['default'];
+
+/**
+ * Change the context (this) of a function
+ *
+ *     videojs.bind(newContext, function() {
+ *       this === newContext
+ *     });
+ *
+ * NOTE: as of v5.0 we require an ES5 shim, so you should use the native
+ * `function() {}.bind(newContext);` instead of this.
+ *
+ * @param  {*}        context The object to bind as scope
+ * @param  {Function} fn      The function to be bound to a scope
+ * @param  {Number=}  uid     An optional unique ID for the function to be set
+ * @return {Function}
+ */
+videojs.bind = Fn.bind;
+
+/**
+ * Create a Video.js player plugin
+ * Plugins are only initialized when options for the plugin are included
+ * in the player options, or the plugin function on the player instance is
+ * called.
+ * **See the plugin guide in the docs for a more detailed example**
+ * ```js
+ *     // Make a plugin that alerts when the player plays
+ *     videojs.plugin('myPlugin', function(myPluginOptions) {
+ *       myPluginOptions = myPluginOptions || {};
+ *
+ *       var player = this;
+ *       var alertText = myPluginOptions.text || 'Player is playing!'
+ *
+ *       player.on('play', function() {
+ *         alert(alertText);
+ *       });
+ *     });
+ *     // USAGE EXAMPLES
+ *     // EXAMPLE 1: New player with plugin options, call plugin immediately
+ *     var player1 = videojs('idOne', {
+ *       myPlugin: {
+ *         text: 'Custom text!'
+ *       }
+ *     });
+ *     // Click play
+ *     // --> Should alert 'Custom text!'
+ *     // EXAMPLE 3: New player, initialize plugin later
+ *     var player3 = videojs('idThree');
+ *     // Click play
+ *     // --> NO ALERT
+ *     // Click pause
+ *     // Initialize plugin using the plugin function on the player instance
+ *     player3.myPlugin({
+ *       text: 'Plugin added later!'
+ *     });
+ *     // Click play
+ *     // --> Should alert 'Plugin added later!'
+ * ```
+ *
+ * @param {String} name The plugin name
+ * @param {Function} fn The plugin function that will be called with options
+ * @mixes videojs
+ * @method plugin
+ */
+videojs.plugin = _plugins2['default'];
+
+/**
+ * Adding languages so that they're available to all players.
+ * ```js
+ *     videojs.addLanguage('es', { 'Hello': 'Hola' });
+ * ```
+ *
+ * @param  {String} code The language code or dictionary property
+ * @param  {Object} data The data values to be translated
+ * @return {Object} The resulting language dictionary object
+ * @mixes videojs
+ * @method addLanguage
+ */
+videojs.addLanguage = function (code, data) {
+  var _merge;
+
+  code = ('' + code).toLowerCase();
+  return (0, _merge3['default'])(videojs.options.languages, (_merge = {}, _merge[code] = data, _merge))[code];
+};
+
+/**
+ * Log debug messages.
+ *
+ * @param {...Object} messages One or more messages to log
+ */
+videojs.log = _log2['default'];
+
+/**
+ * Creates an emulated TimeRange object.
+ *
+ * @param  {Number|Array} start Start time in seconds or an array of ranges
+ * @param  {Number} end   End time in seconds
+ * @return {Object}       Fake TimeRange object
+ * @method createTimeRange
+ */
+videojs.createTimeRange = videojs.createTimeRanges = _timeRanges.createTimeRanges;
+
+/**
+ * Format seconds as a time string, H:MM:SS or M:SS
+ * Supplying a guide (in seconds) will force a number of leading zeros
+ * to cover the length of the guide
+ *
+ * @param  {Number} seconds Number of seconds to be turned into a string
+ * @param  {Number} guide   Number (in seconds) to model the string after
+ * @return {String}         Time formatted as H:MM:SS or M:SS
+ * @method formatTime
+ */
+videojs.formatTime = _formatTime2['default'];
+
+/**
+ * Resolve and parse the elements of a URL
+ *
+ * @param  {String} url The url to parse
+ * @return {Object}     An object of url details
+ * @method parseUrl
+ */
+videojs.parseUrl = Url.parseUrl;
+
+/**
+ * Returns whether the url passed is a cross domain request or not.
+ *
+ * @param {String} url The url to check
+ * @return {Boolean}   Whether it is a cross domain request or not
+ * @method isCrossOrigin
+ */
+videojs.isCrossOrigin = Url.isCrossOrigin;
+
+/**
+ * Event target class.
+ *
+ * @type {Function}
+ */
+videojs.EventTarget = _eventTarget2['default'];
+
+/**
+ * Add an event listener to element
+ * It stores the handler function in a separate cache object
+ * and adds a generic handler to the element's event,
+ * along with a unique id (guid) to the element.
+ *
+ * @param  {Element|Object}   elem Element or object to bind listeners to
+ * @param  {String|Array}   type Type of event to bind to.
+ * @param  {Function} fn   Event listener.
+ * @method on
+ */
+videojs.on = Events.on;
+
+/**
+ * Trigger a listener only once for an event
+ *
+ * @param  {Element|Object}   elem Element or object to
+ * @param  {String|Array}   type Name/type of event
+ * @param  {Function} fn Event handler function
+ * @method one
+ */
+videojs.one = Events.one;
+
+/**
+ * Removes event listeners from an element
+ *
+ * @param  {Element|Object}   elem Object to remove listeners from
+ * @param  {String|Array=}   type Type of listener to remove. Don't include to remove all events from element.
+ * @param  {Function} fn   Specific listener to remove. Don't include to remove listeners for an event type.
+ * @method off
+ */
+videojs.off = Events.off;
+
+/**
+ * Trigger an event for an element
+ *
+ * @param  {Element|Object}      elem  Element to trigger an event on
+ * @param  {Event|Object|String} event A string (the type) or an event object with a type attribute
+ * @param  {Object} [hash] data hash to pass along with the event
+ * @return {Boolean=} Returned only if default was prevented
+ * @method trigger
+ */
+videojs.trigger = Events.trigger;
+
+/**
+ * A cross-browser XMLHttpRequest wrapper. Here's a simple example:
+ *
+ *     videojs.xhr({
+ *       body: someJSONString,
+ *       uri: "/foo",
+ *       headers: {
+ *         "Content-Type": "application/json"
+ *       }
+ *     }, function (err, resp, body) {
+ *       // check resp.statusCode
+ *     });
+ *
+ * Check out the [full
+ * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)
+ * for more options.
+ *
+ * @param {Object} options settings for the request.
+ * @return {XMLHttpRequest|XDomainRequest} the request object.
+ * @see https://github.com/Raynos/xhr
+ */
+videojs.xhr = _xhr2['default'];
+
+/**
+ * TextTrack class
+ *
+ * @type {Function}
+ */
+videojs.TextTrack = _textTrack2['default'];
+
+/**
+ * export the AudioTrack class so that source handlers can create
+ * AudioTracks and then add them to the players AudioTrackList
+ *
+ * @type {Function}
+ */
+videojs.AudioTrack = _audioTrack2['default'];
+
+/**
+ * export the VideoTrack class so that source handlers can create
+ * VideoTracks and then add them to the players VideoTrackList
+ *
+ * @type {Function}
+ */
+videojs.VideoTrack = _videoTrack2['default'];
+
+/**
+ * Determines, via duck typing, whether or not a value is a DOM element.
+ *
+ * @method isEl
+ * @param  {Mixed} value
+ * @return {Boolean}
+ */
+videojs.isEl = Dom.isEl;
+
+/**
+ * Determines, via duck typing, whether or not a value is a text node.
+ *
+ * @method isTextNode
+ * @param  {Mixed} value
+ * @return {Boolean}
+ */
+videojs.isTextNode = Dom.isTextNode;
+
+/**
+ * Creates an element and applies properties.
+ *
+ * @method createEl
+ * @param  {String} [tagName='div'] Name of tag to be created.
+ * @param  {Object} [properties={}] Element properties to be applied.
+ * @param  {Object} [attributes={}] Element attributes to be applied.
+ * @return {Element}
+ */
+videojs.createEl = Dom.createEl;
+
+/**
+ * Check if an element has a CSS class
+ *
+ * @method hasClass
+ * @param {Element} element Element to check
+ * @param {String} classToCheck Classname to check
+ */
+videojs.hasClass = Dom.hasElClass;
+
+/**
+ * Add a CSS class name to an element
+ *
+ * @method addClass
+ * @param {Element} element    Element to add class name to
+ * @param {String} classToAdd Classname to add
+ */
+videojs.addClass = Dom.addElClass;
+
+/**
+ * Remove a CSS class name from an element
+ *
+ * @method removeClass
+ * @param {Element} element    Element to remove from class name
+ * @param {String} classToRemove Classname to remove
+ */
+videojs.removeClass = Dom.removeElClass;
+
+/**
+ * Adds or removes a CSS class name on an element depending on an optional
+ * condition or the presence/absence of the class name.
+ *
+ * @method toggleElClass
+ * @param  {Element} element
+ * @param  {String} classToToggle
+ * @param  {Boolean|Function} [predicate]
+ *         Can be a function that returns a Boolean. If `true`, the class
+ *         will be added; if `false`, the class will be removed. If not
+ *         given, the class will be added if not present and vice versa.
+ */
+videojs.toggleClass = Dom.toggleElClass;
+
+/**
+ * Apply attributes to an HTML element.
+ *
+ * @method setAttributes
+ * @param  {Element} el         Target element.
+ * @param  {Object=} attributes Element attributes to be applied.
+ */
+videojs.setAttributes = Dom.setElAttributes;
+
+/**
+ * Get an element's attribute values, as defined on the HTML tag
+ * Attributes are not the same as properties. They're defined on the tag
+ * or with setAttribute (which shouldn't be used with HTML)
+ * This will return true or false for boolean attributes.
+ *
+ * @method getAttributes
+ * @param  {Element} tag Element from which to get tag attributes
+ * @return {Object}
+ */
+videojs.getAttributes = Dom.getElAttributes;
+
+/**
+ * Empties the contents of an element.
+ *
+ * @method emptyEl
+ * @param  {Element} el
+ * @return {Element}
+ */
+videojs.emptyEl = Dom.emptyEl;
+
+/**
+ * Normalizes and appends content to an element.
+ *
+ * The content for an element can be passed in multiple types and
+ * combinations, whose behavior is as follows:
+ *
+ * - String
+ *   Normalized into a text node.
+ *
+ * - Element, TextNode
+ *   Passed through.
+ *
+ * - Array
+ *   A one-dimensional array of strings, elements, nodes, or functions (which
+ *   return single strings, elements, or nodes).
+ *
+ * - Function
+ *   If the sole argument, is expected to produce a string, element,
+ *   node, or array.
+ *
+ * @method appendContent
+ * @param  {Element} el
+ * @param  {String|Element|TextNode|Array|Function} content
+ * @return {Element}
+ */
+videojs.appendContent = Dom.appendContent;
+
+/**
+ * Normalizes and inserts content into an element; this is identical to
+ * `appendContent()`, except it empties the element first.
+ *
+ * The content for an element can be passed in multiple types and
+ * combinations, whose behavior is as follows:
+ *
+ * - String
+ *   Normalized into a text node.
+ *
+ * - Element, TextNode
+ *   Passed through.
+ *
+ * - Array
+ *   A one-dimensional array of strings, elements, nodes, or functions (which
+ *   return single strings, elements, or nodes).
+ *
+ * - Function
+ *   If the sole argument, is expected to produce a string, element,
+ *   node, or array.
+ *
+ * @method insertContent
+ * @param  {Element} el
+ * @param  {String|Element|TextNode|Array|Function} content
+ * @return {Element}
+ */
+videojs.insertContent = Dom.insertContent;
+
+/*
+ * Custom Universal Module Definition (UMD)
+ *
+ * Video.js will never be a non-browser lib so we can simplify UMD a bunch and
+ * still support requirejs and browserify. This also needs to be closure
+ * compiler compatible, so string keys are used.
+ */
+if (typeof define === 'function' && define.amd) {
+  define('videojs', [], function () {
+    return videojs;
+  });
+
+  // checking that module is an object too because of umdjs/umd#35
+} else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && (typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') {
+  module.exports = videojs;
+}
+
+exports['default'] = videojs;
+
+},{"./component":5,"./event-target":42,"./extend.js":43,"./player":51,"./plugins.js":52,"./setup":56,"./tech/tech.js":62,"./tracks/audio-track.js":64,"./tracks/text-track.js":72,"./tracks/video-track.js":77,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/format-time.js":83,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/url.js":90,"global/document":92,"global/window":93,"lodash-compat/object/merge":131,"xhr":147}],92:[function(_dereq_,module,exports){
+(function (global){
+var topLevel = typeof global !== 'undefined' ? global :
+    typeof window !== 'undefined' ? window : {}
+var minDoc = _dereq_('min-document');
+
+if (typeof document !== 'undefined') {
+    module.exports = document;
+} else {
+    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
+
+    if (!doccy) {
+        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
+    }
+
+    module.exports = doccy;
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"min-document":94}],93:[function(_dereq_,module,exports){
+(function (global){
+if (typeof window !== "undefined") {
+    module.exports = window;
+} else if (typeof global !== "undefined") {
+    module.exports = global;
+} else if (typeof self !== "undefined"){
+    module.exports = self;
+} else {
+    module.exports = {};
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],94:[function(_dereq_,module,exports){
+
+},{}],95:[function(_dereq_,module,exports){
+var getNative = _dereq_('../internal/getNative');
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeNow = getNative(Date, 'now');
+
+/**
+ * Gets the number of milliseconds that have elapsed since the Unix epoch
+ * (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @category Date
+ * @example
+ *
+ * _.defer(function(stamp) {
+ *   console.log(_.now() - stamp);
+ * }, _.now());
+ * // => logs the number of milliseconds it took for the deferred function to be invoked
+ */
+var now = nativeNow || function() {
+  return new Date().getTime();
+};
+
+module.exports = now;
+
+},{"../internal/getNative":111}],96:[function(_dereq_,module,exports){
+var isObject = _dereq_('../lang/isObject'),
+    now = _dereq_('../date/now');
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed invocations. Provide an options object to indicate that `func`
+ * should be invoked on the leading and/or trailing edge of the `wait` timeout.
+ * Subsequent calls to the debounced function return the result of the last
+ * `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the debounced function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=false] Specify invoking on the leading
+ *  edge of the timeout.
+ * @param {number} [options.maxWait] The maximum time `func` is allowed to be
+ *  delayed before it's invoked.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ *  edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // avoid costly calculations while the window size is in flux
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
+ * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
+ *   'leading': true,
+ *   'trailing': false
+ * }));
+ *
+ * // ensure `batchLog` is invoked once after 1 second of debounced calls
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', _.debounce(batchLog, 250, {
+ *   'maxWait': 1000
+ * }));
+ *
+ * // cancel a debounced call
+ * var todoChanges = _.debounce(batchLog, 1000);
+ * Object.observe(models.todo, todoChanges);
+ *
+ * Object.observe(models, function(changes) {
+ *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
+ *     todoChanges.cancel();
+ *   }
+ * }, ['delete']);
+ *
+ * // ...at some point `models.todo` is changed
+ * models.todo.completed = true;
+ *
+ * // ...before 1 second has passed `models.todo` is deleted
+ * // which cancels the debounced `todoChanges` call
+ * delete models.todo;
+ */
+function debounce(func, wait, options) {
+  var args,
+      maxTimeoutId,
+      result,
+      stamp,
+      thisArg,
+      timeoutId,
+      trailingCall,
+      lastCalled = 0,
+      maxWait = false,
+      trailing = true;
+
+  if (typeof func != 'function') {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  wait = wait < 0 ? 0 : (+wait || 0);
+  if (options === true) {
+    var leading = true;
+    trailing = false;
+  } else if (isObject(options)) {
+    leading = !!options.leading;
+    maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
+    trailing = 'trailing' in options ? !!options.trailing : trailing;
+  }
+
+  function cancel() {
+    if (timeoutId) {
+      clearTimeout(timeoutId);
+    }
+    if (maxTimeoutId) {
+      clearTimeout(maxTimeoutId);
+    }
+    lastCalled = 0;
+    maxTimeoutId = timeoutId = trailingCall = undefined;
+  }
+
+  function complete(isCalled, id) {
+    if (id) {
+      clearTimeout(id);
+    }
+    maxTimeoutId = timeoutId = trailingCall = undefined;
+    if (isCalled) {
+      lastCalled = now();
+      result = func.apply(thisArg, args);
+      if (!timeoutId && !maxTimeoutId) {
+        args = thisArg = undefined;
+      }
+    }
+  }
+
+  function delayed() {
+    var remaining = wait - (now() - stamp);
+    if (remaining <= 0 || remaining > wait) {
+      complete(trailingCall, maxTimeoutId);
+    } else {
+      timeoutId = setTimeout(delayed, remaining);
+    }
+  }
+
+  function maxDelayed() {
+    complete(trailing, timeoutId);
+  }
+
+  function debounced() {
+    args = arguments;
+    stamp = now();
+    thisArg = this;
+    trailingCall = trailing && (timeoutId || !leading);
+
+    if (maxWait === false) {
+      var leadingCall = leading && !timeoutId;
+    } else {
+      if (!maxTimeoutId && !leading) {
+        lastCalled = stamp;
+      }
+      var remaining = maxWait - (stamp - lastCalled),
+          isCalled = remaining <= 0 || remaining > maxWait;
+
+      if (isCalled) {
+        if (maxTimeoutId) {
+          maxTimeoutId = clearTimeout(maxTimeoutId);
+        }
+        lastCalled = stamp;
+        result = func.apply(thisArg, args);
+      }
+      else if (!maxTimeoutId) {
+        maxTimeoutId = setTimeout(maxDelayed, remaining);
+      }
+    }
+    if (isCalled && timeoutId) {
+      timeoutId = clearTimeout(timeoutId);
+    }
+    else if (!timeoutId && wait !== maxWait) {
+      timeoutId = setTimeout(delayed, wait);
+    }
+    if (leadingCall) {
+      isCalled = true;
+      result = func.apply(thisArg, args);
+    }
+    if (isCalled && !timeoutId && !maxTimeoutId) {
+      args = thisArg = undefined;
+    }
+    return result;
+  }
+  debounced.cancel = cancel;
+  return debounced;
+}
+
+module.exports = debounce;
+
+},{"../date/now":95,"../lang/isObject":124}],97:[function(_dereq_,module,exports){
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ *   return what + ' ' + _.initial(names).join(', ') +
+ *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+function restParam(func, start) {
+  if (typeof func != 'function') {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+  return function() {
+    var args = arguments,
+        index = -1,
+        length = nativeMax(args.length - start, 0),
+        rest = Array(length);
+
+    while (++index < length) {
+      rest[index] = args[start + index];
+    }
+    switch (start) {
+      case 0: return func.call(this, rest);
+      case 1: return func.call(this, args[0], rest);
+      case 2: return func.call(this, args[0], args[1], rest);
+    }
+    var otherArgs = Array(start + 1);
+    index = -1;
+    while (++index < start) {
+      otherArgs[index] = args[index];
+    }
+    otherArgs[start] = rest;
+    return func.apply(this, otherArgs);
+  };
+}
+
+module.exports = restParam;
+
+},{}],98:[function(_dereq_,module,exports){
+var debounce = _dereq_('./debounce'),
+    isObject = _dereq_('../lang/isObject');
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed invocations. Provide an options object to indicate
+ * that `func` should be invoked on the leading and/or trailing edge of the
+ * `wait` timeout. Subsequent calls to the throttled function return the
+ * result of the last `func` call.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the throttled function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=true] Specify invoking on the leading
+ *  edge of the timeout.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ *  edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // avoid excessively updating the position while scrolling
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
+ * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
+ *   'trailing': false
+ * }));
+ *
+ * // cancel a trailing throttled call
+ * jQuery(window).on('popstate', throttled.cancel);
+ */
+function throttle(func, wait, options) {
+  var leading = true,
+      trailing = true;
+
+  if (typeof func != 'function') {
+    throw new TypeError(FUNC_ERROR_TEXT);
+  }
+  if (options === false) {
+    leading = false;
+  } else if (isObject(options)) {
+    leading = 'leading' in options ? !!options.leading : leading;
+    trailing = 'trailing' in options ? !!options.trailing : trailing;
+  }
+  return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
+}
+
+module.exports = throttle;
+
+},{"../lang/isObject":124,"./debounce":96}],99:[function(_dereq_,module,exports){
+/**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+function arrayCopy(source, array) {
+  var index = -1,
+      length = source.length;
+
+  array || (array = Array(length));
+  while (++index < length) {
+    array[index] = source[index];
+  }
+  return array;
+}
+
+module.exports = arrayCopy;
+
+},{}],100:[function(_dereq_,module,exports){
+/**
+ * A specialized version of `_.forEach` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+function arrayEach(array, iteratee) {
+  var index = -1,
+      length = array.length;
+
+  while (++index < length) {
+    if (iteratee(array[index], index, array) === false) {
+      break;
+    }
+  }
+  return array;
+}
+
+module.exports = arrayEach;
+
+},{}],101:[function(_dereq_,module,exports){
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+function baseCopy(source, props, object) {
+  object || (object = {});
+
+  var index = -1,
+      length = props.length;
+
+  while (++index < length) {
+    var key = props[index];
+    object[key] = source[key];
+  }
+  return object;
+}
+
+module.exports = baseCopy;
+
+},{}],102:[function(_dereq_,module,exports){
+var createBaseFor = _dereq_('./createBaseFor');
+
+/**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+var baseFor = createBaseFor();
+
+module.exports = baseFor;
+
+},{"./createBaseFor":109}],103:[function(_dereq_,module,exports){
+var baseFor = _dereq_('./baseFor'),
+    keysIn = _dereq_('../object/keysIn');
+
+/**
+ * The base implementation of `_.forIn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+function baseForIn(object, iteratee) {
+  return baseFor(object, iteratee, keysIn);
+}
+
+module.exports = baseForIn;
+
+},{"../object/keysIn":130,"./baseFor":102}],104:[function(_dereq_,module,exports){
+var arrayEach = _dereq_('./arrayEach'),
+    baseMergeDeep = _dereq_('./baseMergeDeep'),
+    isArray = _dereq_('../lang/isArray'),
+    isArrayLike = _dereq_('./isArrayLike'),
+    isObject = _dereq_('../lang/isObject'),
+    isObjectLike = _dereq_('./isObjectLike'),
+    isTypedArray = _dereq_('../lang/isTypedArray'),
+    keys = _dereq_('../object/keys');
+
+/**
+ * The base implementation of `_.merge` without support for argument juggling,
+ * multiple sources, and `this` binding `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {Object} Returns `object`.
+ */
+function baseMerge(object, source, customizer, stackA, stackB) {
+  if (!isObject(object)) {
+    return object;
+  }
+  var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
+      props = isSrcArr ? undefined : keys(source);
+
+  arrayEach(props || source, function(srcValue, key) {
+    if (props) {
+      key = srcValue;
+      srcValue = source[key];
+    }
+    if (isObjectLike(srcValue)) {
+      stackA || (stackA = []);
+      stackB || (stackB = []);
+      baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
+    }
+    else {
+      var value = object[key],
+          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+          isCommon = result === undefined;
+
+      if (isCommon) {
+        result = srcValue;
+      }
+      if ((result !== undefined || (isSrcArr && !(key in object))) &&
+          (isCommon || (result === result ? (result !== value) : (value === value)))) {
+        object[key] = result;
+      }
+    }
+  });
+  return object;
+}
+
+module.exports = baseMerge;
+
+},{"../lang/isArray":121,"../lang/isObject":124,"../lang/isTypedArray":127,"../object/keys":129,"./arrayEach":100,"./baseMergeDeep":105,"./isArrayLike":112,"./isObjectLike":117}],105:[function(_dereq_,module,exports){
+var arrayCopy = _dereq_('./arrayCopy'),
+    isArguments = _dereq_('../lang/isArguments'),
+    isArray = _dereq_('../lang/isArray'),
+    isArrayLike = _dereq_('./isArrayLike'),
+    isPlainObject = _dereq_('../lang/isPlainObject'),
+    isTypedArray = _dereq_('../lang/isTypedArray'),
+    toPlainObject = _dereq_('../lang/toPlainObject');
+
+/**
+ * A specialized version of `baseMerge` for arrays and objects which performs
+ * deep merges and tracks traversed objects enabling objects with circular
+ * references to be merged.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {string} key The key of the value to merge.
+ * @param {Function} mergeFunc The function to merge values.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
+  var length = stackA.length,
+      srcValue = source[key];
+
+  while (length--) {
+    if (stackA[length] == srcValue) {
+      object[key] = stackB[length];
+      return;
+    }
+  }
+  var value = object[key],
+      result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+      isCommon = result === undefined;
+
+  if (isCommon) {
+    result = srcValue;
+    if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
+      result = isArray(value)
+        ? value
+        : (isArrayLike(value) ? arrayCopy(value) : []);
+    }
+    else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+      result = isArguments(value)
+        ? toPlainObject(value)
+        : (isPlainObject(value) ? value : {});
+    }
+    else {
+      isCommon = false;
+    }
+  }
+  // Add the source value to the stack of traversed objects and associate
+  // it with its merged value.
+  stackA.push(srcValue);
+  stackB.push(result);
+
+  if (isCommon) {
+    // Recursively merge objects and arrays (susceptible to call stack limits).
+    object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
+  } else if (result === result ? (result !== value) : (value === value)) {
+    object[key] = result;
+  }
+}
+
+module.exports = baseMergeDeep;
+
+},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isPlainObject":125,"../lang/isTypedArray":127,"../lang/toPlainObject":128,"./arrayCopy":99,"./isArrayLike":112}],106:[function(_dereq_,module,exports){
+var toObject = _dereq_('./toObject');
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+function baseProperty(key) {
+  return function(object) {
+    return object == null ? undefined : toObject(object)[key];
+  };
+}
+
+module.exports = baseProperty;
+
+},{"./toObject":119}],107:[function(_dereq_,module,exports){
+var identity = _dereq_('../utility/identity');
+
+/**
+ * A specialized version of `baseCallback` which only supports `this` binding
+ * and specifying the number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+function bindCallback(func, thisArg, argCount) {
+  if (typeof func != 'function') {
+    return identity;
+  }
+  if (thisArg === undefined) {
+    return func;
+  }
+  switch (argCount) {
+    case 1: return function(value) {
+      return func.call(thisArg, value);
+    };
+    case 3: return function(value, index, collection) {
+      return func.call(thisArg, value, index, collection);
+    };
+    case 4: return function(accumulator, value, index, collection) {
+      return func.call(thisArg, accumulator, value, index, collection);
+    };
+    case 5: return function(value, other, key, object, source) {
+      return func.call(thisArg, value, other, key, object, source);
+    };
+  }
+  return function() {
+    return func.apply(thisArg, arguments);
+  };
+}
+
+module.exports = bindCallback;
+
+},{"../utility/identity":133}],108:[function(_dereq_,module,exports){
+var bindCallback = _dereq_('./bindCallback'),
+    isIterateeCall = _dereq_('./isIterateeCall'),
+    restParam = _dereq_('../function/restParam');
+
+/**
+ * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+function createAssigner(assigner) {
+  return restParam(function(object, sources) {
+    var index = -1,
+        length = object == null ? 0 : sources.length,
+        customizer = length > 2 ? sources[length - 2] : undefined,
+        guard = length > 2 ? sources[2] : undefined,
+        thisArg = length > 1 ? sources[length - 1] : undefined;
+
+    if (typeof customizer == 'function') {
+      customizer = bindCallback(customizer, thisArg, 5);
+      length -= 2;
+    } else {
+      customizer = typeof thisArg == 'function' ? thisArg : undefined;
+      length -= (customizer ? 1 : 0);
+    }
+    if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+      customizer = length < 3 ? undefined : customizer;
+      length = 1;
+    }
+    while (++index < length) {
+      var source = sources[index];
+      if (source) {
+        assigner(object, source, customizer);
+      }
+    }
+    return object;
+  });
+}
+
+module.exports = createAssigner;
+
+},{"../function/restParam":97,"./bindCallback":107,"./isIterateeCall":115}],109:[function(_dereq_,module,exports){
+var toObject = _dereq_('./toObject');
+
+/**
+ * Creates a base function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+function createBaseFor(fromRight) {
+  return function(object, iteratee, keysFunc) {
+    var iterable = toObject(object),
+        props = keysFunc(object),
+        length = props.length,
+        index = fromRight ? length : -1;
+
+    while ((fromRight ? index-- : ++index < length)) {
+      var key = props[index];
+      if (iteratee(iterable[key], key, iterable) === false) {
+        break;
+      }
+    }
+    return object;
+  };
+}
+
+module.exports = createBaseFor;
+
+},{"./toObject":119}],110:[function(_dereq_,module,exports){
+var baseProperty = _dereq_('./baseProperty');
+
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+var getLength = baseProperty('length');
+
+module.exports = getLength;
+
+},{"./baseProperty":106}],111:[function(_dereq_,module,exports){
+var isNative = _dereq_('../lang/isNative');
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+  var value = object == null ? undefined : object[key];
+  return isNative(value) ? value : undefined;
+}
+
+module.exports = getNative;
+
+},{"../lang/isNative":123}],112:[function(_dereq_,module,exports){
+var getLength = _dereq_('./getLength'),
+    isLength = _dereq_('./isLength');
+
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+function isArrayLike(value) {
+  return value != null && isLength(getLength(value));
+}
+
+module.exports = isArrayLike;
+
+},{"./getLength":110,"./isLength":116}],113:[function(_dereq_,module,exports){
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+var isHostObject = (function() {
+  try {
+    Object({ 'toString': 0 } + '');
+  } catch(e) {
+    return function() { return false; };
+  }
+  return function(value) {
+    // IE < 9 presents many host objects as `Object` objects that can coerce
+    // to strings despite having improperly defined `toString` methods.
+    return typeof value.toString != 'function' && typeof (value + '') == 'string';
+  };
+}());
+
+module.exports = isHostObject;
+
+},{}],114:[function(_dereq_,module,exports){
+/** Used to detect unsigned integer values. */
+var reIsUint = /^\d+$/;
+
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+  length = length == null ? MAX_SAFE_INTEGER : length;
+  return value > -1 && value % 1 == 0 && value < length;
+}
+
+module.exports = isIndex;
+
+},{}],115:[function(_dereq_,module,exports){
+var isArrayLike = _dereq_('./isArrayLike'),
+    isIndex = _dereq_('./isIndex'),
+    isObject = _dereq_('../lang/isObject');
+
+/**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */
+function isIterateeCall(value, index, object) {
+  if (!isObject(object)) {
+    return false;
+  }
+  var type = typeof index;
+  if (type == 'number'
+      ? (isArrayLike(object) && isIndex(index, object.length))
+      : (type == 'string' && index in object)) {
+    var other = object[index];
+    return value === value ? (value === other) : (other !== other);
+  }
+  return false;
+}
+
+module.exports = isIterateeCall;
+
+},{"../lang/isObject":124,"./isArrayLike":112,"./isIndex":114}],116:[function(_dereq_,module,exports){
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+module.exports = isLength;
+
+},{}],117:[function(_dereq_,module,exports){
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+  return !!value && typeof value == 'object';
+}
+
+module.exports = isObjectLike;
+
+},{}],118:[function(_dereq_,module,exports){
+var isArguments = _dereq_('../lang/isArguments'),
+    isArray = _dereq_('../lang/isArray'),
+    isIndex = _dereq_('./isIndex'),
+    isLength = _dereq_('./isLength'),
+    isString = _dereq_('../lang/isString'),
+    keysIn = _dereq_('../object/keysIn');
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function shimKeys(object) {
+  var props = keysIn(object),
+      propsLength = props.length,
+      length = propsLength && object.length;
+
+  var allowIndexes = !!length && isLength(length) &&
+    (isArray(object) || isArguments(object) || isString(object));
+
+  var index = -1,
+      result = [];
+
+  while (++index < propsLength) {
+    var key = props[index];
+    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+      result.push(key);
+    }
+  }
+  return result;
+}
+
+module.exports = shimKeys;
+
+},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isString":126,"../object/keysIn":130,"./isIndex":114,"./isLength":116}],119:[function(_dereq_,module,exports){
+var isObject = _dereq_('../lang/isObject'),
+    isString = _dereq_('../lang/isString'),
+    support = _dereq_('../support');
+
+/**
+ * Converts `value` to an object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Object} Returns the object.
+ */
+function toObject(value) {
+  if (support.unindexedChars && isString(value)) {
+    var index = -1,
+        length = value.length,
+        result = Object(value);
+
+    while (++index < length) {
+      result[index] = value.charAt(index);
+    }
+    return result;
+  }
+  return isObject(value) ? value : Object(value);
+}
+
+module.exports = toObject;
+
+},{"../lang/isObject":124,"../lang/isString":126,"../support":132}],120:[function(_dereq_,module,exports){
+var isArrayLike = _dereq_('../internal/isArrayLike'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/** Native method references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/**
+ * Checks if `value` is classified as an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+  return isObjectLike(value) && isArrayLike(value) &&
+    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+}
+
+module.exports = isArguments;
+
+},{"../internal/isArrayLike":112,"../internal/isObjectLike":117}],121:[function(_dereq_,module,exports){
+var getNative = _dereq_('../internal/getNative'),
+    isLength = _dereq_('../internal/isLength'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** `Object#toString` result references. */
+var arrayTag = '[object Array]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsArray = getNative(Array, 'isArray');
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+var isArray = nativeIsArray || function(value) {
+  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+};
+
+module.exports = isArray;
+
+},{"../internal/getNative":111,"../internal/isLength":116,"../internal/isObjectLike":117}],122:[function(_dereq_,module,exports){
+var isObject = _dereq_('./isObject');
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+  // The use of `Object#toString` avoids issues with the `typeof` operator
+  // in older versions of Chrome and Safari which return 'function' for regexes
+  // and Safari 8 which returns 'object' for typed array constructors.
+  return isObject(value) && objToString.call(value) == funcTag;
+}
+
+module.exports = isFunction;
+
+},{"./isObject":124}],123:[function(_dereq_,module,exports){
+var isFunction = _dereq_('./isFunction'),
+    isHostObject = _dereq_('../internal/isHostObject'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var fnToString = Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+  fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+  if (value == null) {
+    return false;
+  }
+  if (isFunction(value)) {
+    return reIsNative.test(fnToString.call(value));
+  }
+  return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
+}
+
+module.exports = isNative;
+
+},{"../internal/isHostObject":113,"../internal/isObjectLike":117,"./isFunction":122}],124:[function(_dereq_,module,exports){
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+  // Avoid a V8 JIT bug in Chrome 19-20.
+  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+  var type = typeof value;
+  return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = isObject;
+
+},{}],125:[function(_dereq_,module,exports){
+var baseForIn = _dereq_('../internal/baseForIn'),
+    isArguments = _dereq_('./isArguments'),
+    isHostObject = _dereq_('../internal/isHostObject'),
+    isObjectLike = _dereq_('../internal/isObjectLike'),
+    support = _dereq_('../support');
+
+/** `Object#toString` result references. */
+var objectTag = '[object Object]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * **Note:** This method assumes objects created by the `Object` constructor
+ * have no inherited enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+function isPlainObject(value) {
+  var Ctor;
+
+  // Exit early for non `Object` objects.
+  if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||
+      (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
+    return false;
+  }
+  // IE < 9 iterates inherited properties before own properties. If the first
+  // iterated property is an object's own property then there are no inherited
+  // enumerable properties.
+  var result;
+  if (support.ownLast) {
+    baseForIn(value, function(subValue, key, object) {
+      result = hasOwnProperty.call(object, key);
+      return false;
+    });
+    return result !== false;
+  }
+  // In most environments an object's own properties are iterated before
+  // its inherited properties. If the last iterated property is an object's
+  // own property then there are no inherited enumerable properties.
+  baseForIn(value, function(subValue, key) {
+    result = key;
+  });
+  return result === undefined || hasOwnProperty.call(value, result);
+}
+
+module.exports = isPlainObject;
+
+},{"../internal/baseForIn":103,"../internal/isHostObject":113,"../internal/isObjectLike":117,"../support":132,"./isArguments":120}],126:[function(_dereq_,module,exports){
+var isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** `Object#toString` result references. */
+var stringTag = '[object String]';
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+function isString(value) {
+  return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
+}
+
+module.exports = isString;
+
+},{"../internal/isObjectLike":117}],127:[function(_dereq_,module,exports){
+var isLength = _dereq_('../internal/isLength'),
+    isObjectLike = _dereq_('../internal/isObjectLike');
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+    arrayTag = '[object Array]',
+    boolTag = '[object Boolean]',
+    dateTag = '[object Date]',
+    errorTag = '[object Error]',
+    funcTag = '[object Function]',
+    mapTag = '[object Map]',
+    numberTag = '[object Number]',
+    objectTag = '[object Object]',
+    regexpTag = '[object RegExp]',
+    setTag = '[object Set]',
+    stringTag = '[object String]',
+    weakMapTag = '[object WeakMap]';
+
+var arrayBufferTag = '[object ArrayBuffer]',
+    float32Tag = '[object Float32Array]',
+    float64Tag = '[object Float64Array]',
+    int8Tag = '[object Int8Array]',
+    int16Tag = '[object Int16Array]',
+    int32Tag = '[object Int32Array]',
+    uint8Tag = '[object Uint8Array]',
+    uint8ClampedTag = '[object Uint8ClampedArray]',
+    uint16Tag = '[object Uint16Array]',
+    uint32Tag = '[object Uint32Array]';
+
+/** Used to identify `toStringTag` values of typed arrays. */
+var typedArrayTags = {};
+typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+typedArrayTags[uint32Tag] = true;
+typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+typedArrayTags[dateTag] = typedArrayTags[errorTag] =
+typedArrayTags[funcTag] = typedArrayTags[mapTag] =
+typedArrayTags[numberTag] = typedArrayTags[objectTag] =
+typedArrayTags[regexpTag] = typedArrayTags[setTag] =
+typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+function isTypedArray(value) {
+  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
+}
+
+module.exports = isTypedArray;
+
+},{"../internal/isLength":116,"../internal/isObjectLike":117}],128:[function(_dereq_,module,exports){
+var baseCopy = _dereq_('../internal/baseCopy'),
+    keysIn = _dereq_('../object/keysIn');
+
+/**
+ * Converts `value` to a plain object flattening inherited enumerable
+ * properties of `value` to own properties of the plain object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Object} Returns the converted plain object.
+ * @example
+ *
+ * function Foo() {
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.assign({ 'a': 1 }, new Foo);
+ * // => { 'a': 1, 'b': 2 }
+ *
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
+ */
+function toPlainObject(value) {
+  return baseCopy(value, keysIn(value));
+}
+
+module.exports = toPlainObject;
+
+},{"../internal/baseCopy":101,"../object/keysIn":130}],129:[function(_dereq_,module,exports){
+var getNative = _dereq_('../internal/getNative'),
+    isArrayLike = _dereq_('../internal/isArrayLike'),
+    isObject = _dereq_('../lang/isObject'),
+    shimKeys = _dereq_('../internal/shimKeys'),
+    support = _dereq_('../support');
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeKeys = getNative(Object, 'keys');
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+var keys = !nativeKeys ? shimKeys : function(object) {
+  var Ctor = object == null ? undefined : object.constructor;
+  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+      (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {
+    return shimKeys(object);
+  }
+  return isObject(object) ? nativeKeys(object) : [];
+};
+
+module.exports = keys;
+
+},{"../internal/getNative":111,"../internal/isArrayLike":112,"../internal/shimKeys":118,"../lang/isObject":124,"../support":132}],130:[function(_dereq_,module,exports){
+var arrayEach = _dereq_('../internal/arrayEach'),
+    isArguments = _dereq_('../lang/isArguments'),
+    isArray = _dereq_('../lang/isArray'),
+    isFunction = _dereq_('../lang/isFunction'),
+    isIndex = _dereq_('../internal/isIndex'),
+    isLength = _dereq_('../internal/isLength'),
+    isObject = _dereq_('../lang/isObject'),
+    isString = _dereq_('../lang/isString'),
+    support = _dereq_('../support');
+
+/** `Object#toString` result references. */
+var arrayTag = '[object Array]',
+    boolTag = '[object Boolean]',
+    dateTag = '[object Date]',
+    errorTag = '[object Error]',
+    funcTag = '[object Function]',
+    numberTag = '[object Number]',
+    objectTag = '[object Object]',
+    regexpTag = '[object RegExp]',
+    stringTag = '[object String]';
+
+/** Used to fix the JScript `[[DontEnum]]` bug. */
+var shadowProps = [
+  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
+  'toLocaleString', 'toString', 'valueOf'
+];
+
+/** Used for native method references. */
+var errorProto = Error.prototype,
+    objectProto = Object.prototype,
+    stringProto = String.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/** Used to avoid iterating over non-enumerable properties in IE < 9. */
+var nonEnumProps = {};
+nonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };
+nonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };
+nonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };
+nonEnumProps[objectTag] = { 'constructor': true };
+
+arrayEach(shadowProps, function(key) {
+  for (var tag in nonEnumProps) {
+    if (hasOwnProperty.call(nonEnumProps, tag)) {
+      var props = nonEnumProps[tag];
+      props[key] = hasOwnProperty.call(props, key);
+    }
+  }
+});
+
+/**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ *   this.a = 1;
+ *   this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+function keysIn(object) {
+  if (object == null) {
+    return [];
+  }
+  if (!isObject(object)) {
+    object = Object(object);
+  }
+  var length = object.length;
+
+  length = (length && isLength(length) &&
+    (isArray(object) || isArguments(object) || isString(object)) && length) || 0;
+
+  var Ctor = object.constructor,
+      index = -1,
+      proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,
+      isProto = proto === object,
+      result = Array(length),
+      skipIndexes = length > 0,
+      skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),
+      skipProto = support.enumPrototypes && isFunction(object);
+
+  while (++index < length) {
+    result[index] = (index + '');
+  }
+  // lodash skips the `constructor` property when it infers it's iterating
+  // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`
+  // attribute of an existing property and the `constructor` property of a
+  // prototype defaults to non-enumerable.
+  for (var key in object) {
+    if (!(skipProto && key == 'prototype') &&
+        !(skipErrorProps && (key == 'message' || key == 'name')) &&
+        !(skipIndexes && isIndex(key, length)) &&
+        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+      result.push(key);
+    }
+  }
+  if (support.nonEnumShadows && object !== objectProto) {
+    var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),
+        nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];
+
+    if (tag == objectTag) {
+      proto = objectProto;
+    }
+    length = shadowProps.length;
+    while (length--) {
+      key = shadowProps[length];
+      var nonEnum = nonEnums[key];
+      if (!(isProto && nonEnum) &&
+          (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {
+        result.push(key);
+      }
+    }
+  }
+  return result;
+}
+
+module.exports = keysIn;
+
+},{"../internal/arrayEach":100,"../internal/isIndex":114,"../internal/isLength":116,"../lang/isArguments":120,"../lang/isArray":121,"../lang/isFunction":122,"../lang/isObject":124,"../lang/isString":126,"../support":132}],131:[function(_dereq_,module,exports){
+var baseMerge = _dereq_('../internal/baseMerge'),
+    createAssigner = _dereq_('../internal/createAssigner');
+
+/**
+ * Recursively merges own enumerable properties of the source object(s), that
+ * don't resolve to `undefined` into the destination object. Subsequent sources
+ * overwrite property assignments of previous sources. If `customizer` is
+ * provided it's invoked to produce the merged values of the destination and
+ * source properties. If `customizer` returns `undefined` merging is handled
+ * by the method instead. The `customizer` is bound to `thisArg` and invoked
+ * with five arguments: (objectValue, sourceValue, key, object, source).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var users = {
+ *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
+ * };
+ *
+ * var ages = {
+ *   'data': [{ 'age': 36 }, { 'age': 40 }]
+ * };
+ *
+ * _.merge(users, ages);
+ * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
+ *
+ * // using a customizer callback
+ * var object = {
+ *   'fruits': ['apple'],
+ *   'vegetables': ['beet']
+ * };
+ *
+ * var other = {
+ *   'fruits': ['banana'],
+ *   'vegetables': ['carrot']
+ * };
+ *
+ * _.merge(object, other, function(a, b) {
+ *   if (_.isArray(a)) {
+ *     return a.concat(b);
+ *   }
+ * });
+ * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
+ */
+var merge = createAssigner(baseMerge);
+
+module.exports = merge;
+
+},{"../internal/baseMerge":104,"../internal/createAssigner":108}],132:[function(_dereq_,module,exports){
+/** Used for native method references. */
+var arrayProto = Array.prototype,
+    errorProto = Error.prototype,
+    objectProto = Object.prototype;
+
+/** Native method references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable,
+    splice = arrayProto.splice;
+
+/**
+ * An object environment feature flags.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+var support = {};
+
+(function(x) {
+  var Ctor = function() { this.x = x; },
+      object = { '0': x, 'length': x },
+      props = [];
+
+  Ctor.prototype = { 'valueOf': x, 'y': x };
+  for (var key in new Ctor) { props.push(key); }
+
+  /**
+   * Detect if `name` or `message` properties of `Error.prototype` are
+   * enumerable by default (IE < 9, Safari < 5.1).
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||
+    propertyIsEnumerable.call(errorProto, 'name');
+
+  /**
+   * Detect if `prototype` properties are enumerable by default.
+   *
+   * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1
+   * (if the prototype or a property on the prototype has been set)
+   * incorrectly set the `[[Enumerable]]` value of a function's `prototype`
+   * property to `true`.
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');
+
+  /**
+   * Detect if properties shadowing those on `Object.prototype` are non-enumerable.
+   *
+   * In IE < 9 an object's own properties, shadowing non-enumerable ones,
+   * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.nonEnumShadows = !/valueOf/.test(props);
+
+  /**
+   * Detect if own properties are iterated after inherited properties (IE < 9).
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.ownLast = props[0] != 'x';
+
+  /**
+   * Detect if `Array#shift` and `Array#splice` augment array-like objects
+   * correctly.
+   *
+   * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array
+   * `shift()` and `splice()` functions that fail to remove the last element,
+   * `value[0]`, of array-like objects even though the "length" property is
+   * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,
+   * while `splice()` is buggy regardless of mode in IE < 9.
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.spliceObjects = (splice.call(object, 0, 1), !object[0]);
+
+  /**
+   * Detect lack of support for accessing string characters by index.
+   *
+   * IE < 8 can't access characters by index. IE 8 can only access characters
+   * by index on string literals, not string objects.
+   *
+   * @memberOf _.support
+   * @type boolean
+   */
+  support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';
+}(1, 0));
+
+module.exports = support;
+
+},{}],133:[function(_dereq_,module,exports){
+/**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */
+function identity(value) {
+  return value;
+}
+
+module.exports = identity;
+
+},{}],134:[function(_dereq_,module,exports){
+'use strict';
+
+var keys = _dereq_('object-keys');
+
+module.exports = function hasSymbols() {
+	if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
+	if (typeof Symbol.iterator === 'symbol') { return true; }
+
+	var obj = {};
+	var sym = Symbol('test');
+	if (typeof sym === 'string') { return false; }
+
+	// temp disabled per https://github.com/ljharb/object.assign/issues/17
+	// if (sym instanceof Symbol) { return false; }
+	// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
+	// if (!(Object(sym) instanceof Symbol)) { return false; }
+
+	var symVal = 42;
+	obj[sym] = symVal;
+	for (sym in obj) { return false; }
+	if (keys(obj).length !== 0) { return false; }
+	if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
+
+	if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
+
+	var syms = Object.getOwnPropertySymbols(obj);
+	if (syms.length !== 1 || syms[0] !== sym) { return false; }
+
+	if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
+
+	if (typeof Object.getOwnPropertyDescriptor === 'function') {
+		var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
+		if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
+	}
+
+	return true;
+};
+
+},{"object-keys":141}],135:[function(_dereq_,module,exports){
+'use strict';
+
+// modified from https://github.com/es-shims/es6-shim
+var keys = _dereq_('object-keys');
+var bind = _dereq_('function-bind');
+var canBeObject = function (obj) {
+	return typeof obj !== 'undefined' && obj !== null;
+};
+var hasSymbols = _dereq_('./hasSymbols')();
+var toObject = Object;
+var push = bind.call(Function.call, Array.prototype.push);
+var propIsEnumerable = bind.call(Function.call, Object.prototype.propertyIsEnumerable);
+
+module.exports = function assign(target, source1) {
+	if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
+	var objTarget = toObject(target);
+	var s, source, i, props, syms, value, key;
+	for (s = 1; s < arguments.length; ++s) {
+		source = toObject(arguments[s]);
+		props = keys(source);
+		if (hasSymbols && Object.getOwnPropertySymbols) {
+			syms = Object.getOwnPropertySymbols(source);
+			for (i = 0; i < syms.length; ++i) {
+				key = syms[i];
+				if (propIsEnumerable(source, key)) {
+					push(props, key);
+				}
+			}
+		}
+		for (i = 0; i < props.length; ++i) {
+			key = props[i];
+			value = source[key];
+			if (propIsEnumerable(source, key)) {
+				objTarget[key] = value;
+			}
+		}
+	}
+	return objTarget;
+};
+
+},{"./hasSymbols":134,"function-bind":140,"object-keys":141}],136:[function(_dereq_,module,exports){
+'use strict';
+
+var defineProperties = _dereq_('define-properties');
+
+var implementation = _dereq_('./implementation');
+var getPolyfill = _dereq_('./polyfill');
+var shim = _dereq_('./shim');
+
+defineProperties(implementation, {
+	implementation: implementation,
+	getPolyfill: getPolyfill,
+	shim: shim
+});
+
+module.exports = implementation;
+
+},{"./implementation":135,"./polyfill":143,"./shim":144,"define-properties":137}],137:[function(_dereq_,module,exports){
+'use strict';
+
+var keys = _dereq_('object-keys');
+var foreach = _dereq_('foreach');
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';
+
+var toStr = Object.prototype.toString;
+
+var isFunction = function (fn) {
+	return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
+};
+
+var arePropertyDescriptorsSupported = function () {
+	var obj = {};
+	try {
+		Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+        /* eslint-disable no-unused-vars, no-restricted-syntax */
+        for (var _ in obj) { return false; }
+        /* eslint-enable no-unused-vars, no-restricted-syntax */
+		return obj.x === obj;
+	} catch (e) { /* this is IE 8. */
+		return false;
+	}
+};
+var supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();
+
+var defineProperty = function (object, name, value, predicate) {
+	if (name in object && (!isFunction(predicate) || !predicate())) {
+		return;
+	}
+	if (supportsDescriptors) {
+		Object.defineProperty(object, name, {
+			configurable: true,
+			enumerable: false,
+			value: value,
+			writable: true
+		});
+	} else {
+		object[name] = value;
+	}
+};
+
+var defineProperties = function (object, map) {
+	var predicates = arguments.length > 2 ? arguments[2] : {};
+	var props = keys(map);
+	if (hasSymbols) {
+		props = props.concat(Object.getOwnPropertySymbols(map));
+	}
+	foreach(props, function (name) {
+		defineProperty(object, name, map[name], predicates[name]);
+	});
+};
+
+defineProperties.supportsDescriptors = !!supportsDescriptors;
+
+module.exports = defineProperties;
+
+},{"foreach":138,"object-keys":141}],138:[function(_dereq_,module,exports){
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toString = Object.prototype.toString;
+
+module.exports = function forEach (obj, fn, ctx) {
+    if (toString.call(fn) !== '[object Function]') {
+        throw new TypeError('iterator must be a function');
+    }
+    var l = obj.length;
+    if (l === +l) {
+        for (var i = 0; i < l; i++) {
+            fn.call(ctx, obj[i], i, obj);
+        }
+    } else {
+        for (var k in obj) {
+            if (hasOwn.call(obj, k)) {
+                fn.call(ctx, obj[k], k, obj);
+            }
+        }
+    }
+};
+
+
+},{}],139:[function(_dereq_,module,exports){
+var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
+var slice = Array.prototype.slice;
+var toStr = Object.prototype.toString;
+var funcType = '[object Function]';
+
+module.exports = function bind(that) {
+    var target = this;
+    if (typeof target !== 'function' || toStr.call(target) !== funcType) {
+        throw new TypeError(ERROR_MESSAGE + target);
+    }
+    var args = slice.call(arguments, 1);
+
+    var bound;
+    var binder = function () {
+        if (this instanceof bound) {
+            var result = target.apply(
+                this,
+                args.concat(slice.call(arguments))
+            );
+            if (Object(result) === result) {
+                return result;
+            }
+            return this;
+        } else {
+            return target.apply(
+                that,
+                args.concat(slice.call(arguments))
+            );
+        }
+    };
+
+    var boundLength = Math.max(0, target.length - args.length);
+    var boundArgs = [];
+    for (var i = 0; i < boundLength; i++) {
+        boundArgs.push('$' + i);
+    }
+
+    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
+
+    if (target.prototype) {
+        var Empty = function Empty() {};
+        Empty.prototype = target.prototype;
+        bound.prototype = new Empty();
+        Empty.prototype = null;
+    }
+
+    return bound;
+};
+
+},{}],140:[function(_dereq_,module,exports){
+var implementation = _dereq_('./implementation');
+
+module.exports = Function.prototype.bind || implementation;
+
+},{"./implementation":139}],141:[function(_dereq_,module,exports){
+'use strict';
+
+// modified from https://github.com/es-shims/es5-shim
+var has = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+var slice = Array.prototype.slice;
+var isArgs = _dereq_('./isArguments');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
+var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
+var dontEnums = [
+	'toString',
+	'toLocaleString',
+	'valueOf',
+	'hasOwnProperty',
+	'isPrototypeOf',
+	'propertyIsEnumerable',
+	'constructor'
+];
+var equalsConstructorPrototype = function (o) {
+	var ctor = o.constructor;
+	return ctor && ctor.prototype === o;
+};
+var excludedKeys = {
+	$console: true,
+	$external: true,
+	$frame: true,
+	$frameElement: true,
+	$frames: true,
+	$innerHeight: true,
+	$innerWidth: true,
+	$outerHeight: true,
+	$outerWidth: true,
+	$pageXOffset: true,
+	$pageYOffset: true,
+	$parent: true,
+	$scrollLeft: true,
+	$scrollTop: true,
+	$scrollX: true,
+	$scrollY: true,
+	$self: true,
+	$webkitIndexedDB: true,
+	$webkitStorageInfo: true,
+	$window: true
+};
+var hasAutomationEqualityBug = (function () {
+	/* global window */
+	if (typeof window === 'undefined') { return false; }
+	for (var k in window) {
+		try {
+			if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
+				try {
+					equalsConstructorPrototype(window[k]);
+				} catch (e) {
+					return true;
+				}
+			}
+		} catch (e) {
+			return true;
+		}
+	}
+	return false;
+}());
+var equalsConstructorPrototypeIfNotBuggy = function (o) {
+	/* global window */
+	if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
+		return equalsConstructorPrototype(o);
+	}
+	try {
+		return equalsConstructorPrototype(o);
+	} catch (e) {
+		return false;
+	}
+};
+
+var keysShim = function keys(object) {
+	var isObject = object !== null && typeof object === 'object';
+	var isFunction = toStr.call(object) === '[object Function]';
+	var isArguments = isArgs(object);
+	var isString = isObject && toStr.call(object) === '[object String]';
+	var theKeys = [];
+
+	if (!isObject && !isFunction && !isArguments) {
+		throw new TypeError('Object.keys called on a non-object');
+	}
+
+	var skipProto = hasProtoEnumBug && isFunction;
+	if (isString && object.length > 0 && !has.call(object, 0)) {
+		for (var i = 0; i < object.length; ++i) {
+			theKeys.push(String(i));
+		}
+	}
+
+	if (isArguments && object.length > 0) {
+		for (var j = 0; j < object.length; ++j) {
+			theKeys.push(String(j));
+		}
+	} else {
+		for (var name in object) {
+			if (!(skipProto && name === 'prototype') && has.call(object, name)) {
+				theKeys.push(String(name));
+			}
+		}
+	}
+
+	if (hasDontEnumBug) {
+		var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+
+		for (var k = 0; k < dontEnums.length; ++k) {
+			if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
+				theKeys.push(dontEnums[k]);
+			}
+		}
+	}
+	return theKeys;
+};
+
+keysShim.shim = function shimObjectKeys() {
+	if (Object.keys) {
+		var keysWorksWithArguments = (function () {
+			// Safari 5.0 bug
+			return (Object.keys(arguments) || '').length === 2;
+		}(1, 2));
+		if (!keysWorksWithArguments) {
+			var originalKeys = Object.keys;
+			Object.keys = function keys(object) {
+				if (isArgs(object)) {
+					return originalKeys(slice.call(object));
+				} else {
+					return originalKeys(object);
+				}
+			};
+		}
+	} else {
+		Object.keys = keysShim;
+	}
+	return Object.keys || keysShim;
+};
+
+module.exports = keysShim;
+
+},{"./isArguments":142}],142:[function(_dereq_,module,exports){
+'use strict';
+
+var toStr = Object.prototype.toString;
+
+module.exports = function isArguments(value) {
+	var str = toStr.call(value);
+	var isArgs = str === '[object Arguments]';
+	if (!isArgs) {
+		isArgs = str !== '[object Array]' &&
+			value !== null &&
+			typeof value === 'object' &&
+			typeof value.length === 'number' &&
+			value.length >= 0 &&
+			toStr.call(value.callee) === '[object Function]';
+	}
+	return isArgs;
+};
+
+},{}],143:[function(_dereq_,module,exports){
+'use strict';
+
+var implementation = _dereq_('./implementation');
+
+var lacksProperEnumerationOrder = function () {
+	if (!Object.assign) {
+		return false;
+	}
+	// v8, specifically in node 4.x, has a bug with incorrect property enumeration order
+	// note: this does not detect the bug unless there's 20 characters
+	var str = 'abcdefghijklmnopqrst';
+	var letters = str.split('');
+	var map = {};
+	for (var i = 0; i < letters.length; ++i) {
+		map[letters[i]] = letters[i];
+	}
+	var obj = Object.assign({}, map);
+	var actual = '';
+	for (var k in obj) {
+		actual += k;
+	}
+	return str !== actual;
+};
+
+var assignHasPendingExceptions = function () {
+	if (!Object.assign || !Object.preventExtensions) {
+		return false;
+	}
+	// Firefox 37 still has "pending exception" logic in its Object.assign implementation,
+	// which is 72% slower than our shim, and Firefox 40's native implementation.
+	var thrower = Object.preventExtensions({ 1: 2 });
+	try {
+		Object.assign(thrower, 'xy');
+	} catch (e) {
+		return thrower[1] === 'y';
+	}
+};
+
+module.exports = function getPolyfill() {
+	if (!Object.assign) {
+		return implementation;
+	}
+	if (lacksProperEnumerationOrder()) {
+		return implementation;
+	}
+	if (assignHasPendingExceptions()) {
+		return implementation;
+	}
+	return Object.assign;
+};
+
+},{"./implementation":135}],144:[function(_dereq_,module,exports){
+'use strict';
+
+var define = _dereq_('define-properties');
+var getPolyfill = _dereq_('./polyfill');
+
+module.exports = function shimAssign() {
+	var polyfill = getPolyfill();
+	define(
+		Object,
+		{ assign: polyfill },
+		{ assign: function () { return Object.assign !== polyfill; } }
+	);
+	return polyfill;
+};
+
+},{"./polyfill":143,"define-properties":137}],145:[function(_dereq_,module,exports){
+module.exports = SafeParseTuple
+
+function SafeParseTuple(obj, reviver) {
+    var json
+    var error = null
+
+    try {
+        json = JSON.parse(obj, reviver)
+    } catch (err) {
+        error = err
+    }
+
+    return [error, json]
+}
+
+},{}],146:[function(_dereq_,module,exports){
+function clean (s) {
+  return s.replace(/\n\r?\s*/g, '')
+}
+
+
+module.exports = function tsml (sa) {
+  var s = ''
+    , i = 0
+
+  for (; i < arguments.length; i++)
+    s += clean(sa[i]) + (arguments[i + 1] || '')
+
+  return s
+}
+},{}],147:[function(_dereq_,module,exports){
+"use strict";
+var window = _dereq_("global/window")
+var once = _dereq_("once")
+var isFunction = _dereq_("is-function")
+var parseHeaders = _dereq_("parse-headers")
+var xtend = _dereq_("xtend")
+
+module.exports = createXHR
+createXHR.XMLHttpRequest = window.XMLHttpRequest || noop
+createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest
+
+forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) {
+    createXHR[method === "delete" ? "del" : method] = function(uri, options, callback) {
+        options = initParams(uri, options, callback)
+        options.method = method.toUpperCase()
+        return _createXHR(options)
+    }
+})
+
+function forEachArray(array, iterator) {
+    for (var i = 0; i < array.length; i++) {
+        iterator(array[i])
+    }
+}
+
+function isEmpty(obj){
+    for(var i in obj){
+        if(obj.hasOwnProperty(i)) return false
+    }
+    return true
+}
+
+function initParams(uri, options, callback) {
+    var params = uri
+
+    if (isFunction(options)) {
+        callback = options
+        if (typeof uri === "string") {
+            params = {uri:uri}
+        }
+    } else {
+        params = xtend(options, {uri: uri})
+    }
+
+    params.callback = callback
+    return params
+}
+
+function createXHR(uri, options, callback) {
+    options = initParams(uri, options, callback)
+    return _createXHR(options)
+}
+
+function _createXHR(options) {
+    var callback = options.callback
+    if(typeof callback === "undefined"){
+        throw new Error("callback argument missing")
+    }
+    callback = once(callback)
+
+    function readystatechange() {
+        if (xhr.readyState === 4) {
+            loadFunc()
+        }
+    }
+
+    function getBody() {
+        // Chrome with requestType=blob throws errors arround when even testing access to responseText
+        var body = undefined
+
+        if (xhr.response) {
+            body = xhr.response
+        } else if (xhr.responseType === "text" || !xhr.responseType) {
+            body = xhr.responseText || xhr.responseXML
+        }
+
+        if (isJson) {
+            try {
+                body = JSON.parse(body)
+            } catch (e) {}
+        }
+
+        return body
+    }
+
+    var failureResponse = {
+                body: undefined,
+                headers: {},
+                statusCode: 0,
+                method: method,
+                url: uri,
+                rawRequest: xhr
+            }
+
+    function errorFunc(evt) {
+        clearTimeout(timeoutTimer)
+        if(!(evt instanceof Error)){
+            evt = new Error("" + (evt || "Unknown XMLHttpRequest Error") )
+        }
+        evt.statusCode = 0
+        callback(evt, failureResponse)
+    }
+
+    // will load the data & process the response in a special response object
+    function loadFunc() {
+        if (aborted) return
+        var status
+        clearTimeout(timeoutTimer)
+        if(options.useXDR && xhr.status===undefined) {
+            //IE8 CORS GET successful response doesn't have a status field, but body is fine
+            status = 200
+        } else {
+            status = (xhr.status === 1223 ? 204 : xhr.status)
+        }
+        var response = failureResponse
+        var err = null
+
+        if (status !== 0){
+            response = {
+                body: getBody(),
+                statusCode: status,
+                method: method,
+                headers: {},
+                url: uri,
+                rawRequest: xhr
+            }
+            if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE
+                response.headers = parseHeaders(xhr.getAllResponseHeaders())
+            }
+        } else {
+            err = new Error("Internal XMLHttpRequest Error")
+        }
+        callback(err, response, response.body)
+
+    }
+
+    var xhr = options.xhr || null
+
+    if (!xhr) {
+        if (options.cors || options.useXDR) {
+            xhr = new createXHR.XDomainRequest()
+        }else{
+            xhr = new createXHR.XMLHttpRequest()
+        }
+    }
+
+    var key
+    var aborted
+    var uri = xhr.url = options.uri || options.url
+    var method = xhr.method = options.method || "GET"
+    var body = options.body || options.data || null
+    var headers = xhr.headers = options.headers || {}
+    var sync = !!options.sync
+    var isJson = false
+    var timeoutTimer
+
+    if ("json" in options) {
+        isJson = true
+        headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json") //Don't override existing accept header declared by user
+        if (method !== "GET" && method !== "HEAD") {
+            headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json") //Don't override existing accept header declared by user
+            body = JSON.stringify(options.json)
+        }
+    }
+
+    xhr.onreadystatechange = readystatechange
+    xhr.onload = loadFunc
+    xhr.onerror = errorFunc
+    // IE9 must have onprogress be set to a unique function.
+    xhr.onprogress = function () {
+        // IE must die
+    }
+    xhr.ontimeout = errorFunc
+    xhr.open(method, uri, !sync, options.username, options.password)
+    //has to be after open
+    if(!sync) {
+        xhr.withCredentials = !!options.withCredentials
+    }
+    // Cannot set timeout with sync request
+    // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly
+    // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent
+    if (!sync && options.timeout > 0 ) {
+        timeoutTimer = setTimeout(function(){
+            aborted=true//IE9 may still call readystatechange
+            xhr.abort("timeout")
+            var e = new Error("XMLHttpRequest timeout")
+            e.code = "ETIMEDOUT"
+            errorFunc(e)
+        }, options.timeout )
+    }
+
+    if (xhr.setRequestHeader) {
+        for(key in headers){
+            if(headers.hasOwnProperty(key)){
+                xhr.setRequestHeader(key, headers[key])
+            }
+        }
+    } else if (options.headers && !isEmpty(options.headers)) {
+        throw new Error("Headers cannot be set on an XDomainRequest object")
+    }
+
+    if ("responseType" in options) {
+        xhr.responseType = options.responseType
+    }
+
+    if ("beforeSend" in options &&
+        typeof options.beforeSend === "function"
+    ) {
+        options.beforeSend(xhr)
+    }
+
+    xhr.send(body)
+
+    return xhr
+
+
+}
+
+function noop() {}
+
+},{"global/window":93,"is-function":148,"once":149,"parse-headers":152,"xtend":153}],148:[function(_dereq_,module,exports){
+module.exports = isFunction
+
+var toString = Object.prototype.toString
+
+function isFunction (fn) {
+  var string = toString.call(fn)
+  return string === '[object Function]' ||
+    (typeof fn === 'function' && string !== '[object RegExp]') ||
+    (typeof window !== 'undefined' &&
+     // IE8 and below
+     (fn === window.setTimeout ||
+      fn === window.alert ||
+      fn === window.confirm ||
+      fn === window.prompt))
+};
+
+},{}],149:[function(_dereq_,module,exports){
+module.exports = once
+
+once.proto = once(function () {
+  Object.defineProperty(Function.prototype, 'once', {
+    value: function () {
+      return once(this)
+    },
+    configurable: true
+  })
+})
+
+function once (fn) {
+  var called = false
+  return function () {
+    if (called) return
+    called = true
+    return fn.apply(this, arguments)
+  }
+}
+
+},{}],150:[function(_dereq_,module,exports){
+var isFunction = _dereq_('is-function')
+
+module.exports = forEach
+
+var toString = Object.prototype.toString
+var hasOwnProperty = Object.prototype.hasOwnProperty
+
+function forEach(list, iterator, context) {
+    if (!isFunction(iterator)) {
+        throw new TypeError('iterator must be a function')
+    }
+
+    if (arguments.length < 3) {
+        context = this
+    }
+    
+    if (toString.call(list) === '[object Array]')
+        forEachArray(list, iterator, context)
+    else if (typeof list === 'string')
+        forEachString(list, iterator, context)
+    else
+        forEachObject(list, iterator, context)
+}
+
+function forEachArray(array, iterator, context) {
+    for (var i = 0, len = array.length; i < len; i++) {
+        if (hasOwnProperty.call(array, i)) {
+            iterator.call(context, array[i], i, array)
+        }
+    }
+}
+
+function forEachString(string, iterator, context) {
+    for (var i = 0, len = string.length; i < len; i++) {
+        // no such thing as a sparse string.
+        iterator.call(context, string.charAt(i), i, string)
+    }
+}
+
+function forEachObject(object, iterator, context) {
+    for (var k in object) {
+        if (hasOwnProperty.call(object, k)) {
+            iterator.call(context, object[k], k, object)
+        }
+    }
+}
+
+},{"is-function":148}],151:[function(_dereq_,module,exports){
+
+exports = module.exports = trim;
+
+function trim(str){
+  return str.replace(/^\s*|\s*$/g, '');
+}
+
+exports.left = function(str){
+  return str.replace(/^\s*/, '');
+};
+
+exports.right = function(str){
+  return str.replace(/\s*$/, '');
+};
+
+},{}],152:[function(_dereq_,module,exports){
+var trim = _dereq_('trim')
+  , forEach = _dereq_('for-each')
+  , isArray = function(arg) {
+      return Object.prototype.toString.call(arg) === '[object Array]';
+    }
+
+module.exports = function (headers) {
+  if (!headers)
+    return {}
+
+  var result = {}
+
+  forEach(
+      trim(headers).split('\n')
+    , function (row) {
+        var index = row.indexOf(':')
+          , key = trim(row.slice(0, index)).toLowerCase()
+          , value = trim(row.slice(index + 1))
+
+        if (typeof(result[key]) === 'undefined') {
+          result[key] = value
+        } else if (isArray(result[key])) {
+          result[key].push(value)
+        } else {
+          result[key] = [ result[key], value ]
+        }
+      }
+  )
+
+  return result
+}
+},{"for-each":150,"trim":151}],153:[function(_dereq_,module,exports){
+module.exports = extend
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+function extend() {
+    var target = {}
+
+    for (var i = 0; i < arguments.length; i++) {
+        var source = arguments[i]
+
+        for (var key in source) {
+            if (hasOwnProperty.call(source, key)) {
+                target[key] = source[key]
+            }
+        }
+    }
+
+    return target
+}
+
+},{}]},{},[91])(91)
+});
+/* vtt.js - v0.12.1 (https://github.com/mozilla/vtt.js) built on 08-07-2015 */
+
+(function(root) {
+  var vttjs = root.vttjs = {};
+  var cueShim = vttjs.VTTCue;
+  var regionShim = vttjs.VTTRegion;
+  var oldVTTCue = root.VTTCue;
+  var oldVTTRegion = root.VTTRegion;
+
+  vttjs.shim = function() {
+    vttjs.VTTCue = cueShim;
+    vttjs.VTTRegion = regionShim;
+  };
+
+  vttjs.restore = function() {
+    vttjs.VTTCue = oldVTTCue;
+    vttjs.VTTRegion = oldVTTRegion;
+  };
+}(this));
+
+/**
+ * Copyright 2013 vtt.js Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function(root, vttjs) {
+
+  var autoKeyword = "auto";
+  var directionSetting = {
+    "": true,
+    "lr": true,
+    "rl": true
+  };
+  var alignSetting = {
+    "start": true,
+    "middle": true,
+    "end": true,
+    "left": true,
+    "right": true
+  };
+
+  function findDirectionSetting(value) {
+    if (typeof value !== "string") {
+      return false;
+    }
+    var dir = directionSetting[value.toLowerCase()];
+    return dir ? value.toLowerCase() : false;
+  }
+
+  function findAlignSetting(value) {
+    if (typeof value !== "string") {
+      return false;
+    }
+    var align = alignSetting[value.toLowerCase()];
+    return align ? value.toLowerCase() : false;
+  }
+
+  function extend(obj) {
+    var i = 1;
+    for (; i < arguments.length; i++) {
+      var cobj = arguments[i];
+      for (var p in cobj) {
+        obj[p] = cobj[p];
+      }
+    }
+
+    return obj;
+  }
+
+  function VTTCue(startTime, endTime, text) {
+    var cue = this;
+    var isIE8 = (/MSIE\s8\.0/).test(navigator.userAgent);
+    var baseObj = {};
+
+    if (isIE8) {
+      cue = document.createElement('custom');
+    } else {
+      baseObj.enumerable = true;
+    }
+
+    /**
+     * Shim implementation specific properties. These properties are not in
+     * the spec.
+     */
+
+    // Lets us know when the VTTCue's data has changed in such a way that we need
+    // to recompute its display state. This lets us compute its display state
+    // lazily.
+    cue.hasBeenReset = false;
+
+    /**
+     * VTTCue and TextTrackCue properties
+     * http://dev.w3.org/html5/webvtt/#vttcue-interface
+     */
+
+    var _id = "";
+    var _pauseOnExit = false;
+    var _startTime = startTime;
+    var _endTime = endTime;
+    var _text = text;
+    var _region = null;
+    var _vertical = "";
+    var _snapToLines = true;
+    var _line = "auto";
+    var _lineAlign = "start";
+    var _position = 50;
+    var _positionAlign = "middle";
+    var _size = 50;
+    var _align = "middle";
+
+    Object.defineProperty(cue,
+      "id", extend({}, baseObj, {
+        get: function() {
+          return _id;
+        },
+        set: function(value) {
+          _id = "" + value;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "pauseOnExit", extend({}, baseObj, {
+        get: function() {
+          return _pauseOnExit;
+        },
+        set: function(value) {
+          _pauseOnExit = !!value;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "startTime", extend({}, baseObj, {
+        get: function() {
+          return _startTime;
+        },
+        set: function(value) {
+          if (typeof value !== "number") {
+            throw new TypeError("Start time must be set to a number.");
+          }
+          _startTime = value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "endTime", extend({}, baseObj, {
+        get: function() {
+          return _endTime;
+        },
+        set: function(value) {
+          if (typeof value !== "number") {
+            throw new TypeError("End time must be set to a number.");
+          }
+          _endTime = value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "text", extend({}, baseObj, {
+        get: function() {
+          return _text;
+        },
+        set: function(value) {
+          _text = "" + value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "region", extend({}, baseObj, {
+        get: function() {
+          return _region;
+        },
+        set: function(value) {
+          _region = value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "vertical", extend({}, baseObj, {
+        get: function() {
+          return _vertical;
+        },
+        set: function(value) {
+          var setting = findDirectionSetting(value);
+          // Have to check for false because the setting an be an empty string.
+          if (setting === false) {
+            throw new SyntaxError("An invalid or illegal string was specified.");
+          }
+          _vertical = setting;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "snapToLines", extend({}, baseObj, {
+        get: function() {
+          return _snapToLines;
+        },
+        set: function(value) {
+          _snapToLines = !!value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "line", extend({}, baseObj, {
+        get: function() {
+          return _line;
+        },
+        set: function(value) {
+          if (typeof value !== "number" && value !== autoKeyword) {
+            throw new SyntaxError("An invalid number or illegal string was specified.");
+          }
+          _line = value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "lineAlign", extend({}, baseObj, {
+        get: function() {
+          return _lineAlign;
+        },
+        set: function(value) {
+          var setting = findAlignSetting(value);
+          if (!setting) {
+            throw new SyntaxError("An invalid or illegal string was specified.");
+          }
+          _lineAlign = setting;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "position", extend({}, baseObj, {
+        get: function() {
+          return _position;
+        },
+        set: function(value) {
+          if (value < 0 || value > 100) {
+            throw new Error("Position must be between 0 and 100.");
+          }
+          _position = value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "positionAlign", extend({}, baseObj, {
+        get: function() {
+          return _positionAlign;
+        },
+        set: function(value) {
+          var setting = findAlignSetting(value);
+          if (!setting) {
+            throw new SyntaxError("An invalid or illegal string was specified.");
+          }
+          _positionAlign = setting;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "size", extend({}, baseObj, {
+        get: function() {
+          return _size;
+        },
+        set: function(value) {
+          if (value < 0 || value > 100) {
+            throw new Error("Size must be between 0 and 100.");
+          }
+          _size = value;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    Object.defineProperty(cue,
+      "align", extend({}, baseObj, {
+        get: function() {
+          return _align;
+        },
+        set: function(value) {
+          var setting = findAlignSetting(value);
+          if (!setting) {
+            throw new SyntaxError("An invalid or illegal string was specified.");
+          }
+          _align = setting;
+          this.hasBeenReset = true;
+        }
+      }));
+
+    /**
+     * Other <track> spec defined properties
+     */
+
+    // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state
+    cue.displayState = undefined;
+
+    if (isIE8) {
+      return cue;
+    }
+  }
+
+  /**
+   * VTTCue methods
+   */
+
+  VTTCue.prototype.getCueAsHTML = function() {
+    // Assume WebVTT.convertCueToDOMTree is on the global.
+    return WebVTT.convertCueToDOMTree(window, this.text);
+  };
+
+  root.VTTCue = root.VTTCue || VTTCue;
+  vttjs.VTTCue = VTTCue;
+}(this, (this.vttjs || {})));
+
+/**
+ * Copyright 2013 vtt.js Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function(root, vttjs) {
+
+  var scrollSetting = {
+    "": true,
+    "up": true
+  };
+
+  function findScrollSetting(value) {
+    if (typeof value !== "string") {
+      return false;
+    }
+    var scroll = scrollSetting[value.toLowerCase()];
+    return scroll ? value.toLowerCase() : false;
+  }
+
+  function isValidPercentValue(value) {
+    return typeof value === "number" && (value >= 0 && value <= 100);
+  }
+
+  // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface
+  function VTTRegion() {
+    var _width = 100;
+    var _lines = 3;
+    var _regionAnchorX = 0;
+    var _regionAnchorY = 100;
+    var _viewportAnchorX = 0;
+    var _viewportAnchorY = 100;
+    var _scroll = "";
+
+    Object.defineProperties(this, {
+      "width": {
+        enumerable: true,
+        get: function() {
+          return _width;
+        },
+        set: function(value) {
+          if (!isValidPercentValue(value)) {
+            throw new Error("Width must be between 0 and 100.");
+          }
+          _width = value;
+        }
+      },
+      "lines": {
+        enumerable: true,
+        get: function() {
+          return _lines;
+        },
+        set: function(value) {
+          if (typeof value !== "number") {
+            throw new TypeError("Lines must be set to a number.");
+          }
+          _lines = value;
+        }
+      },
+      "regionAnchorY": {
+        enumerable: true,
+        get: function() {
+          return _regionAnchorY;
+        },
+        set: function(value) {
+          if (!isValidPercentValue(value)) {
+            throw new Error("RegionAnchorX must be between 0 and 100.");
+          }
+          _regionAnchorY = value;
+        }
+      },
+      "regionAnchorX": {
+        enumerable: true,
+        get: function() {
+          return _regionAnchorX;
+        },
+        set: function(value) {
+          if(!isValidPercentValue(value)) {
+            throw new Error("RegionAnchorY must be between 0 and 100.");
+          }
+          _regionAnchorX = value;
+        }
+      },
+      "viewportAnchorY": {
+        enumerable: true,
+        get: function() {
+          return _viewportAnchorY;
+        },
+        set: function(value) {
+          if (!isValidPercentValue(value)) {
+            throw new Error("ViewportAnchorY must be between 0 and 100.");
+          }
+          _viewportAnchorY = value;
+        }
+      },
+      "viewportAnchorX": {
+        enumerable: true,
+        get: function() {
+          return _viewportAnchorX;
+        },
+        set: function(value) {
+          if (!isValidPercentValue(value)) {
+            throw new Error("ViewportAnchorX must be between 0 and 100.");
+          }
+          _viewportAnchorX = value;
+        }
+      },
+      "scroll": {
+        enumerable: true,
+        get: function() {
+          return _scroll;
+        },
+        set: function(value) {
+          var setting = findScrollSetting(value);
+          // Have to check for false as an empty string is a legal value.
+          if (setting === false) {
+            throw new SyntaxError("An invalid or illegal string was specified.");
+          }
+          _scroll = setting;
+        }
+      }
+    });
+  }
+
+  root.VTTRegion = root.VTTRegion || VTTRegion;
+  vttjs.VTTRegion = VTTRegion;
+}(this, (this.vttjs || {})));
+
+/**
+ * Copyright 2013 vtt.js Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+(function(global) {
+
+  var _objCreate = Object.create || (function() {
+    function F() {}
+    return function(o) {
+      if (arguments.length !== 1) {
+        throw new Error('Object.create shim only accepts one parameter.');
+      }
+      F.prototype = o;
+      return new F();
+    };
+  })();
+
+  // Creates a new ParserError object from an errorData object. The errorData
+  // object should have default code and message properties. The default message
+  // property can be overriden by passing in a message parameter.
+  // See ParsingError.Errors below for acceptable errors.
+  function ParsingError(errorData, message) {
+    this.name = "ParsingError";
+    this.code = errorData.code;
+    this.message = message || errorData.message;
+  }
+  ParsingError.prototype = _objCreate(Error.prototype);
+  ParsingError.prototype.constructor = ParsingError;
+
+  // ParsingError metadata for acceptable ParsingErrors.
+  ParsingError.Errors = {
+    BadSignature: {
+      code: 0,
+      message: "Malformed WebVTT signature."
+    },
+    BadTimeStamp: {
+      code: 1,
+      message: "Malformed time stamp."
+    }
+  };
+
+  // Try to parse input as a time stamp.
+  function parseTimeStamp(input) {
+
+    function computeSeconds(h, m, s, f) {
+      return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;
+    }
+
+    var m = input.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);
+    if (!m) {
+      return null;
+    }
+
+    if (m[3]) {
+      // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]
+      return computeSeconds(m[1], m[2], m[3].replace(":", ""), m[4]);
+    } else if (m[1] > 59) {
+      // Timestamp takes the form of [hours]:[minutes].[milliseconds]
+      // First position is hours as it's over 59.
+      return computeSeconds(m[1], m[2], 0,  m[4]);
+    } else {
+      // Timestamp takes the form of [minutes]:[seconds].[milliseconds]
+      return computeSeconds(0, m[1], m[2], m[4]);
+    }
+  }
+
+  // A settings object holds key/value pairs and will ignore anything but the first
+  // assignment to a specific key.
+  function Settings() {
+    this.values = _objCreate(null);
+  }
+
+  Settings.prototype = {
+    // Only accept the first assignment to any key.
+    set: function(k, v) {
+      if (!this.get(k) && v !== "") {
+        this.values[k] = v;
+      }
+    },
+    // Return the value for a key, or a default value.
+    // If 'defaultKey' is passed then 'dflt' is assumed to be an object with
+    // a number of possible default values as properties where 'defaultKey' is
+    // the key of the property that will be chosen; otherwise it's assumed to be
+    // a single value.
+    get: function(k, dflt, defaultKey) {
+      if (defaultKey) {
+        return this.has(k) ? this.values[k] : dflt[defaultKey];
+      }
+      return this.has(k) ? this.values[k] : dflt;
+    },
+    // Check whether we have a value for a key.
+    has: function(k) {
+      return k in this.values;
+    },
+    // Accept a setting if its one of the given alternatives.
+    alt: function(k, v, a) {
+      for (var n = 0; n < a.length; ++n) {
+        if (v === a[n]) {
+          this.set(k, v);
+          break;
+        }
+      }
+    },
+    // Accept a setting if its a valid (signed) integer.
+    integer: function(k, v) {
+      if (/^-?\d+$/.test(v)) { // integer
+        this.set(k, parseInt(v, 10));
+      }
+    },
+    // Accept a setting if its a valid percentage.
+    percent: function(k, v) {
+      var m;
+      if ((m = v.match(/^([\d]{1,3})(\.[\d]*)?%$/))) {
+        v = parseFloat(v);
+        if (v >= 0 && v <= 100) {
+          this.set(k, v);
+          return true;
+        }
+      }
+      return false;
+    }
+  };
+
+  // Helper function to parse input into groups separated by 'groupDelim', and
+  // interprete each group as a key/value pair separated by 'keyValueDelim'.
+  function parseOptions(input, callback, keyValueDelim, groupDelim) {
+    var groups = groupDelim ? input.split(groupDelim) : [input];
+    for (var i in groups) {
+      if (typeof groups[i] !== "string") {
+        continue;
+      }
+      var kv = groups[i].split(keyValueDelim);
+      if (kv.length !== 2) {
+        continue;
+      }
+      var k = kv[0];
+      var v = kv[1];
+      callback(k, v);
+    }
+  }
+
+  function parseCue(input, cue, regionList) {
+    // Remember the original input if we need to throw an error.
+    var oInput = input;
+    // 4.1 WebVTT timestamp
+    function consumeTimeStamp() {
+      var ts = parseTimeStamp(input);
+      if (ts === null) {
+        throw new ParsingError(ParsingError.Errors.BadTimeStamp,
+                              "Malformed timestamp: " + oInput);
+      }
+      // Remove time stamp from input.
+      input = input.replace(/^[^\sa-zA-Z-]+/, "");
+      return ts;
+    }
+
+    // 4.4.2 WebVTT cue settings
+    function consumeCueSettings(input, cue) {
+      var settings = new Settings();
+
+      parseOptions(input, function (k, v) {
+        switch (k) {
+        case "region":
+          // Find the last region we parsed with the same region id.
+          for (var i = regionList.length - 1; i >= 0; i--) {
+            if (regionList[i].id === v) {
+              settings.set(k, regionList[i].region);
+              break;
+            }
+          }
+          break;
+        case "vertical":
+          settings.alt(k, v, ["rl", "lr"]);
+          break;
+        case "line":
+          var vals = v.split(","),
+              vals0 = vals[0];
+          settings.integer(k, vals0);
+          settings.percent(k, vals0) ? settings.set("snapToLines", false) : null;
+          settings.alt(k, vals0, ["auto"]);
+          if (vals.length === 2) {
+            settings.alt("lineAlign", vals[1], ["start", "middle", "end"]);
+          }
+          break;
+        case "position":
+          vals = v.split(",");
+          settings.percent(k, vals[0]);
+          if (vals.length === 2) {
+            settings.alt("positionAlign", vals[1], ["start", "middle", "end"]);
+          }
+          break;
+        case "size":
+          settings.percent(k, v);
+          break;
+        case "align":
+          settings.alt(k, v, ["start", "middle", "end", "left", "right"]);
+          break;
+        }
+      }, /:/, /\s/);
+
+      // Apply default values for any missing fields.
+      cue.region = settings.get("region", null);
+      cue.vertical = settings.get("vertical", "");
+      cue.line = settings.get("line", "auto");
+      cue.lineAlign = settings.get("lineAlign", "start");
+      cue.snapToLines = settings.get("snapToLines", true);
+      cue.size = settings.get("size", 100);
+      cue.align = settings.get("align", "middle");
+      cue.position = settings.get("position", {
+        start: 0,
+        left: 0,
+        middle: 50,
+        end: 100,
+        right: 100
+      }, cue.align);
+      cue.positionAlign = settings.get("positionAlign", {
+        start: "start",
+        left: "start",
+        middle: "middle",
+        end: "end",
+        right: "end"
+      }, cue.align);
+    }
+
+    function skipWhitespace() {
+      input = input.replace(/^\s+/, "");
+    }
+
+    // 4.1 WebVTT cue timings.
+    skipWhitespace();
+    cue.startTime = consumeTimeStamp();   // (1) collect cue start time
+    skipWhitespace();
+    if (input.substr(0, 3) !== "-->") {     // (3) next characters must match "-->"
+      throw new ParsingError(ParsingError.Errors.BadTimeStamp,
+                             "Malformed time stamp (time stamps must be separated by '-->'): " +
+                             oInput);
+    }
+    input = input.substr(3);
+    skipWhitespace();
+    cue.endTime = consumeTimeStamp();     // (5) collect cue end time
+
+    // 4.1 WebVTT cue settings list.
+    skipWhitespace();
+    consumeCueSettings(input, cue);
+  }
+
+  var ESCAPE = {
+    "&amp;": "&",
+    "&lt;": "<",
+    "&gt;": ">",
+    "&lrm;": "\u200e",
+    "&rlm;": "\u200f",
+    "&nbsp;": "\u00a0"
+  };
+
+  var TAG_NAME = {
+    c: "span",
+    i: "i",
+    b: "b",
+    u: "u",
+    ruby: "ruby",
+    rt: "rt",
+    v: "span",
+    lang: "span"
+  };
+
+  var TAG_ANNOTATION = {
+    v: "title",
+    lang: "lang"
+  };
+
+  var NEEDS_PARENT = {
+    rt: "ruby"
+  };
+
+  // Parse content into a document fragment.
+  function parseContent(window, input) {
+    function nextToken() {
+      // Check for end-of-string.
+      if (!input) {
+        return null;
+      }
+
+      // Consume 'n' characters from the input.
+      function consume(result) {
+        input = input.substr(result.length);
+        return result;
+      }
+
+      var m = input.match(/^([^<]*)(<[^>]+>?)?/);
+      // If there is some text before the next tag, return it, otherwise return
+      // the tag.
+      return consume(m[1] ? m[1] : m[2]);
+    }
+
+    // Unescape a string 's'.
+    function unescape1(e) {
+      return ESCAPE[e];
+    }
+    function unescape(s) {
+      while ((m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/))) {
+        s = s.replace(m[0], unescape1);
+      }
+      return s;
+    }
+
+    function shouldAdd(current, element) {
+      return !NEEDS_PARENT[element.localName] ||
+             NEEDS_PARENT[element.localName] === current.localName;
+    }
+
+    // Create an element for this tag.
+    function createElement(type, annotation) {
+      var tagName = TAG_NAME[type];
+      if (!tagName) {
+        return null;
+      }
+      var element = window.document.createElement(tagName);
+      element.localName = tagName;
+      var name = TAG_ANNOTATION[type];
+      if (name && annotation) {
+        element[name] = annotation.trim();
+      }
+      return element;
+    }
+
+    var rootDiv = window.document.createElement("div"),
+        current = rootDiv,
+        t,
+        tagStack = [];
+
+    while ((t = nextToken()) !== null) {
+      if (t[0] === '<') {
+        if (t[1] === "/") {
+          // If the closing tag matches, move back up to the parent node.
+          if (tagStack.length &&
+              tagStack[tagStack.length - 1] === t.substr(2).replace(">", "")) {
+            tagStack.pop();
+            current = current.parentNode;
+          }
+          // Otherwise just ignore the end tag.
+          continue;
+        }
+        var ts = parseTimeStamp(t.substr(1, t.length - 2));
+        var node;
+        if (ts) {
+          // Timestamps are lead nodes as well.
+          node = window.document.createProcessingInstruction("timestamp", ts);
+          current.appendChild(node);
+          continue;
+        }
+        var m = t.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);
+        // If we can't parse the tag, skip to the next tag.
+        if (!m) {
+          continue;
+        }
+        // Try to construct an element, and ignore the tag if we couldn't.
+        node = createElement(m[1], m[3]);
+        if (!node) {
+          continue;
+        }
+        // Determine if the tag should be added based on the context of where it
+        // is placed in the cuetext.
+        if (!shouldAdd(current, node)) {
+          continue;
+        }
+        // Set the class list (as a list of classes, separated by space).
+        if (m[2]) {
+          node.className = m[2].substr(1).replace('.', ' ');
+        }
+        // Append the node to the current node, and enter the scope of the new
+        // node.
+        tagStack.push(m[1]);
+        current.appendChild(node);
+        current = node;
+        continue;
+      }
+
+      // Text nodes are leaf nodes.
+      current.appendChild(window.document.createTextNode(unescape(t)));
+    }
+
+    return rootDiv;
+  }
+
+  // This is a list of all the Unicode characters that have a strong
+  // right-to-left category. What this means is that these characters are
+  // written right-to-left for sure. It was generated by pulling all the strong
+  // right-to-left characters out of the Unicode data table. That table can
+  // found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
+  var strongRTLChars = [0x05BE, 0x05C0, 0x05C3, 0x05C6, 0x05D0, 0x05D1,
+      0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA,
+      0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3,
+      0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x05F0, 0x05F1,
+      0x05F2, 0x05F3, 0x05F4, 0x0608, 0x060B, 0x060D, 0x061B, 0x061E, 0x061F,
+      0x0620, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628,
+      0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631,
+      0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063A,
+      0x063B, 0x063C, 0x063D, 0x063E, 0x063F, 0x0640, 0x0641, 0x0642, 0x0643,
+      0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, 0x066D, 0x066E,
+      0x066F, 0x0671, 0x0672, 0x0673, 0x0674, 0x0675, 0x0676, 0x0677, 0x0678,
+      0x0679, 0x067A, 0x067B, 0x067C, 0x067D, 0x067E, 0x067F, 0x0680, 0x0681,
+      0x0682, 0x0683, 0x0684, 0x0685, 0x0686, 0x0687, 0x0688, 0x0689, 0x068A,
+      0x068B, 0x068C, 0x068D, 0x068E, 0x068F, 0x0690, 0x0691, 0x0692, 0x0693,
+      0x0694, 0x0695, 0x0696, 0x0697, 0x0698, 0x0699, 0x069A, 0x069B, 0x069C,
+      0x069D, 0x069E, 0x069F, 0x06A0, 0x06A1, 0x06A2, 0x06A3, 0x06A4, 0x06A5,
+      0x06A6, 0x06A7, 0x06A8, 0x06A9, 0x06AA, 0x06AB, 0x06AC, 0x06AD, 0x06AE,
+      0x06AF, 0x06B0, 0x06B1, 0x06B2, 0x06B3, 0x06B4, 0x06B5, 0x06B6, 0x06B7,
+      0x06B8, 0x06B9, 0x06BA, 0x06BB, 0x06BC, 0x06BD, 0x06BE, 0x06BF, 0x06C0,
+      0x06C1, 0x06C2, 0x06C3, 0x06C4, 0x06C5, 0x06C6, 0x06C7, 0x06C8, 0x06C9,
+      0x06CA, 0x06CB, 0x06CC, 0x06CD, 0x06CE, 0x06CF, 0x06D0, 0x06D1, 0x06D2,
+      0x06D3, 0x06D4, 0x06D5, 0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FB,
+      0x06FC, 0x06FD, 0x06FE, 0x06FF, 0x0700, 0x0701, 0x0702, 0x0703, 0x0704,
+      0x0705, 0x0706, 0x0707, 0x0708, 0x0709, 0x070A, 0x070B, 0x070C, 0x070D,
+      0x070F, 0x0710, 0x0712, 0x0713, 0x0714, 0x0715, 0x0716, 0x0717, 0x0718,
+      0x0719, 0x071A, 0x071B, 0x071C, 0x071D, 0x071E, 0x071F, 0x0720, 0x0721,
+      0x0722, 0x0723, 0x0724, 0x0725, 0x0726, 0x0727, 0x0728, 0x0729, 0x072A,
+      0x072B, 0x072C, 0x072D, 0x072E, 0x072F, 0x074D, 0x074E, 0x074F, 0x0750,
+      0x0751, 0x0752, 0x0753, 0x0754, 0x0755, 0x0756, 0x0757, 0x0758, 0x0759,
+      0x075A, 0x075B, 0x075C, 0x075D, 0x075E, 0x075F, 0x0760, 0x0761, 0x0762,
+      0x0763, 0x0764, 0x0765, 0x0766, 0x0767, 0x0768, 0x0769, 0x076A, 0x076B,
+      0x076C, 0x076D, 0x076E, 0x076F, 0x0770, 0x0771, 0x0772, 0x0773, 0x0774,
+      0x0775, 0x0776, 0x0777, 0x0778, 0x0779, 0x077A, 0x077B, 0x077C, 0x077D,
+      0x077E, 0x077F, 0x0780, 0x0781, 0x0782, 0x0783, 0x0784, 0x0785, 0x0786,
+      0x0787, 0x0788, 0x0789, 0x078A, 0x078B, 0x078C, 0x078D, 0x078E, 0x078F,
+      0x0790, 0x0791, 0x0792, 0x0793, 0x0794, 0x0795, 0x0796, 0x0797, 0x0798,
+      0x0799, 0x079A, 0x079B, 0x079C, 0x079D, 0x079E, 0x079F, 0x07A0, 0x07A1,
+      0x07A2, 0x07A3, 0x07A4, 0x07A5, 0x07B1, 0x07C0, 0x07C1, 0x07C2, 0x07C3,
+      0x07C4, 0x07C5, 0x07C6, 0x07C7, 0x07C8, 0x07C9, 0x07CA, 0x07CB, 0x07CC,
+      0x07CD, 0x07CE, 0x07CF, 0x07D0, 0x07D1, 0x07D2, 0x07D3, 0x07D4, 0x07D5,
+      0x07D6, 0x07D7, 0x07D8, 0x07D9, 0x07DA, 0x07DB, 0x07DC, 0x07DD, 0x07DE,
+      0x07DF, 0x07E0, 0x07E1, 0x07E2, 0x07E3, 0x07E4, 0x07E5, 0x07E6, 0x07E7,
+      0x07E8, 0x07E9, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x0800, 0x0801, 0x0802,
+      0x0803, 0x0804, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, 0x080A, 0x080B,
+      0x080C, 0x080D, 0x080E, 0x080F, 0x0810, 0x0811, 0x0812, 0x0813, 0x0814,
+      0x0815, 0x081A, 0x0824, 0x0828, 0x0830, 0x0831, 0x0832, 0x0833, 0x0834,
+      0x0835, 0x0836, 0x0837, 0x0838, 0x0839, 0x083A, 0x083B, 0x083C, 0x083D,
+      0x083E, 0x0840, 0x0841, 0x0842, 0x0843, 0x0844, 0x0845, 0x0846, 0x0847,
+      0x0848, 0x0849, 0x084A, 0x084B, 0x084C, 0x084D, 0x084E, 0x084F, 0x0850,
+      0x0851, 0x0852, 0x0853, 0x0854, 0x0855, 0x0856, 0x0857, 0x0858, 0x085E,
+      0x08A0, 0x08A2, 0x08A3, 0x08A4, 0x08A5, 0x08A6, 0x08A7, 0x08A8, 0x08A9,
+      0x08AA, 0x08AB, 0x08AC, 0x200F, 0xFB1D, 0xFB1F, 0xFB20, 0xFB21, 0xFB22,
+      0xFB23, 0xFB24, 0xFB25, 0xFB26, 0xFB27, 0xFB28, 0xFB2A, 0xFB2B, 0xFB2C,
+      0xFB2D, 0xFB2E, 0xFB2F, 0xFB30, 0xFB31, 0xFB32, 0xFB33, 0xFB34, 0xFB35,
+      0xFB36, 0xFB38, 0xFB39, 0xFB3A, 0xFB3B, 0xFB3C, 0xFB3E, 0xFB40, 0xFB41,
+      0xFB43, 0xFB44, 0xFB46, 0xFB47, 0xFB48, 0xFB49, 0xFB4A, 0xFB4B, 0xFB4C,
+      0xFB4D, 0xFB4E, 0xFB4F, 0xFB50, 0xFB51, 0xFB52, 0xFB53, 0xFB54, 0xFB55,
+      0xFB56, 0xFB57, 0xFB58, 0xFB59, 0xFB5A, 0xFB5B, 0xFB5C, 0xFB5D, 0xFB5E,
+      0xFB5F, 0xFB60, 0xFB61, 0xFB62, 0xFB63, 0xFB64, 0xFB65, 0xFB66, 0xFB67,
+      0xFB68, 0xFB69, 0xFB6A, 0xFB6B, 0xFB6C, 0xFB6D, 0xFB6E, 0xFB6F, 0xFB70,
+      0xFB71, 0xFB72, 0xFB73, 0xFB74, 0xFB75, 0xFB76, 0xFB77, 0xFB78, 0xFB79,
+      0xFB7A, 0xFB7B, 0xFB7C, 0xFB7D, 0xFB7E, 0xFB7F, 0xFB80, 0xFB81, 0xFB82,
+      0xFB83, 0xFB84, 0xFB85, 0xFB86, 0xFB87, 0xFB88, 0xFB89, 0xFB8A, 0xFB8B,
+      0xFB8C, 0xFB8D, 0xFB8E, 0xFB8F, 0xFB90, 0xFB91, 0xFB92, 0xFB93, 0xFB94,
+      0xFB95, 0xFB96, 0xFB97, 0xFB98, 0xFB99, 0xFB9A, 0xFB9B, 0xFB9C, 0xFB9D,
+      0xFB9E, 0xFB9F, 0xFBA0, 0xFBA1, 0xFBA2, 0xFBA3, 0xFBA4, 0xFBA5, 0xFBA6,
+      0xFBA7, 0xFBA8, 0xFBA9, 0xFBAA, 0xFBAB, 0xFBAC, 0xFBAD, 0xFBAE, 0xFBAF,
+      0xFBB0, 0xFBB1, 0xFBB2, 0xFBB3, 0xFBB4, 0xFBB5, 0xFBB6, 0xFBB7, 0xFBB8,
+      0xFBB9, 0xFBBA, 0xFBBB, 0xFBBC, 0xFBBD, 0xFBBE, 0xFBBF, 0xFBC0, 0xFBC1,
+      0xFBD3, 0xFBD4, 0xFBD5, 0xFBD6, 0xFBD7, 0xFBD8, 0xFBD9, 0xFBDA, 0xFBDB,
+      0xFBDC, 0xFBDD, 0xFBDE, 0xFBDF, 0xFBE0, 0xFBE1, 0xFBE2, 0xFBE3, 0xFBE4,
+      0xFBE5, 0xFBE6, 0xFBE7, 0xFBE8, 0xFBE9, 0xFBEA, 0xFBEB, 0xFBEC, 0xFBED,
+      0xFBEE, 0xFBEF, 0xFBF0, 0xFBF1, 0xFBF2, 0xFBF3, 0xFBF4, 0xFBF5, 0xFBF6,
+      0xFBF7, 0xFBF8, 0xFBF9, 0xFBFA, 0xFBFB, 0xFBFC, 0xFBFD, 0xFBFE, 0xFBFF,
+      0xFC00, 0xFC01, 0xFC02, 0xFC03, 0xFC04, 0xFC05, 0xFC06, 0xFC07, 0xFC08,
+      0xFC09, 0xFC0A, 0xFC0B, 0xFC0C, 0xFC0D, 0xFC0E, 0xFC0F, 0xFC10, 0xFC11,
+      0xFC12, 0xFC13, 0xFC14, 0xFC15, 0xFC16, 0xFC17, 0xFC18, 0xFC19, 0xFC1A,
+      0xFC1B, 0xFC1C, 0xFC1D, 0xFC1E, 0xFC1F, 0xFC20, 0xFC21, 0xFC22, 0xFC23,
+      0xFC24, 0xFC25, 0xFC26, 0xFC27, 0xFC28, 0xFC29, 0xFC2A, 0xFC2B, 0xFC2C,
+      0xFC2D, 0xFC2E, 0xFC2F, 0xFC30, 0xFC31, 0xFC32, 0xFC33, 0xFC34, 0xFC35,
+      0xFC36, 0xFC37, 0xFC38, 0xFC39, 0xFC3A, 0xFC3B, 0xFC3C, 0xFC3D, 0xFC3E,
+      0xFC3F, 0xFC40, 0xFC41, 0xFC42, 0xFC43, 0xFC44, 0xFC45, 0xFC46, 0xFC47,
+      0xFC48, 0xFC49, 0xFC4A, 0xFC4B, 0xFC4C, 0xFC4D, 0xFC4E, 0xFC4F, 0xFC50,
+      0xFC51, 0xFC52, 0xFC53, 0xFC54, 0xFC55, 0xFC56, 0xFC57, 0xFC58, 0xFC59,
+      0xFC5A, 0xFC5B, 0xFC5C, 0xFC5D, 0xFC5E, 0xFC5F, 0xFC60, 0xFC61, 0xFC62,
+      0xFC63, 0xFC64, 0xFC65, 0xFC66, 0xFC67, 0xFC68, 0xFC69, 0xFC6A, 0xFC6B,
+      0xFC6C, 0xFC6D, 0xFC6E, 0xFC6F, 0xFC70, 0xFC71, 0xFC72, 0xFC73, 0xFC74,
+      0xFC75, 0xFC76, 0xFC77, 0xFC78, 0xFC79, 0xFC7A, 0xFC7B, 0xFC7C, 0xFC7D,
+      0xFC7E, 0xFC7F, 0xFC80, 0xFC81, 0xFC82, 0xFC83, 0xFC84, 0xFC85, 0xFC86,
+      0xFC87, 0xFC88, 0xFC89, 0xFC8A, 0xFC8B, 0xFC8C, 0xFC8D, 0xFC8E, 0xFC8F,
+      0xFC90, 0xFC91, 0xFC92, 0xFC93, 0xFC94, 0xFC95, 0xFC96, 0xFC97, 0xFC98,
+      0xFC99, 0xFC9A, 0xFC9B, 0xFC9C, 0xFC9D, 0xFC9E, 0xFC9F, 0xFCA0, 0xFCA1,
+      0xFCA2, 0xFCA3, 0xFCA4, 0xFCA5, 0xFCA6, 0xFCA7, 0xFCA8, 0xFCA9, 0xFCAA,
+      0xFCAB, 0xFCAC, 0xFCAD, 0xFCAE, 0xFCAF, 0xFCB0, 0xFCB1, 0xFCB2, 0xFCB3,
+      0xFCB4, 0xFCB5, 0xFCB6, 0xFCB7, 0xFCB8, 0xFCB9, 0xFCBA, 0xFCBB, 0xFCBC,
+      0xFCBD, 0xFCBE, 0xFCBF, 0xFCC0, 0xFCC1, 0xFCC2, 0xFCC3, 0xFCC4, 0xFCC5,
+      0xFCC6, 0xFCC7, 0xFCC8, 0xFCC9, 0xFCCA, 0xFCCB, 0xFCCC, 0xFCCD, 0xFCCE,
+      0xFCCF, 0xFCD0, 0xFCD1, 0xFCD2, 0xFCD3, 0xFCD4, 0xFCD5, 0xFCD6, 0xFCD7,
+      0xFCD8, 0xFCD9, 0xFCDA, 0xFCDB, 0xFCDC, 0xFCDD, 0xFCDE, 0xFCDF, 0xFCE0,
+      0xFCE1, 0xFCE2, 0xFCE3, 0xFCE4, 0xFCE5, 0xFCE6, 0xFCE7, 0xFCE8, 0xFCE9,
+      0xFCEA, 0xFCEB, 0xFCEC, 0xFCED, 0xFCEE, 0xFCEF, 0xFCF0, 0xFCF1, 0xFCF2,
+      0xFCF3, 0xFCF4, 0xFCF5, 0xFCF6, 0xFCF7, 0xFCF8, 0xFCF9, 0xFCFA, 0xFCFB,
+      0xFCFC, 0xFCFD, 0xFCFE, 0xFCFF, 0xFD00, 0xFD01, 0xFD02, 0xFD03, 0xFD04,
+      0xFD05, 0xFD06, 0xFD07, 0xFD08, 0xFD09, 0xFD0A, 0xFD0B, 0xFD0C, 0xFD0D,
+      0xFD0E, 0xFD0F, 0xFD10, 0xFD11, 0xFD12, 0xFD13, 0xFD14, 0xFD15, 0xFD16,
+      0xFD17, 0xFD18, 0xFD19, 0xFD1A, 0xFD1B, 0xFD1C, 0xFD1D, 0xFD1E, 0xFD1F,
+      0xFD20, 0xFD21, 0xFD22, 0xFD23, 0xFD24, 0xFD25, 0xFD26, 0xFD27, 0xFD28,
+      0xFD29, 0xFD2A, 0xFD2B, 0xFD2C, 0xFD2D, 0xFD2E, 0xFD2F, 0xFD30, 0xFD31,
+      0xFD32, 0xFD33, 0xFD34, 0xFD35, 0xFD36, 0xFD37, 0xFD38, 0xFD39, 0xFD3A,
+      0xFD3B, 0xFD3C, 0xFD3D, 0xFD50, 0xFD51, 0xFD52, 0xFD53, 0xFD54, 0xFD55,
+      0xFD56, 0xFD57, 0xFD58, 0xFD59, 0xFD5A, 0xFD5B, 0xFD5C, 0xFD5D, 0xFD5E,
+      0xFD5F, 0xFD60, 0xFD61, 0xFD62, 0xFD63, 0xFD64, 0xFD65, 0xFD66, 0xFD67,
+      0xFD68, 0xFD69, 0xFD6A, 0xFD6B, 0xFD6C, 0xFD6D, 0xFD6E, 0xFD6F, 0xFD70,
+      0xFD71, 0xFD72, 0xFD73, 0xFD74, 0xFD75, 0xFD76, 0xFD77, 0xFD78, 0xFD79,
+      0xFD7A, 0xFD7B, 0xFD7C, 0xFD7D, 0xFD7E, 0xFD7F, 0xFD80, 0xFD81, 0xFD82,
+      0xFD83, 0xFD84, 0xFD85, 0xFD86, 0xFD87, 0xFD88, 0xFD89, 0xFD8A, 0xFD8B,
+      0xFD8C, 0xFD8D, 0xFD8E, 0xFD8F, 0xFD92, 0xFD93, 0xFD94, 0xFD95, 0xFD96,
+      0xFD97, 0xFD98, 0xFD99, 0xFD9A, 0xFD9B, 0xFD9C, 0xFD9D, 0xFD9E, 0xFD9F,
+      0xFDA0, 0xFDA1, 0xFDA2, 0xFDA3, 0xFDA4, 0xFDA5, 0xFDA6, 0xFDA7, 0xFDA8,
+      0xFDA9, 0xFDAA, 0xFDAB, 0xFDAC, 0xFDAD, 0xFDAE, 0xFDAF, 0xFDB0, 0xFDB1,
+      0xFDB2, 0xFDB3, 0xFDB4, 0xFDB5, 0xFDB6, 0xFDB7, 0xFDB8, 0xFDB9, 0xFDBA,
+      0xFDBB, 0xFDBC, 0xFDBD, 0xFDBE, 0xFDBF, 0xFDC0, 0xFDC1, 0xFDC2, 0xFDC3,
+      0xFDC4, 0xFDC5, 0xFDC6, 0xFDC7, 0xFDF0, 0xFDF1, 0xFDF2, 0xFDF3, 0xFDF4,
+      0xFDF5, 0xFDF6, 0xFDF7, 0xFDF8, 0xFDF9, 0xFDFA, 0xFDFB, 0xFDFC, 0xFE70,
+      0xFE71, 0xFE72, 0xFE73, 0xFE74, 0xFE76, 0xFE77, 0xFE78, 0xFE79, 0xFE7A,
+      0xFE7B, 0xFE7C, 0xFE7D, 0xFE7E, 0xFE7F, 0xFE80, 0xFE81, 0xFE82, 0xFE83,
+      0xFE84, 0xFE85, 0xFE86, 0xFE87, 0xFE88, 0xFE89, 0xFE8A, 0xFE8B, 0xFE8C,
+      0xFE8D, 0xFE8E, 0xFE8F, 0xFE90, 0xFE91, 0xFE92, 0xFE93, 0xFE94, 0xFE95,
+      0xFE96, 0xFE97, 0xFE98, 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C, 0xFE9D, 0xFE9E,
+      0xFE9F, 0xFEA0, 0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4, 0xFEA5, 0xFEA6, 0xFEA7,
+      0xFEA8, 0xFEA9, 0xFEAA, 0xFEAB, 0xFEAC, 0xFEAD, 0xFEAE, 0xFEAF, 0xFEB0,
+      0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4, 0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8, 0xFEB9,
+      0xFEBA, 0xFEBB, 0xFEBC, 0xFEBD, 0xFEBE, 0xFEBF, 0xFEC0, 0xFEC1, 0xFEC2,
+      0xFEC3, 0xFEC4, 0xFEC5, 0xFEC6, 0xFEC7, 0xFEC8, 0xFEC9, 0xFECA, 0xFECB,
+      0xFECC, 0xFECD, 0xFECE, 0xFECF, 0xFED0, 0xFED1, 0xFED2, 0xFED3, 0xFED4,
+      0xFED5, 0xFED6, 0xFED7, 0xFED8, 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC, 0xFEDD,
+      0xFEDE, 0xFEDF, 0xFEE0, 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4, 0xFEE5, 0xFEE6,
+      0xFEE7, 0xFEE8, 0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC, 0xFEED, 0xFEEE, 0xFEEF,
+      0xFEF0, 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4, 0xFEF5, 0xFEF6, 0xFEF7, 0xFEF8,
+      0xFEF9, 0xFEFA, 0xFEFB, 0xFEFC, 0x10800, 0x10801, 0x10802, 0x10803,
+      0x10804, 0x10805, 0x10808, 0x1080A, 0x1080B, 0x1080C, 0x1080D, 0x1080E,
+      0x1080F, 0x10810, 0x10811, 0x10812, 0x10813, 0x10814, 0x10815, 0x10816,
+      0x10817, 0x10818, 0x10819, 0x1081A, 0x1081B, 0x1081C, 0x1081D, 0x1081E,
+      0x1081F, 0x10820, 0x10821, 0x10822, 0x10823, 0x10824, 0x10825, 0x10826,
+      0x10827, 0x10828, 0x10829, 0x1082A, 0x1082B, 0x1082C, 0x1082D, 0x1082E,
+      0x1082F, 0x10830, 0x10831, 0x10832, 0x10833, 0x10834, 0x10835, 0x10837,
+      0x10838, 0x1083C, 0x1083F, 0x10840, 0x10841, 0x10842, 0x10843, 0x10844,
+      0x10845, 0x10846, 0x10847, 0x10848, 0x10849, 0x1084A, 0x1084B, 0x1084C,
+      0x1084D, 0x1084E, 0x1084F, 0x10850, 0x10851, 0x10852, 0x10853, 0x10854,
+      0x10855, 0x10857, 0x10858, 0x10859, 0x1085A, 0x1085B, 0x1085C, 0x1085D,
+      0x1085E, 0x1085F, 0x10900, 0x10901, 0x10902, 0x10903, 0x10904, 0x10905,
+      0x10906, 0x10907, 0x10908, 0x10909, 0x1090A, 0x1090B, 0x1090C, 0x1090D,
+      0x1090E, 0x1090F, 0x10910, 0x10911, 0x10912, 0x10913, 0x10914, 0x10915,
+      0x10916, 0x10917, 0x10918, 0x10919, 0x1091A, 0x1091B, 0x10920, 0x10921,
+      0x10922, 0x10923, 0x10924, 0x10925, 0x10926, 0x10927, 0x10928, 0x10929,
+      0x1092A, 0x1092B, 0x1092C, 0x1092D, 0x1092E, 0x1092F, 0x10930, 0x10931,
+      0x10932, 0x10933, 0x10934, 0x10935, 0x10936, 0x10937, 0x10938, 0x10939,
+      0x1093F, 0x10980, 0x10981, 0x10982, 0x10983, 0x10984, 0x10985, 0x10986,
+      0x10987, 0x10988, 0x10989, 0x1098A, 0x1098B, 0x1098C, 0x1098D, 0x1098E,
+      0x1098F, 0x10990, 0x10991, 0x10992, 0x10993, 0x10994, 0x10995, 0x10996,
+      0x10997, 0x10998, 0x10999, 0x1099A, 0x1099B, 0x1099C, 0x1099D, 0x1099E,
+      0x1099F, 0x109A0, 0x109A1, 0x109A2, 0x109A3, 0x109A4, 0x109A5, 0x109A6,
+      0x109A7, 0x109A8, 0x109A9, 0x109AA, 0x109AB, 0x109AC, 0x109AD, 0x109AE,
+      0x109AF, 0x109B0, 0x109B1, 0x109B2, 0x109B3, 0x109B4, 0x109B5, 0x109B6,
+      0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A10, 0x10A11, 0x10A12, 0x10A13,
+      0x10A15, 0x10A16, 0x10A17, 0x10A19, 0x10A1A, 0x10A1B, 0x10A1C, 0x10A1D,
+      0x10A1E, 0x10A1F, 0x10A20, 0x10A21, 0x10A22, 0x10A23, 0x10A24, 0x10A25,
+      0x10A26, 0x10A27, 0x10A28, 0x10A29, 0x10A2A, 0x10A2B, 0x10A2C, 0x10A2D,
+      0x10A2E, 0x10A2F, 0x10A30, 0x10A31, 0x10A32, 0x10A33, 0x10A40, 0x10A41,
+      0x10A42, 0x10A43, 0x10A44, 0x10A45, 0x10A46, 0x10A47, 0x10A50, 0x10A51,
+      0x10A52, 0x10A53, 0x10A54, 0x10A55, 0x10A56, 0x10A57, 0x10A58, 0x10A60,
+      0x10A61, 0x10A62, 0x10A63, 0x10A64, 0x10A65, 0x10A66, 0x10A67, 0x10A68,
+      0x10A69, 0x10A6A, 0x10A6B, 0x10A6C, 0x10A6D, 0x10A6E, 0x10A6F, 0x10A70,
+      0x10A71, 0x10A72, 0x10A73, 0x10A74, 0x10A75, 0x10A76, 0x10A77, 0x10A78,
+      0x10A79, 0x10A7A, 0x10A7B, 0x10A7C, 0x10A7D, 0x10A7E, 0x10A7F, 0x10B00,
+      0x10B01, 0x10B02, 0x10B03, 0x10B04, 0x10B05, 0x10B06, 0x10B07, 0x10B08,
+      0x10B09, 0x10B0A, 0x10B0B, 0x10B0C, 0x10B0D, 0x10B0E, 0x10B0F, 0x10B10,
+      0x10B11, 0x10B12, 0x10B13, 0x10B14, 0x10B15, 0x10B16, 0x10B17, 0x10B18,
+      0x10B19, 0x10B1A, 0x10B1B, 0x10B1C, 0x10B1D, 0x10B1E, 0x10B1F, 0x10B20,
+      0x10B21, 0x10B22, 0x10B23, 0x10B24, 0x10B25, 0x10B26, 0x10B27, 0x10B28,
+      0x10B29, 0x10B2A, 0x10B2B, 0x10B2C, 0x10B2D, 0x10B2E, 0x10B2F, 0x10B30,
+      0x10B31, 0x10B32, 0x10B33, 0x10B34, 0x10B35, 0x10B40, 0x10B41, 0x10B42,
+      0x10B43, 0x10B44, 0x10B45, 0x10B46, 0x10B47, 0x10B48, 0x10B49, 0x10B4A,
+      0x10B4B, 0x10B4C, 0x10B4D, 0x10B4E, 0x10B4F, 0x10B50, 0x10B51, 0x10B52,
+      0x10B53, 0x10B54, 0x10B55, 0x10B58, 0x10B59, 0x10B5A, 0x10B5B, 0x10B5C,
+      0x10B5D, 0x10B5E, 0x10B5F, 0x10B60, 0x10B61, 0x10B62, 0x10B63, 0x10B64,
+      0x10B65, 0x10B66, 0x10B67, 0x10B68, 0x10B69, 0x10B6A, 0x10B6B, 0x10B6C,
+      0x10B6D, 0x10B6E, 0x10B6F, 0x10B70, 0x10B71, 0x10B72, 0x10B78, 0x10B79,
+      0x10B7A, 0x10B7B, 0x10B7C, 0x10B7D, 0x10B7E, 0x10B7F, 0x10C00, 0x10C01,
+      0x10C02, 0x10C03, 0x10C04, 0x10C05, 0x10C06, 0x10C07, 0x10C08, 0x10C09,
+      0x10C0A, 0x10C0B, 0x10C0C, 0x10C0D, 0x10C0E, 0x10C0F, 0x10C10, 0x10C11,
+      0x10C12, 0x10C13, 0x10C14, 0x10C15, 0x10C16, 0x10C17, 0x10C18, 0x10C19,
+      0x10C1A, 0x10C1B, 0x10C1C, 0x10C1D, 0x10C1E, 0x10C1F, 0x10C20, 0x10C21,
+      0x10C22, 0x10C23, 0x10C24, 0x10C25, 0x10C26, 0x10C27, 0x10C28, 0x10C29,
+      0x10C2A, 0x10C2B, 0x10C2C, 0x10C2D, 0x10C2E, 0x10C2F, 0x10C30, 0x10C31,
+      0x10C32, 0x10C33, 0x10C34, 0x10C35, 0x10C36, 0x10C37, 0x10C38, 0x10C39,
+      0x10C3A, 0x10C3B, 0x10C3C, 0x10C3D, 0x10C3E, 0x10C3F, 0x10C40, 0x10C41,
+      0x10C42, 0x10C43, 0x10C44, 0x10C45, 0x10C46, 0x10C47, 0x10C48, 0x1EE00,
+      0x1EE01, 0x1EE02, 0x1EE03, 0x1EE05, 0x1EE06, 0x1EE07, 0x1EE08, 0x1EE09,
+      0x1EE0A, 0x1EE0B, 0x1EE0C, 0x1EE0D, 0x1EE0E, 0x1EE0F, 0x1EE10, 0x1EE11,
+      0x1EE12, 0x1EE13, 0x1EE14, 0x1EE15, 0x1EE16, 0x1EE17, 0x1EE18, 0x1EE19,
+      0x1EE1A, 0x1EE1B, 0x1EE1C, 0x1EE1D, 0x1EE1E, 0x1EE1F, 0x1EE21, 0x1EE22,
+      0x1EE24, 0x1EE27, 0x1EE29, 0x1EE2A, 0x1EE2B, 0x1EE2C, 0x1EE2D, 0x1EE2E,
+      0x1EE2F, 0x1EE30, 0x1EE31, 0x1EE32, 0x1EE34, 0x1EE35, 0x1EE36, 0x1EE37,
+      0x1EE39, 0x1EE3B, 0x1EE42, 0x1EE47, 0x1EE49, 0x1EE4B, 0x1EE4D, 0x1EE4E,
+      0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE57, 0x1EE59, 0x1EE5B, 0x1EE5D,
+      0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE67, 0x1EE68, 0x1EE69, 0x1EE6A,
+      0x1EE6C, 0x1EE6D, 0x1EE6E, 0x1EE6F, 0x1EE70, 0x1EE71, 0x1EE72, 0x1EE74,
+      0x1EE75, 0x1EE76, 0x1EE77, 0x1EE79, 0x1EE7A, 0x1EE7B, 0x1EE7C, 0x1EE7E,
+      0x1EE80, 0x1EE81, 0x1EE82, 0x1EE83, 0x1EE84, 0x1EE85, 0x1EE86, 0x1EE87,
+      0x1EE88, 0x1EE89, 0x1EE8B, 0x1EE8C, 0x1EE8D, 0x1EE8E, 0x1EE8F, 0x1EE90,
+      0x1EE91, 0x1EE92, 0x1EE93, 0x1EE94, 0x1EE95, 0x1EE96, 0x1EE97, 0x1EE98,
+      0x1EE99, 0x1EE9A, 0x1EE9B, 0x1EEA1, 0x1EEA2, 0x1EEA3, 0x1EEA5, 0x1EEA6,
+      0x1EEA7, 0x1EEA8, 0x1EEA9, 0x1EEAB, 0x1EEAC, 0x1EEAD, 0x1EEAE, 0x1EEAF,
+      0x1EEB0, 0x1EEB1, 0x1EEB2, 0x1EEB3, 0x1EEB4, 0x1EEB5, 0x1EEB6, 0x1EEB7,
+      0x1EEB8, 0x1EEB9, 0x1EEBA, 0x1EEBB, 0x10FFFD];
+
+  function determineBidi(cueDiv) {
+    var nodeStack = [],
+        text = "",
+        charCode;
+
+    if (!cueDiv || !cueDiv.childNodes) {
+      return "ltr";
+    }
+
+    function pushNodes(nodeStack, node) {
+      for (var i = node.childNodes.length - 1; i >= 0; i--) {
+        nodeStack.push(node.childNodes[i]);
+      }
+    }
+
+    function nextTextNode(nodeStack) {
+      if (!nodeStack || !nodeStack.length) {
+        return null;
+      }
+
+      var node = nodeStack.pop(),
+          text = node.textContent || node.innerText;
+      if (text) {
+        // TODO: This should match all unicode type B characters (paragraph
+        // separator characters). See issue #115.
+        var m = text.match(/^.*(\n|\r)/);
+        if (m) {
+          nodeStack.length = 0;
+          return m[0];
+        }
+        return text;
+      }
+      if (node.tagName === "ruby") {
+        return nextTextNode(nodeStack);
+      }
+      if (node.childNodes) {
+        pushNodes(nodeStack, node);
+        return nextTextNode(nodeStack);
+      }
+    }
+
+    pushNodes(nodeStack, cueDiv);
+    while ((text = nextTextNode(nodeStack))) {
+      for (var i = 0; i < text.length; i++) {
+        charCode = text.charCodeAt(i);
+        for (var j = 0; j < strongRTLChars.length; j++) {
+          if (strongRTLChars[j] === charCode) {
+            return "rtl";
+          }
+        }
+      }
+    }
+    return "ltr";
+  }
+
+  function computeLinePos(cue) {
+    if (typeof cue.line === "number" &&
+        (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {
+      return cue.line;
+    }
+    if (!cue.track || !cue.track.textTrackList ||
+        !cue.track.textTrackList.mediaElement) {
+      return -1;
+    }
+    var track = cue.track,
+        trackList = track.textTrackList,
+        count = 0;
+    for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {
+      if (trackList[i].mode === "showing") {
+        count++;
+      }
+    }
+    return ++count * -1;
+  }
+
+  function StyleBox() {
+  }
+
+  // Apply styles to a div. If there is no div passed then it defaults to the
+  // div on 'this'.
+  StyleBox.prototype.applyStyles = function(styles, div) {
+    div = div || this.div;
+    for (var prop in styles) {
+      if (styles.hasOwnProperty(prop)) {
+        div.style[prop] = styles[prop];
+      }
+    }
+  };
+
+  StyleBox.prototype.formatStyle = function(val, unit) {
+    return val === 0 ? 0 : val + unit;
+  };
+
+  // Constructs the computed display state of the cue (a div). Places the div
+  // into the overlay which should be a block level element (usually a div).
+  function CueStyleBox(window, cue, styleOptions) {
+    var isIE8 = (/MSIE\s8\.0/).test(navigator.userAgent);
+    var color = "rgba(255, 255, 255, 1)";
+    var backgroundColor = "rgba(0, 0, 0, 0.8)";
+
+    if (isIE8) {
+      color = "rgb(255, 255, 255)";
+      backgroundColor = "rgb(0, 0, 0)";
+    }
+
+    StyleBox.call(this);
+    this.cue = cue;
+
+    // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will
+    // have inline positioning and will function as the cue background box.
+    this.cueDiv = parseContent(window, cue.text);
+    var styles = {
+      color: color,
+      backgroundColor: backgroundColor,
+      position: "relative",
+      left: 0,
+      right: 0,
+      top: 0,
+      bottom: 0,
+      display: "inline"
+    };
+
+    if (!isIE8) {
+      styles.writingMode = cue.vertical === "" ? "horizontal-tb"
+                                               : cue.vertical === "lr" ? "vertical-lr"
+                                                                       : "vertical-rl";
+      styles.unicodeBidi = "plaintext";
+    }
+    this.applyStyles(styles, this.cueDiv);
+
+    // Create an absolutely positioned div that will be used to position the cue
+    // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS
+    // mirrors of them except "middle" which is "center" in CSS.
+    this.div = window.document.createElement("div");
+    styles = {
+      textAlign: cue.align === "middle" ? "center" : cue.align,
+      font: styleOptions.font,
+      whiteSpace: "pre-line",
+      position: "absolute"
+    };
+
+    if (!isIE8) {
+      styles.direction = determineBidi(this.cueDiv);
+      styles.writingMode = cue.vertical === "" ? "horizontal-tb"
+                                               : cue.vertical === "lr" ? "vertical-lr"
+                                                                       : "vertical-rl".
+      stylesunicodeBidi =  "plaintext";
+    }
+
+    this.applyStyles(styles);
+
+    this.div.appendChild(this.cueDiv);
+
+    // Calculate the distance from the reference edge of the viewport to the text
+    // position of the cue box. The reference edge will be resolved later when
+    // the box orientation styles are applied.
+    var textPos = 0;
+    switch (cue.positionAlign) {
+    case "start":
+      textPos = cue.position;
+      break;
+    case "middle":
+      textPos = cue.position - (cue.size / 2);
+      break;
+    case "end":
+      textPos = cue.position - cue.size;
+      break;
+    }
+
+    // Horizontal box orientation; textPos is the distance from the left edge of the
+    // area to the left edge of the box and cue.size is the distance extending to
+    // the right from there.
+    if (cue.vertical === "") {
+      this.applyStyles({
+        left:  this.formatStyle(textPos, "%"),
+        width: this.formatStyle(cue.size, "%")
+      });
+    // Vertical box orientation; textPos is the distance from the top edge of the
+    // area to the top edge of the box and cue.size is the height extending
+    // downwards from there.
+    } else {
+      this.applyStyles({
+        top: this.formatStyle(textPos, "%"),
+        height: this.formatStyle(cue.size, "%")
+      });
+    }
+
+    this.move = function(box) {
+      this.applyStyles({
+        top: this.formatStyle(box.top, "px"),
+        bottom: this.formatStyle(box.bottom, "px"),
+        left: this.formatStyle(box.left, "px"),
+        right: this.formatStyle(box.right, "px"),
+        height: this.formatStyle(box.height, "px"),
+        width: this.formatStyle(box.width, "px")
+      });
+    };
+  }
+  CueStyleBox.prototype = _objCreate(StyleBox.prototype);
+  CueStyleBox.prototype.constructor = CueStyleBox;
+
+  // Represents the co-ordinates of an Element in a way that we can easily
+  // compute things with such as if it overlaps or intersects with another Element.
+  // Can initialize it with either a StyleBox or another BoxPosition.
+  function BoxPosition(obj) {
+    var isIE8 = (/MSIE\s8\.0/).test(navigator.userAgent);
+
+    // Either a BoxPosition was passed in and we need to copy it, or a StyleBox
+    // was passed in and we need to copy the results of 'getBoundingClientRect'
+    // as the object returned is readonly. All co-ordinate values are in reference
+    // to the viewport origin (top left).
+    var lh, height, width, top;
+    if (obj.div) {
+      height = obj.div.offsetHeight;
+      width = obj.div.offsetWidth;
+      top = obj.div.offsetTop;
+
+      var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&
+                  rects.getClientRects && rects.getClientRects();
+      obj = obj.div.getBoundingClientRect();
+      // In certain cases the outter div will be slightly larger then the sum of
+      // the inner div's lines. This could be due to bold text, etc, on some platforms.
+      // In this case we should get the average line height and use that. This will
+      // result in the desired behaviour.
+      lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)
+                 : 0;
+
+    }
+    this.left = obj.left;
+    this.right = obj.right;
+    this.top = obj.top || top;
+    this.height = obj.height || height;
+    this.bottom = obj.bottom || (top + (obj.height || height));
+    this.width = obj.width || width;
+    this.lineHeight = lh !== undefined ? lh : obj.lineHeight;
+
+    if (isIE8 && !this.lineHeight) {
+      this.lineHeight = 13;
+    }
+  }
+
+  // Move the box along a particular axis. Optionally pass in an amount to move
+  // the box. If no amount is passed then the default is the line height of the
+  // box.
+  BoxPosition.prototype.move = function(axis, toMove) {
+    toMove = toMove !== undefined ? toMove : this.lineHeight;
+    switch (axis) {
+    case "+x":
+      this.left += toMove;
+      this.right += toMove;
+      break;
+    case "-x":
+      this.left -= toMove;
+      this.right -= toMove;
+      break;
+    case "+y":
+      this.top += toMove;
+      this.bottom += toMove;
+      break;
+    case "-y":
+      this.top -= toMove;
+      this.bottom -= toMove;
+      break;
+    }
+  };
+
+  // Check if this box overlaps another box, b2.
+  BoxPosition.prototype.overlaps = function(b2) {
+    return this.left < b2.right &&
+           this.right > b2.left &&
+           this.top < b2.bottom &&
+           this.bottom > b2.top;
+  };
+
+  // Check if this box overlaps any other boxes in boxes.
+  BoxPosition.prototype.overlapsAny = function(boxes) {
+    for (var i = 0; i < boxes.length; i++) {
+      if (this.overlaps(boxes[i])) {
+        return true;
+      }
+    }
+    return false;
+  };
+
+  // Check if this box is within another box.
+  BoxPosition.prototype.within = function(container) {
+    return this.top >= container.top &&
+           this.bottom <= container.bottom &&
+           this.left >= container.left &&
+           this.right <= container.right;
+  };
+
+  // Check if this box is entirely within the container or it is overlapping
+  // on the edge opposite of the axis direction passed. For example, if "+x" is
+  // passed and the box is overlapping on the left edge of the container, then
+  // return true.
+  BoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {
+    switch (axis) {
+    case "+x":
+      return this.left < container.left;
+    case "-x":
+      return this.right > container.right;
+    case "+y":
+      return this.top < container.top;
+    case "-y":
+      return this.bottom > container.bottom;
+    }
+  };
+
+  // Find the percentage of the area that this box is overlapping with another
+  // box.
+  BoxPosition.prototype.intersectPercentage = function(b2) {
+    var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),
+        y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),
+        intersectArea = x * y;
+    return intersectArea / (this.height * this.width);
+  };
+
+  // Convert the positions from this box to CSS compatible positions using
+  // the reference container's positions. This has to be done because this
+  // box's positions are in reference to the viewport origin, whereas, CSS
+  // values are in referecne to their respective edges.
+  BoxPosition.prototype.toCSSCompatValues = function(reference) {
+    return {
+      top: this.top - reference.top,
+      bottom: reference.bottom - this.bottom,
+      left: this.left - reference.left,
+      right: reference.right - this.right,
+      height: this.height,
+      width: this.width
+    };
+  };
+
+  // Get an object that represents the box's position without anything extra.
+  // Can pass a StyleBox, HTMLElement, or another BoxPositon.
+  BoxPosition.getSimpleBoxPosition = function(obj) {
+    var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;
+    var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;
+    var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;
+
+    obj = obj.div ? obj.div.getBoundingClientRect() :
+                  obj.tagName ? obj.getBoundingClientRect() : obj;
+    var ret = {
+      left: obj.left,
+      right: obj.right,
+      top: obj.top || top,
+      height: obj.height || height,
+      bottom: obj.bottom || (top + (obj.height || height)),
+      width: obj.width || width
+    };
+    return ret;
+  };
+
+  // Move a StyleBox to its specified, or next best, position. The containerBox
+  // is the box that contains the StyleBox, such as a div. boxPositions are
+  // a list of other boxes that the styleBox can't overlap with.
+  function moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {
+
+    // Find the best position for a cue box, b, on the video. The axis parameter
+    // is a list of axis, the order of which, it will move the box along. For example:
+    // Passing ["+x", "-x"] will move the box first along the x axis in the positive
+    // direction. If it doesn't find a good position for it there it will then move
+    // it along the x axis in the negative direction.
+    function findBestPosition(b, axis) {
+      var bestPosition,
+          specifiedPosition = new BoxPosition(b),
+          percentage = 1; // Highest possible so the first thing we get is better.
+
+      for (var i = 0; i < axis.length; i++) {
+        while (b.overlapsOppositeAxis(containerBox, axis[i]) ||
+               (b.within(containerBox) && b.overlapsAny(boxPositions))) {
+          b.move(axis[i]);
+        }
+        // We found a spot where we aren't overlapping anything. This is our
+        // best position.
+        if (b.within(containerBox)) {
+          return b;
+        }
+        var p = b.intersectPercentage(containerBox);
+        // If we're outside the container box less then we were on our last try
+        // then remember this position as the best position.
+        if (percentage > p) {
+          bestPosition = new BoxPosition(b);
+          percentage = p;
+        }
+        // Reset the box position to the specified position.
+        b = new BoxPosition(specifiedPosition);
+      }
+      return bestPosition || specifiedPosition;
+    }
+
+    var boxPosition = new BoxPosition(styleBox),
+        cue = styleBox.cue,
+        linePos = computeLinePos(cue),
+        axis = [];
+
+    // If we have a line number to align the cue to.
+    if (cue.snapToLines) {
+      var size;
+      switch (cue.vertical) {
+      case "":
+        axis = [ "+y", "-y" ];
+        size = "height";
+        break;
+      case "rl":
+        axis = [ "+x", "-x" ];
+        size = "width";
+        break;
+      case "lr":
+        axis = [ "-x", "+x" ];
+        size = "width";
+        break;
+      }
+
+      var step = boxPosition.lineHeight,
+          position = step * Math.round(linePos),
+          maxPosition = containerBox[size] + step,
+          initialAxis = axis[0];
+
+      // If the specified intial position is greater then the max position then
+      // clamp the box to the amount of steps it would take for the box to
+      // reach the max position.
+      if (Math.abs(position) > maxPosition) {
+        position = position < 0 ? -1 : 1;
+        position *= Math.ceil(maxPosition / step) * step;
+      }
+
+      // If computed line position returns negative then line numbers are
+      // relative to the bottom of the video instead of the top. Therefore, we
+      // need to increase our initial position by the length or width of the
+      // video, depending on the writing direction, and reverse our axis directions.
+      if (linePos < 0) {
+        position += cue.vertical === "" ? containerBox.height : containerBox.width;
+        axis = axis.reverse();
+      }
+
+      // Move the box to the specified position. This may not be its best
+      // position.
+      boxPosition.move(initialAxis, position);
+
+    } else {
+      // If we have a percentage line value for the cue.
+      var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;
+
+      switch (cue.lineAlign) {
+      case "middle":
+        linePos -= (calculatedPercentage / 2);
+        break;
+      case "end":
+        linePos -= calculatedPercentage;
+        break;
+      }
+
+      // Apply initial line position to the cue box.
+      switch (cue.vertical) {
+      case "":
+        styleBox.applyStyles({
+          top: styleBox.formatStyle(linePos, "%")
+        });
+        break;
+      case "rl":
+        styleBox.applyStyles({
+          left: styleBox.formatStyle(linePos, "%")
+        });
+        break;
+      case "lr":
+        styleBox.applyStyles({
+          right: styleBox.formatStyle(linePos, "%")
+        });
+        break;
+      }
+
+      axis = [ "+y", "-x", "+x", "-y" ];
+
+      // Get the box position again after we've applied the specified positioning
+      // to it.
+      boxPosition = new BoxPosition(styleBox);
+    }
+
+    var bestPosition = findBestPosition(boxPosition, axis);
+    styleBox.move(bestPosition.toCSSCompatValues(containerBox));
+  }
+
+  function WebVTT() {
+    // Nothing
+  }
+
+  // Helper to allow strings to be decoded instead of the default binary utf8 data.
+  WebVTT.StringDecoder = function() {
+    return {
+      decode: function(data) {
+        if (!data) {
+          return "";
+        }
+        if (typeof data !== "string") {
+          throw new Error("Error - expected string data.");
+        }
+        return decodeURIComponent(encodeURIComponent(data));
+      }
+    };
+  };
+
+  WebVTT.convertCueToDOMTree = function(window, cuetext) {
+    if (!window || !cuetext) {
+      return null;
+    }
+    return parseContent(window, cuetext);
+  };
+
+  var FONT_SIZE_PERCENT = 0.05;
+  var FONT_STYLE = "sans-serif";
+  var CUE_BACKGROUND_PADDING = "1.5%";
+
+  // Runs the processing model over the cues and regions passed to it.
+  // @param overlay A block level element (usually a div) that the computed cues
+  //                and regions will be placed into.
+  WebVTT.processCues = function(window, cues, overlay) {
+    if (!window || !cues || !overlay) {
+      return null;
+    }
+
+    // Remove all previous children.
+    while (overlay.firstChild) {
+      overlay.removeChild(overlay.firstChild);
+    }
+
+    var paddedOverlay = window.document.createElement("div");
+    paddedOverlay.style.position = "absolute";
+    paddedOverlay.style.left = "0";
+    paddedOverlay.style.right = "0";
+    paddedOverlay.style.top = "0";
+    paddedOverlay.style.bottom = "0";
+    paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;
+    overlay.appendChild(paddedOverlay);
+
+    // Determine if we need to compute the display states of the cues. This could
+    // be the case if a cue's state has been changed since the last computation or
+    // if it has not been computed yet.
+    function shouldCompute(cues) {
+      for (var i = 0; i < cues.length; i++) {
+        if (cues[i].hasBeenReset || !cues[i].displayState) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    // We don't need to recompute the cues' display states. Just reuse them.
+    if (!shouldCompute(cues)) {
+      for (var i = 0; i < cues.length; i++) {
+        paddedOverlay.appendChild(cues[i].displayState);
+      }
+      return;
+    }
+
+    var boxPositions = [],
+        containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),
+        fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;
+    var styleOptions = {
+      font: fontSize + "px " + FONT_STYLE
+    };
+
+    (function() {
+      var styleBox, cue;
+
+      for (var i = 0; i < cues.length; i++) {
+        cue = cues[i];
+
+        // Compute the intial position and styles of the cue div.
+        styleBox = new CueStyleBox(window, cue, styleOptions);
+        paddedOverlay.appendChild(styleBox.div);
+
+        // Move the cue div to it's correct line position.
+        moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);
+
+        // Remember the computed div so that we don't have to recompute it later
+        // if we don't have too.
+        cue.displayState = styleBox.div;
+
+        boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));
+      }
+    })();
+  };
+
+  WebVTT.Parser = function(window, vttjs, decoder) {
+    if (!decoder) {
+      decoder = vttjs;
+      vttjs = {};
+    }
+    if (!vttjs) {
+      vttjs = {};
+    }
+
+    this.window = window;
+    this.vttjs = vttjs;
+    this.state = "INITIAL";
+    this.buffer = "";
+    this.decoder = decoder || new TextDecoder("utf8");
+    this.regionList = [];
+  };
+
+  WebVTT.Parser.prototype = {
+    // If the error is a ParsingError then report it to the consumer if
+    // possible. If it's not a ParsingError then throw it like normal.
+    reportOrThrowError: function(e) {
+      if (e instanceof ParsingError) {
+        this.onparsingerror && this.onparsingerror(e);
+      } else {
+        throw e;
+      }
+    },
+    parse: function (data) {
+      var self = this;
+
+      // If there is no data then we won't decode it, but will just try to parse
+      // whatever is in buffer already. This may occur in circumstances, for
+      // example when flush() is called.
+      if (data) {
+        // Try to decode the data that we received.
+        self.buffer += self.decoder.decode(data, {stream: true});
+      }
+
+      function collectNextLine() {
+        var buffer = self.buffer;
+        var pos = 0;
+        while (pos < buffer.length && buffer[pos] !== '\r' && buffer[pos] !== '\n') {
+          ++pos;
+        }
+        var line = buffer.substr(0, pos);
+        // Advance the buffer early in case we fail below.
+        if (buffer[pos] === '\r') {
+          ++pos;
+        }
+        if (buffer[pos] === '\n') {
+          ++pos;
+        }
+        self.buffer = buffer.substr(pos);
+        return line;
+      }
+
+      // 3.4 WebVTT region and WebVTT region settings syntax
+      function parseRegion(input) {
+        var settings = new Settings();
+
+        parseOptions(input, function (k, v) {
+          switch (k) {
+          case "id":
+            settings.set(k, v);
+            break;
+          case "width":
+            settings.percent(k, v);
+            break;
+          case "lines":
+            settings.integer(k, v);
+            break;
+          case "regionanchor":
+          case "viewportanchor":
+            var xy = v.split(',');
+            if (xy.length !== 2) {
+              break;
+            }
+            // We have to make sure both x and y parse, so use a temporary
+            // settings object here.
+            var anchor = new Settings();
+            anchor.percent("x", xy[0]);
+            anchor.percent("y", xy[1]);
+            if (!anchor.has("x") || !anchor.has("y")) {
+              break;
+            }
+            settings.set(k + "X", anchor.get("x"));
+            settings.set(k + "Y", anchor.get("y"));
+            break;
+          case "scroll":
+            settings.alt(k, v, ["up"]);
+            break;
+          }
+        }, /=/, /\s/);
+
+        // Create the region, using default values for any values that were not
+        // specified.
+        if (settings.has("id")) {
+          var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();
+          region.width = settings.get("width", 100);
+          region.lines = settings.get("lines", 3);
+          region.regionAnchorX = settings.get("regionanchorX", 0);
+          region.regionAnchorY = settings.get("regionanchorY", 100);
+          region.viewportAnchorX = settings.get("viewportanchorX", 0);
+          region.viewportAnchorY = settings.get("viewportanchorY", 100);
+          region.scroll = settings.get("scroll", "");
+          // Register the region.
+          self.onregion && self.onregion(region);
+          // Remember the VTTRegion for later in case we parse any VTTCues that
+          // reference it.
+          self.regionList.push({
+            id: settings.get("id"),
+            region: region
+          });
+        }
+      }
+
+      // 3.2 WebVTT metadata header syntax
+      function parseHeader(input) {
+        parseOptions(input, function (k, v) {
+          switch (k) {
+          case "Region":
+            // 3.3 WebVTT region metadata header syntax
+            parseRegion(v);
+            break;
+          }
+        }, /:/);
+      }
+
+      // 5.1 WebVTT file parsing.
+      try {
+        var line;
+        if (self.state === "INITIAL") {
+          // We can't start parsing until we have the first line.
+          if (!/\r\n|\n/.test(self.buffer)) {
+            return this;
+          }
+
+          line = collectNextLine();
+
+          var m = line.match(/^WEBVTT([ \t].*)?$/);
+          if (!m || !m[0]) {
+            throw new ParsingError(ParsingError.Errors.BadSignature);
+          }
+
+          self.state = "HEADER";
+        }
+
+        var alreadyCollectedLine = false;
+        while (self.buffer) {
+          // We can't parse a line until we have the full line.
+          if (!/\r\n|\n/.test(self.buffer)) {
+            return this;
+          }
+
+          if (!alreadyCollectedLine) {
+            line = collectNextLine();
+          } else {
+            alreadyCollectedLine = false;
+          }
+
+          switch (self.state) {
+          case "HEADER":
+            // 13-18 - Allow a header (metadata) under the WEBVTT line.
+            if (/:/.test(line)) {
+              parseHeader(line);
+            } else if (!line) {
+              // An empty line terminates the header and starts the body (cues).
+              self.state = "ID";
+            }
+            continue;
+          case "NOTE":
+            // Ignore NOTE blocks.
+            if (!line) {
+              self.state = "ID";
+            }
+            continue;
+          case "ID":
+            // Check for the start of NOTE blocks.
+            if (/^NOTE($|[ \t])/.test(line)) {
+              self.state = "NOTE";
+              break;
+            }
+            // 19-29 - Allow any number of line terminators, then initialize new cue values.
+            if (!line) {
+              continue;
+            }
+            self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, "");
+            self.state = "CUE";
+            // 30-39 - Check if self line contains an optional identifier or timing data.
+            if (line.indexOf("-->") === -1) {
+              self.cue.id = line;
+              continue;
+            }
+            // Process line as start of a cue.
+            /*falls through*/
+          case "CUE":
+            // 40 - Collect cue timings and settings.
+            try {
+              parseCue(line, self.cue, self.regionList);
+            } catch (e) {
+              self.reportOrThrowError(e);
+              // In case of an error ignore rest of the cue.
+              self.cue = null;
+              self.state = "BADCUE";
+              continue;
+            }
+            self.state = "CUETEXT";
+            continue;
+          case "CUETEXT":
+            var hasSubstring = line.indexOf("-->") !== -1;
+            // 34 - If we have an empty line then report the cue.
+            // 35 - If we have the special substring '-->' then report the cue,
+            // but do not collect the line as we need to process the current
+            // one as a new cue.
+            if (!line || hasSubstring && (alreadyCollectedLine = true)) {
+              // We are done parsing self cue.
+              self.oncue && self.oncue(self.cue);
+              self.cue = null;
+              self.state = "ID";
+              continue;
+            }
+            if (self.cue.text) {
+              self.cue.text += "\n";
+            }
+            self.cue.text += line;
+            continue;
+          case "BADCUE": // BADCUE
+            // 54-62 - Collect and discard the remaining cue.
+            if (!line) {
+              self.state = "ID";
+            }
+            continue;
+          }
+        }
+      } catch (e) {
+        self.reportOrThrowError(e);
+
+        // If we are currently parsing a cue, report what we have.
+        if (self.state === "CUETEXT" && self.cue && self.oncue) {
+          self.oncue(self.cue);
+        }
+        self.cue = null;
+        // Enter BADWEBVTT state if header was not parsed correctly otherwise
+        // another exception occurred so enter BADCUE state.
+        self.state = self.state === "INITIAL" ? "BADWEBVTT" : "BADCUE";
+      }
+      return this;
+    },
+    flush: function () {
+      var self = this;
+      try {
+        // Finish decoding the stream.
+        self.buffer += self.decoder.decode();
+        // Synthesize the end of the current cue or region.
+        if (self.cue || self.state === "HEADER") {
+          self.buffer += "\n\n";
+          self.parse();
+        }
+        // If we've flushed, parsed, and we're still on the INITIAL state then
+        // that means we don't have enough of the stream to parse the first
+        // line.
+        if (self.state === "INITIAL") {
+          throw new ParsingError(ParsingError.Errors.BadSignature);
+        }
+      } catch(e) {
+        self.reportOrThrowError(e);
+      }
+      self.onflush && self.onflush();
+      return this;
+    }
+  };
+
+  global.WebVTT = WebVTT;
+
+}(this, (this.vttjs || {})));
diff --git a/static/videojs/video.min.js b/static/videojs/video.min.js
new file mode 100644
index 0000000..a0ca4c7
--- /dev/null
+++ b/static/videojs/video.min.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Video.js 5.12.1 <http://videojs.com/>
+ * Copyright Brightcove, Inc. <https://www.brightcove.com/>
+ * Available under Apache License Version 2.0
+ * <https://github.com/videojs/video.js/blob/master/LICENSE>
+ *
+ * Includes vtt.js <https://github.com/mozilla/vtt.js>
+ * Available under Apache License Version 2.0
+ * <https://github.com/mozilla/vtt.js/blob/master/LICENSE>
+ */
+!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.videojs=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./button.js"),i=d(h),j=a("./component.js"),k=d(j),l=function(a){function b(c,d){return e(this,b),f(this,a.call(this,c,d))}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(i["default"]);l.prototype.controlText_="Play Video",k["default"].registerComponent("BigPlayButton",l),c["default"]=l},{"./button.js":2,"./component.js":5}],2:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./clickable-component.js"),i=d(h),j=a("./component"),k=d(j),l=a("./utils/log.js"),m=d(l),n=a("object.assign"),o=d(n),p=function(a){function b(c,d){return e(this,b),f(this,a.call(this,c,d))}return g(b,a),b.prototype.createEl=function(){var a=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];b=o["default"]({className:this.buildCSSClass()},b),"button"!==a&&(m["default"].warn("Creating a Button with an HTML element of "+a+" is deprecated; use ClickableComponent instead."),b=o["default"]({tabIndex:0},b),c=o["default"]({role:"button"},c)),c=o["default"]({type:"button","aria-live":"polite"},c);var d=k["default"].prototype.createEl.call(this,a,b,c);return this.createControlTextEl(d),d},b.prototype.addChild=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=this.constructor.name;return m["default"].warn("Adding an actionable (user controllable) child to a Button ("+c+") is not supported; use a ClickableComponent instead."),k["default"].prototype.addChild.call(this,a,b)},b.prototype.handleKeyPress=function(b){32!==b.which&&13!==b.which&&a.prototype.handleKeyPress.call(this,b)},b}(i["default"]);k["default"].registerComponent("Button",p),c["default"]=p},{"./clickable-component.js":3,"./component":5,"./utils/log.js":85,"object.assign":136}],3:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./component"),j=e(i),k=a("./utils/dom.js"),l=d(k),m=a("./utils/events.js"),n=d(m),o=a("./utils/fn.js"),p=d(o),q=a("./utils/log.js"),r=e(q),s=a("global/document"),t=e(s),u=a("object.assign"),v=e(u),w=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.emitTapEvents(),e.on("tap",e.handleClick),e.on("click",e.handleClick),e.on("focus",e.handleFocus),e.on("blur",e.handleBlur),e}return h(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];c=v["default"]({className:this.buildCSSClass(),tabIndex:0},c),"button"===b&&r["default"].error("Creating a ClickableComponent with an HTML element of "+b+" is not supported; use a Button instead."),d=v["default"]({role:"button","aria-live":"polite"},d);var e=a.prototype.createEl.call(this,b,c,d);return this.createControlTextEl(e),e},b.prototype.createControlTextEl=function(a){return this.controlTextEl_=l.createEl("span",{className:"vjs-control-text"}),a&&a.appendChild(this.controlTextEl_),this.controlText(this.controlText_,a),this.controlTextEl_},b.prototype.controlText=function(a){var b=arguments.length<=1||void 0===arguments[1]?this.el():arguments[1];if(!a)return this.controlText_||"Need Text";var c=this.localize(a);return this.controlText_=a,this.controlTextEl_.innerHTML=c,b.setAttribute("title",c),this},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.addChild=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return a.prototype.addChild.call(this,b,c)},b.prototype.enable=function(){return this.removeClass("vjs-disabled"),this.el_.setAttribute("aria-disabled","false"),this},b.prototype.disable=function(){return this.addClass("vjs-disabled"),this.el_.setAttribute("aria-disabled","true"),this},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){n.on(t["default"],"keydown",p.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(b){32===b.which||13===b.which?(b.preventDefault(),this.handleClick(b)):a.prototype.handleKeyPress&&a.prototype.handleKeyPress.call(this,b)},b.prototype.handleBlur=function(){n.off(t["default"],"keydown",p.bind(this,this.handleKeyPress))},b}(j["default"]);j["default"].registerComponent("ClickableComponent",w),c["default"]=w},{"./component":5,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/log.js":85,"global/document":92,"object.assign":136}],4:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./button"),i=d(h),j=a("./component"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.controlText(d&&d.controlText||g.localize("Close")),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-close-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.trigger({type:"close",bubbles:!1})},b}(i["default"]);k["default"].registerComponent("CloseButton",l),c["default"]=l},{"./button":2,"./component":5}],5:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("global/window"),h=e(g),i=a("./utils/dom.js"),j=d(i),k=a("./utils/fn.js"),l=d(k),m=a("./utils/guid.js"),n=d(m),o=a("./utils/events.js"),p=d(o),q=a("./utils/log.js"),r=e(q),s=a("./utils/to-title-case.js"),t=e(s),u=a("./utils/merge-options.js"),v=e(u),w=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=v["default"]({},this.options_),c=this.options_=v["default"](this.options_,c),this.id_=c.id||c.el&&c.el.id,!this.id_){var e=b&&b.id&&b.id()||"no_player";this.id_=e+"_component_"+n.newGUID()}this.name_=c.name||null,c.el?this.el_=c.el:c.createEl!==!1&&(this.el_=this.createEl()),this.children_=[],this.childIndex_={},this.childNameIndex_={},c.initChildren!==!1&&this.initChildren(),this.ready(d),c.reportTouchActivity!==!1&&this.enableTouchActivity()}return a.prototype.dispose=function(){if(this.trigger({type:"dispose",bubbles:!1}),this.children_)for(var a=this.children_.length-1;a>=0;a--)this.children_[a].dispose&&this.children_[a].dispose();this.children_=null,this.childIndex_=null,this.childNameIndex_=null,this.off(),this.el_.parentNode&&this.el_.parentNode.removeChild(this.el_),j.removeElData(this.el_),this.el_=null},a.prototype.player=function(){return this.player_},a.prototype.options=function(a){return r["default"].warn("this.options() has been deprecated and will be moved to the constructor in 6.0"),a?(this.options_=v["default"](this.options_,a),this.options_):this.options_},a.prototype.el=function(){return this.el_},a.prototype.createEl=function(a,b,c){return j.createEl(a,b,c)},a.prototype.localize=function(a){var b=this.player_.language&&this.player_.language(),c=this.player_.languages&&this.player_.languages();if(!b||!c)return a;var d=c[b];if(d&&d[a])return d[a];var e=b.split("-")[0],f=c[e];return f&&f[a]?f[a]:a},a.prototype.contentEl=function(){return this.contentEl_||this.el_},a.prototype.id=function(){return this.id_},a.prototype.name=function(){return this.name_},a.prototype.children=function(){return this.children_},a.prototype.getChildById=function(a){return this.childIndex_[a]},a.prototype.getChild=function(a){return this.childNameIndex_[a]},a.prototype.addChild=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?this.children_.length:arguments[2],e=void 0,f=void 0;if("string"==typeof b){f=b,c||(c={}),c===!0&&(r["default"].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`."),c={});var g=c.componentClass||t["default"](f);c.name=f;var h=a.getComponent(g);if(!h)throw new Error("Component "+g+" does not exist");if("function"!=typeof h)return null;e=new h(this.player_||this,c)}else e=b;if(this.children_.splice(d,0,e),"function"==typeof e.id&&(this.childIndex_[e.id()]=e),f=f||e.name&&e.name(),f&&(this.childNameIndex_[f]=e),"function"==typeof e.el&&e.el()){var i=this.contentEl().children,j=i[d]||null;this.contentEl().insertBefore(e.el(),j)}return e},a.prototype.removeChild=function(a){if("string"==typeof a&&(a=this.getChild(a)),a&&this.children_){for(var b=!1,c=this.children_.length-1;c>=0;c--)if(this.children_[c]===a){b=!0,this.children_.splice(c,1);break}if(b){this.childIndex_[a.id()]=null,this.childNameIndex_[a.name()]=null;var d=a.el();d&&d.parentNode===this.contentEl()&&this.contentEl().removeChild(a.el())}}},a.prototype.initChildren=function(){var b=this,c=this.options_.children;c&&!function(){var d=b.options_,e=function(a){var c=a.name,e=a.opts;if(void 0!==d[c]&&(e=d[c]),e!==!1){e===!0&&(e={}),e.playerOptions=b.options_.playerOptions;var f=b.addChild(c,e);f&&(b[c]=f)}},f=void 0,g=a.getComponent("Tech");f=Array.isArray(c)?c:Object.keys(c),f.concat(Object.keys(b.options_).filter(function(a){return!f.some(function(b){return"string"==typeof b?a===b:a===b.name})})).map(function(a){var d=void 0,e=void 0;return"string"==typeof a?(d=a,e=c[d]||b.options_[d]||{}):(d=a.name,e=a),{name:d,opts:e}}).filter(function(b){var c=a.getComponent(b.opts.componentClass||t["default"](b.name));return c&&!g.isTech(c)}).forEach(e)}()},a.prototype.buildCSSClass=function(){return""},a.prototype.on=function(a,b,c){var d=this;return"string"==typeof a||Array.isArray(a)?p.on(this.el_,a,l.bind(this,b)):!function(){var e=a,f=b,g=l.bind(d,c),h=function(){return d.off(e,f,g)};h.guid=g.guid,d.on("dispose",h);var i=function(){return d.off("dispose",h)};i.guid=g.guid,a.nodeName?(p.on(e,f,g),p.on(e,"dispose",i)):"function"==typeof a.on&&(e.on(f,g),e.on("dispose",i))}(),this},a.prototype.off=function(a,b,c){if(!a||"string"==typeof a||Array.isArray(a))p.off(this.el_,a,b);else{var d=a,e=b,f=l.bind(this,c);this.off("dispose",f),a.nodeName?(p.off(d,e,f),p.off(d,"dispose",f)):(d.off(e,f),d.off("dispose",f))}return this},a.prototype.one=function(a,b,c){var d=this,e=arguments;return"string"==typeof a||Array.isArray(a)?p.one(this.el_,a,l.bind(this,b)):!function(){var f=a,g=b,h=l.bind(d,c),i=function j(){d.off(f,g,j),h.apply(null,e)};i.guid=h.guid,d.on(f,g,i)}(),this},a.prototype.trigger=function(a,b){return p.trigger(this.el_,a,b),this},a.prototype.ready=function(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];return a&&(this.isReady_?b?a.call(this):this.setTimeout(a,1):(this.readyQueue_=this.readyQueue_||[],this.readyQueue_.push(a))),this},a.prototype.triggerReady=function(){this.isReady_=!0,this.setTimeout(function(){var a=this.readyQueue_;this.readyQueue_=[],a&&a.length>0&&a.forEach(function(a){a.call(this)},this),this.trigger("ready")},1)},a.prototype.$=function(a,b){return j.$(a,b||this.contentEl())},a.prototype.$$=function(a,b){return j.$$(a,b||this.contentEl())},a.prototype.hasClass=function(a){return j.hasElClass(this.el_,a)},a.prototype.addClass=function(a){return j.addElClass(this.el_,a),this},a.prototype.removeClass=function(a){return j.removeElClass(this.el_,a),this},a.prototype.toggleClass=function(a,b){return j.toggleElClass(this.el_,a,b),this},a.prototype.show=function(){return this.removeClass("vjs-hidden"),this},a.prototype.hide=function(){return this.addClass("vjs-hidden"),this},a.prototype.lockShowing=function(){return this.addClass("vjs-lock-showing"),this},a.prototype.unlockShowing=function(){return this.removeClass("vjs-lock-showing"),this},a.prototype.width=function(a,b){return this.dimension("width",a,b)},a.prototype.height=function(a,b){return this.dimension("height",a,b)},a.prototype.dimensions=function(a,b){return this.width(a,!0).height(b)},a.prototype.dimension=function(a,b,c){if(void 0!==b)return(null===b||b!==b)&&(b=0),this.el_.style[a]=-1!==(""+b).indexOf("%")||-1!==(""+b).indexOf("px")?b:"auto"===b?"":b+"px",c||this.trigger("resize"),this;if(!this.el_)return 0;var d=this.el_.style[a],e=d.indexOf("px");return-1!==e?parseInt(d.slice(0,e),10):parseInt(this.el_["offset"+t["default"](a)],10)},a.prototype.currentDimension=function(a){var b=0;if("width"!==a&&"height"!==a)throw new Error("currentDimension only accepts width or height value");if("function"==typeof h["default"].getComputedStyle){var c=h["default"].getComputedStyle(this.el_);b=c.getPropertyValue(a)||c[a]}else if(this.el_.currentStyle){var d="offset"+t["default"](a);b=this.el_[d]}return b=parseFloat(b)},a.prototype.currentDimensions=function(){return{width:this.currentDimension("width"),height:this.currentDimension("height")}},a.prototype.currentWidth=function(){return this.currentDimension("width")},a.prototype.currentHeight=function(){return this.currentDimension("height")},a.prototype.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b={pageX:c.touches[0].pageX,pageY:c.touches[0].pageY},a=(new Date).getTime(),e=!0)}),this.on("touchmove",function(a){if(a.touches.length>1)e=!1;else if(b){var d=a.touches[0].pageX-b.pageX,f=a.touches[0].pageY-b.pageY,g=Math.sqrt(d*d+f*f);g>c&&(e=!1)}});var f=function(){e=!1};this.on("touchleave",f),this.on("touchcancel",f),this.on("touchend",function(c){if(b=null,e===!0){var f=(new Date).getTime()-a;d>f&&(c.preventDefault(),this.trigger("tap"))}})},a.prototype.enableTouchActivity=function(){if(this.player()&&this.player().reportUserActivity){var a=l.bind(this.player(),this.player().reportUserActivity),b=void 0;this.on("touchstart",function(){a(),this.clearInterval(b),b=this.setInterval(a,250)});var c=function(){a(),this.clearInterval(b)};this.on("touchmove",a),this.on("touchend",c),this.on("touchcancel",c)}},a.prototype.setTimeout=function(a,b){a=l.bind(this,a);var c=h["default"].setTimeout(a,b),d=function(){this.clearTimeout(c)};return d.guid="vjs-timeout-"+c,this.on("dispose",d),c},a.prototype.clearTimeout=function(a){h["default"].clearTimeout(a);var b=function(){};return b.guid="vjs-timeout-"+a,this.off("dispose",b),a},a.prototype.setInterval=function(a,b){a=l.bind(this,a);var c=h["default"].setInterval(a,b),d=function(){this.clearInterval(c)};return d.guid="vjs-interval-"+c,this.on("dispose",d),c},a.prototype.clearInterval=function(a){h["default"].clearInterval(a);var b=function(){};return b.guid="vjs-interval-"+a,this.off("dispose",b),a},a.registerComponent=function(b,c){return a.components_||(a.components_={}),a.components_[b]=c,c},a.getComponent=function(b){return a.components_&&a.components_[b]?a.components_[b]:h["default"]&&h["default"].videojs&&h["default"].videojs[b]?(r["default"].warn("The "+b+" component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)"),h["default"].videojs[b]):void 0},a.extend=function(b){b=b||{},r["default"].warn("Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead");var c=b.init||b.init||this.prototype.init||this.prototype.init||function(){},d=function(){c.apply(this,arguments)};d.prototype=Object.create(this.prototype),d.prototype.constructor=d,d.extend=a.extend;for(var e in b)b.hasOwnProperty(e)&&(d.prototype[e]=b[e]);return d},a}();w.registerComponent("Component",w),c["default"]=w},{"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/to-title-case.js":89,"global/window":93}],6:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=a("./audio-track-menu-item.js"),m=d(l),n=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b),d.tracks=c.audioTracks&&c.audioTracks();var g=f(this,a.call(this,c,d));return g.el_.setAttribute("aria-label","Audio Menu"),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-audio-button "+a.prototype.buildCSSClass.call(this)},b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],b=this.player_.audioTracks&&this.player_.audioTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];a.push(new m["default"](this.player_,{track:d,selectable:!0}))}return a},b}(i["default"]);n.prototype.controlText_="Audio Track",k["default"].registerComponent("AudioTrackButton",n),c["default"]=n},{"../../component.js":5,"../track-button.js":36,"./audio-track-menu-item.js":7}],7:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../menu/menu-item.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=d.track,h=c.audioTracks();d.label=e.label||e.language||"Unknown",d.selected=e.enabled;var i=g(this,a.call(this,c,d));return i.track=e,h&&!function(){var a=n.bind(i,i.handleTracksChange);h.addEventListener("change",a),i.on("dispose",function(){h.removeEventListener("change",a)})}(),i}return h(b,a),b.prototype.handleClick=function(b){var c=this.player_.audioTracks();if(a.prototype.handleClick.call(this,b),c)for(var d=0;d<c.length;d++){var e=c[d];e.enabled=e===this.track}},b.prototype.handleTracksChange=function(){this.selected(this.track.enabled)},b}(j["default"]);l["default"].registerComponent("AudioTrackMenuItem",o),c["default"]=o},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],8:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component.js"),i=d(h);a("./play-toggle.js"),a("./time-controls/current-time-display.js"),a("./time-controls/duration-display.js"),a("./time-controls/time-divider.js"),a("./time-controls/remaining-time-display.js"),a("./live-display.js"),a("./progress-control/progress-control.js"),a("./fullscreen-toggle.js"),a("./volume-control/volume-control.js"),a("./volume-menu-button.js"),a("./mute-toggle.js"),a("./text-track-controls/chapters-button.js"),a("./text-track-controls/descriptions-button.js"),a("./text-track-controls/subtitles-button.js"),a("./text-track-controls/captions-button.js"),a("./audio-track-controls/audio-track-button.js"),a("./playback-rate-menu/playback-rate-menu-button.js"),a("./spacer-controls/custom-control-spacer.js");var j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar",dir:"ltr"},{role:"group"})},b}(i["default"]);j.prototype.options_={children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","chaptersButton","descriptionsButton","subtitlesButton","captionsButton","audioTrackButton","fullscreenToggle"]},i["default"].registerComponent("ControlBar",j),c["default"]=j},{"../component.js":5,"./audio-track-controls/audio-track-button.js":6,"./fullscreen-toggle.js":9,"./live-display.js":10,"./mute-toggle.js":11,"./play-toggle.js":12,"./playback-rate-menu/playback-rate-menu-button.js":13,"./progress-control/progress-control.js":18,"./spacer-controls/custom-control-spacer.js":21,"./text-track-controls/captions-button.js":24,"./text-track-controls/chapters-button.js":25,"./text-track-controls/descriptions-button.js":27,"./text-track-controls/subtitles-button.js":29,"./time-controls/current-time-display.js":32,"./time-controls/duration-display.js":33,"./time-controls/remaining-time-display.js":34,"./time-controls/time-divider.js":35,"./volume-control/volume-control.js":38,"./volume-menu-button.js":40}],9:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button.js"),i=d(h),j=a("../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.on(c,"fullscreenchange",g.handleFullscreenChange),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleFullscreenChange=function(){this.controlText(this.player_.isFullscreen()?"Non-Fullscreen":"Fullscreen")},b.prototype.handleClick=function(){this.player_.isFullscreen()?this.player_.exitFullscreen():this.player_.requestFullscreen()},b}(i["default"]);l.prototype.controlText_="Fullscreen",k["default"].registerComponent("FullscreenToggle",l),c["default"]=l},{"../button.js":2,"../component.js":5}],10:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateShowing(),e.on(e.player(),"durationchange",e.updateShowing),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-live-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Stream Type")+"</span>"+this.localize("LIVE")},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateShowing=function(){this.player().duration()===1/0?this.show():this.hide()},b}(j["default"]);j["default"].registerComponent("LiveDisplay",m),c["default"]=m},{"../component":5,"../utils/dom.js":80}],11:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../button"),j=e(i),k=a("../component"),l=e(k),m=a("../utils/dom.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"volumechange",e.update),c.tech_&&c.tech_.featuresVolumeControl===!1&&e.addClass("vjs-hidden"),e.on(c,"loadstart",function(){this.update(),c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}),e}return h(b,a),b.prototype.buildCSSClass=function(){return"vjs-mute-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.muted(this.player_.muted()?!1:!0)},b.prototype.update=function(){var a=this.player_.volume(),b=3;0===a||this.player_.muted()?b=0:.33>a?b=1:.67>a&&(b=2);var c=this.player_.muted()?"Unmute":"Mute";this.controlText()!==c&&this.controlText(c);for(var d=0;4>d;d++)n.removeElClass(this.el_,"vjs-vol-"+d);n.addElClass(this.el_,"vjs-vol-"+b)},b}(j["default"]);o.prototype.controlText_="Mute",l["default"].registerComponent("MuteToggle",o),c["default"]=o},{"../button":2,"../component":5,"../utils/dom.js":80}],12:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../button.js"),i=d(h),j=a("../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.on(c,"play",g.handlePlay),g.on(c,"pause",g.handlePause),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-play-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},b.prototype.handlePlay=function(){this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.controlText("Pause")},b.prototype.handlePause=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.controlText("Play")},b}(i["default"]);l.prototype.controlText_="Play",k["default"].registerComponent("PlayToggle",l),c["default"]=l},{"../button.js":2,"../component.js":5}],13:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+
+return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../menu/menu-button.js"),j=e(i),k=a("../../menu/menu.js"),l=e(k),m=a("./playback-rate-menu-item.js"),n=e(m),o=a("../../component.js"),p=e(o),q=a("../../utils/dom.js"),r=d(q),s=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateVisibility(),e.updateLabel(),e.on(c,"loadstart",e.updateVisibility),e.on(c,"ratechange",e.updateLabel),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=r.createEl("div",{className:"vjs-playback-rate-value",innerHTML:1}),b.appendChild(this.labelEl_),b},b.prototype.buildCSSClass=function(){return"vjs-playback-rate "+a.prototype.buildCSSClass.call(this)},b.prototype.createMenu=function(){var a=new l["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new n["default"](this.player(),{rate:b[c]+"x"}));return a},b.prototype.updateARIAAttributes=function(){this.el().setAttribute("aria-valuenow",this.player().playbackRate())},b.prototype.handleClick=function(){for(var a=this.player().playbackRate(),b=this.playbackRates(),c=b[0],d=0;d<b.length;d++)if(b[d]>a){c=b[d];break}this.player().playbackRate(c)},b.prototype.playbackRates=function(){return this.options_.playbackRates||this.options_.playerOptions&&this.options_.playerOptions.playbackRates},b.prototype.playbackRateSupported=function(){return this.player().tech_&&this.player().tech_.featuresPlaybackRate&&this.playbackRates()&&this.playbackRates().length>0},b.prototype.updateVisibility=function(){this.playbackRateSupported()?this.removeClass("vjs-hidden"):this.addClass("vjs-hidden")},b.prototype.updateLabel=function(){this.playbackRateSupported()&&(this.labelEl_.innerHTML=this.player().playbackRate()+"x")},b}(j["default"]);s.prototype.controlText_="Playback Rate",p["default"].registerComponent("PlaybackRateMenuButton",s),c["default"]=s},{"../../component.js":5,"../../menu/menu-button.js":47,"../../menu/menu.js":49,"../../utils/dom.js":80,"./playback-rate-menu-item.js":14}],14:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../menu/menu-item.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b);var g=d.rate,h=parseFloat(g,10);d.label=g,d.selected=1===h;var i=f(this,a.call(this,c,d));return i.label=g,i.rate=h,i.on(c,"ratechange",i.update),i}return g(b,a),b.prototype.handleClick=function(){a.prototype.handleClick.call(this),this.player().playbackRate(this.rate)},b.prototype.update=function(){this.selected(this.player().playbackRate()===this.rate)},b}(i["default"]);l.prototype.contentElType="button",k["default"].registerComponent("PlaybackRateMenuItem",l),c["default"]=l},{"../../component.js":5,"../../menu/menu-item.js":48}],15:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"progress",e.update),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Loaded")+"</span>: 0%</span>"})},b.prototype.update=function(){var a=this.player_.buffered(),b=this.player_.duration(),c=this.player_.bufferedEnd(),d=this.el_.children,e=function(a,b){var c=a/b||0;return 100*(c>=1?1:c)+"%"};this.el_.style.width=e(c,b);for(var f=0;f<a.length;f++){var g=a.start(f),h=a.end(f),i=d[f];i||(i=this.el_.appendChild(l.createEl())),i.style.left=e(g,c),i.style.width=e(h-g,c)}for(var j=d.length;j>a.length;j--)this.el_.removeChild(d[j-1])},b}(j["default"]);j["default"].registerComponent("LoadProgressBar",m),c["default"]=m},{"../../component.js":5,"../../utils/dom.js":80}],16:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("global/window"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/dom.js"),n=d(m),o=a("../../utils/fn.js"),p=d(o),q=a("../../utils/format-time.js"),r=e(q),s=a("lodash-compat/function/throttle"),t=e(s),u=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return d.playerOptions&&d.playerOptions.controlBar&&d.playerOptions.controlBar.progressControl&&d.playerOptions.controlBar.progressControl.keepTooltipsInside&&(e.keepTooltipsInside=d.playerOptions.controlBar.progressControl.keepTooltipsInside),e.keepTooltipsInside&&(e.tooltip=n.createEl("div",{className:"vjs-time-tooltip"}),e.el().appendChild(e.tooltip),e.addClass("vjs-keep-tooltips-inside")),e.update(0,0),c.on("ready",function(){e.on(c.controlBar.progressControl.el(),"mousemove",t["default"](p.bind(e,e.handleMouseMove),25))}),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-mouse-display"})},b.prototype.handleMouseMove=function(a){var b=this.player_.duration(),c=this.calculateDistance(a)*b,d=a.pageX-n.findElPosition(this.el().parentNode).left;this.update(c,d)},b.prototype.update=function(a,b){var c=r["default"](a,this.player_.duration());if(this.el().style.left=b+"px",this.el().setAttribute("data-current-time",c),this.keepTooltipsInside){var d=this.clampPosition_(b),e=b-d+1,f=parseFloat(j["default"].getComputedStyle(this.tooltip).width),g=f/2;this.tooltip.innerHTML=c,this.tooltip.style.right="-"+(g-e)+"px"}},b.prototype.calculateDistance=function(a){return n.getPointerPosition(this.el().parentNode,a).x},b.prototype.clampPosition_=function(a){if(!this.keepTooltipsInside)return a;var b=parseFloat(j["default"].getComputedStyle(this.player().el()).width),c=parseFloat(j["default"].getComputedStyle(this.tooltip).width),d=c/2,e=a;return d>a?e=Math.ceil(d):a>b-d&&(e=Math.floor(b-d)),e},b}(l["default"]);l["default"].registerComponent("MouseTimeDisplay",u),c["default"]=u},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/fn.js":82,"../../utils/format-time.js":83,"global/window":93,"lodash-compat/function/throttle":98}],17:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/fn.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateDataAttr(),e.on(c,"timeupdate",e.updateDataAttr),c.ready(l.bind(e,e.updateDataAttr)),d.playerOptions&&d.playerOptions.controlBar&&d.playerOptions.controlBar.progressControl&&d.playerOptions.controlBar.progressControl.keepTooltipsInside&&(e.keepTooltipsInside=d.playerOptions.controlBar.progressControl.keepTooltipsInside),e.keepTooltipsInside&&e.addClass("vjs-keep-tooltips-inside"),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar",innerHTML:'<span class="vjs-control-text"><span>'+this.localize("Progress")+"</span>: 0%</span>"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",n["default"](a,this.player_.duration()))},b}(j["default"]);j["default"].registerComponent("PlayProgressBar",o),c["default"]=o},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],18:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h);a("./seek-bar.js"),a("./mouse-time-display.js");var j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(i["default"]);j.prototype.options_={children:["seekBar"]},i["default"].registerComponent("ProgressControl",j),c["default"]=j},{"../../component.js":5,"./mouse-time-display.js":16,"./seek-bar.js":19}],19:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("global/window"),j=e(i),k=a("../../slider/slider.js"),l=e(k),m=a("../../component.js"),n=e(m),o=a("../../utils/fn.js"),p=d(o),q=a("../../utils/format-time.js"),r=e(q);a("./load-progress-bar.js"),a("./play-progress-bar.js"),a("./tooltip-progress-bar.js");var s=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"timeupdate",e.updateProgress),e.on(c,"ended",e.updateProgress),c.ready(p.bind(e,e.updateProgress)),d.playerOptions&&d.playerOptions.controlBar&&d.playerOptions.controlBar.progressControl&&d.playerOptions.controlBar.progressControl.keepTooltipsInside&&(e.keepTooltipsInside=d.playerOptions.controlBar.progressControl.keepTooltipsInside),e.keepTooltipsInside&&(e.tooltipProgressBar=e.addChild("TooltipProgressBar")),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":"progress bar"})},b.prototype.updateProgress=function(){if(this.updateAriaAttributes(this.el_),this.keepTooltipsInside){this.updateAriaAttributes(this.tooltipProgressBar.el_),this.tooltipProgressBar.el_.style.width=this.bar.el_.style.width;var a=parseFloat(j["default"].getComputedStyle(this.player().el()).width),b=parseFloat(j["default"].getComputedStyle(this.tooltipProgressBar.tooltip).width),c=this.tooltipProgressBar.el().style;c.maxWidth=Math.floor(a-b/2)+"px",c.minWidth=Math.ceil(b/2)+"px",c.right="-"+b/2+"px"}},b.prototype.updateAriaAttributes=function(a){var b=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();a.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),a.setAttribute("aria-valuetext",r["default"](b,this.player_.duration()))},b.prototype.getPercent=function(){var a=this.player_.currentTime()/this.player_.duration();return a>=1?1:a},b.prototype.handleMouseDown=function(b){a.prototype.handleMouseDown.call(this,b),this.player_.scrubbing(!0),this.videoWasPlaying=!this.player_.paused(),this.player_.pause()},b.prototype.handleMouseMove=function(a){var b=this.calculateDistance(a)*this.player_.duration();b===this.player_.duration()&&(b-=.1),this.player_.currentTime(b)},b.prototype.handleMouseUp=function(b){a.prototype.handleMouseUp.call(this,b),this.player_.scrubbing(!1),this.videoWasPlaying&&this.player_.play()},b.prototype.stepForward=function(){this.player_.currentTime(this.player_.currentTime()+5)},b.prototype.stepBack=function(){this.player_.currentTime(this.player_.currentTime()-5)},b}(l["default"]);s.prototype.options_={children:["loadProgressBar","mouseTimeDisplay","playProgressBar"],barName:"playProgressBar"},s.prototype.playerEvent="timeupdate",n["default"].registerComponent("SeekBar",s),c["default"]=s},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"../../utils/format-time.js":83,"./load-progress-bar.js":15,"./play-progress-bar.js":17,"./tooltip-progress-bar.js":20,"global/window":93}],20:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/fn.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.updateDataAttr(),e.on(c,"timeupdate",e.updateDataAttr),c.ready(l.bind(e,e.updateDataAttr)),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-tooltip-progress-bar vjs-slider-bar",innerHTML:'<div class="vjs-time-tooltip"></div>\n        <span class="vjs-control-text"><span>'+this.localize("Progress")+"</span>: 0%</span>"});return this.tooltip=b.querySelector(".vjs-time-tooltip"),b},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),b=n["default"](a,this.player_.duration());this.el_.setAttribute("data-current-time",b),this.tooltip.innerHTML=b},b}(j["default"]);j["default"].registerComponent("TooltipProgressBar",o),c["default"]=o},{"../../component.js":5,"../../utils/fn.js":82,"../../utils/format-time.js":83}],21:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./spacer.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-custom-control-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,{className:this.buildCSSClass()});return b.innerHTML="&nbsp;",b},b}(i["default"]);k["default"].registerComponent("CustomControlSpacer",l),c["default"]=l},{"../../component.js":5,"./spacer.js":22}],22:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b}(i["default"]);i["default"].registerComponent("Spacer",j),c["default"]=j},{"../../component.js":5}],23:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-menu-item.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b),d.track={player:c,kind:d.kind,label:d.kind+" settings",selectable:!1,"default":!1,mode:"disabled"},d.selectable=!1;var g=f(this,a.call(this,c,d));return g.addClass("vjs-texttrack-settings"),g.controlText(", opens "+d.kind+" settings dialog"),g}return g(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show(),this.player().getChild("textTrackSettings").el_.focus()},b}(i["default"]);k["default"].registerComponent("CaptionSettingsMenuItem",l),c["default"]=l},{"../../component.js":5,"./text-track-menu-item.js":31}],24:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=a("./caption-settings-menu-item.js"),m=d(l),n=function(a){function b(c,d,g){e(this,b);var h=f(this,a.call(this,c,d,g));return h.el_.setAttribute("aria-label","Captions Menu"),h}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-captions-button "+a.prototype.buildCSSClass.call(this)},b.prototype.update=function(){var b=2;a.prototype.update.call(this),this.player().tech_&&this.player().tech_.featuresNativeTextTracks&&(b=1),this.items&&this.items.length>b?this.show():this.hide()},b.prototype.createItems=function(){var b=[];return this.player().tech_&&this.player().tech_.featuresNativeTextTracks||b.push(new m["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(i["default"]);n.prototype.kind_="captions",n.prototype.controlText_="Captions",k["default"].registerComponent("CaptionsButton",n),c["default"]=n},{"../../component.js":5,"./caption-settings-menu-item.js":23,"./text-track-button.js":30}],25:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./text-track-button.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("./text-track-menu-item.js"),n=e(m),o=a("./chapters-track-menu-item.js"),p=e(o),q=a("../../menu/menu.js"),r=e(q),s=a("../../utils/dom.js"),t=d(s),u=a("../../utils/to-title-case.js"),v=e(u),w=function(a){function b(c,d,e){f(this,b);var h=g(this,a.call(this,c,d,e));return h.el_.setAttribute("aria-label","Chapters Menu"),h}return h(b,a),b.prototype.buildCSSClass=function(){return"vjs-chapters-button "+a.prototype.buildCSSClass.call(this)},b.prototype.createItems=function(){var a=[],b=this.player_.textTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];d.kind===this.kind_&&a.push(new n["default"](this.player_,{track:d}))}return a},b.prototype.createMenu=function(){for(var a=this,b=this.player_.textTracks()||[],c=void 0,d=this.items||[],e=b.length-1;e>=0;e--){var f=b[e];if(f.kind===this.kind_){c=f;break}}var g=this.menu;if(void 0===g){g=new r["default"](this.player_);var h=t.createEl("li",{className:"vjs-menu-title",innerHTML:v["default"](this.kind_),tabIndex:-1});g.children_.unshift(h),t.insertElFirst(h,g.contentEl())}else d.forEach(function(a){return g.removeChild(a)}),d=[];if(c&&(null===c.cues||void 0===c.cues)){c.mode="hidden";var i=this.player_.remoteTextTrackEls().getTrackElementByTrack_(c);i&&i.addEventListener("load",function(){return a.update()})}if(c&&c.cues&&c.cues.length>0)for(var j=c.cues,k=0,l=j.length;l>k;k++){var m=j[k],n=new p["default"](this.player_,{cue:m,track:c});d.push(n),g.addChild(n)}return d.length>0&&this.show(),this.items=d,g},b}(j["default"]);w.prototype.kind_="chapters",w.prototype.controlText_="Chapters",l["default"].registerComponent("ChaptersButton",w),c["default"]=w},{"../../component.js":5,"../../menu/menu.js":49,"../../utils/dom.js":80,"../../utils/to-title-case.js":89,"./chapters-track-menu-item.js":26,"./text-track-button.js":30,"./text-track-menu-item.js":31}],26:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../menu/menu-item.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=d.track,h=d.cue,i=c.currentTime();d.label=h.text,d.selected=h.startTime<=i&&i<h.endTime;var j=g(this,a.call(this,c,d));return j.track=e,j.cue=h,e.addEventListener("cuechange",n.bind(j,j.update)),j}return h(b,a),b.prototype.handleClick=function(){a.prototype.handleClick.call(this),this.player_.currentTime(this.cue.startTime),this.update(this.cue.startTime)},b.prototype.update=function(){var a=this.cue,b=this.player_.currentTime();this.selected(a.startTime<=b&&b<a.endTime)},b}(j["default"]);l["default"].registerComponent("ChaptersTrackMenuItem",o),c["default"]=o},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82}],27:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./text-track-button.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m),o=function(a){function b(c,d,e){f(this,b);var h=g(this,a.call(this,c,d,e));h.el_.setAttribute("aria-label","Descriptions Menu");var i=c.textTracks();return i&&!function(){var a=n.bind(h,h.handleTracksChange);i.addEventListener("change",a),h.on("dispose",function(){i.removeEventListener("change",a)})}(),h}return h(b,a),b.prototype.handleTracksChange=function(){for(var a=this.player().textTracks(),b=!1,c=0,d=a.length;d>c;c++){var e=a[c];if(e.kind!==this.kind_&&"showing"===e.mode){b=!0;break}}b?this.disable():this.enable()},b.prototype.buildCSSClass=function(){return"vjs-descriptions-button "+a.prototype.buildCSSClass.call(this)},b}(j["default"]);o.prototype.kind_="descriptions",o.prototype.controlText_="Descriptions",l["default"].registerComponent("DescriptionsButton",o),c["default"]=o},{"../../component.js":5,"../../utils/fn.js":82,"./text-track-button.js":30}],28:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-menu-item.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d){e(this,b),d.track={player:c,kind:d.kind,label:d.kind+" off","default":!1,mode:"disabled"},d.selectable=!0;var g=f(this,a.call(this,c,d));return g.selected(!0),g}return g(b,a),b.prototype.handleTracksChange=function(){for(var a=this.player().textTracks(),b=!0,c=0,d=a.length;d>c;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(i["default"]);k["default"].registerComponent("OffTextTrackMenuItem",l),c["default"]=l},{"../../component.js":5,"./text-track-menu-item.js":31}],29:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./text-track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=function(a){function b(c,d,g){e(this,b);var h=f(this,a.call(this,c,d,g));return h.el_.setAttribute("aria-label","Subtitles Menu"),h}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(i["default"]);l.prototype.kind_="subtitles",l.prototype.controlText_="Subtitles",k["default"].registerComponent("SubtitlesButton",l),c["default"]=l},{"../../component.js":5,"./text-track-button.js":30}],30:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../track-button.js"),i=d(h),j=a("../../component.js"),k=d(j),l=a("./text-track-menu-item.js"),m=d(l),n=a("./off-text-track-menu-item.js"),o=d(n),p=function(a){
+function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return e(this,b),d.tracks=c.textTracks(),f(this,a.call(this,c,d))}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new o["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;c<b.length;c++){var d=b[c];d.kind===this.kind_&&a.push(new m["default"](this.player_,{track:d,selectable:!0}))}return a},b}(i["default"]);k["default"].registerComponent("TextTrackButton",p),c["default"]=p},{"../../component.js":5,"../track-button.js":36,"./off-text-track-menu-item.js":28,"./text-track-menu-item.js":31}],31:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},j=a("../../menu/menu-item.js"),k=e(j),l=a("../../component.js"),m=e(l),n=a("../../utils/fn.js"),o=d(n),p=a("global/window"),q=e(p),r=a("global/document"),s=e(r),t=function(a){function b(c,d){f(this,b);var e=d.track,h=c.textTracks();d.label=e.label||e.language||"Unknown",d.selected=e["default"]||"showing"===e.mode;var j=g(this,a.call(this,c,d));return j.track=e,h&&!function(){var a=o.bind(j,j.handleTracksChange);h.addEventListener("change",a),j.on("dispose",function(){h.removeEventListener("change",a)})}(),h&&void 0===h.onchange&&!function(){var a=void 0;j.on(["tap","click"],function(){if("object"!==i(q["default"].Event))try{a=new q["default"].Event("change")}catch(b){}a||(a=s["default"].createEvent("Event"),a.initEvent("change",!0,!0)),h.dispatchEvent(a)})}(),j}return h(b,a),b.prototype.handleClick=function(b){var c=this.track.kind,d=this.player_.textTracks();if(a.prototype.handleClick.call(this,b),d)for(var e=0;e<d.length;e++){var f=d[e];f.kind===c&&(f.mode=f===this.track?"showing":"disabled")}},b.prototype.handleTracksChange=function(){this.selected("showing"===this.track.mode)},b}(k["default"]);m["default"].registerComponent("TextTrackMenuItem",t),c["default"]=t},{"../../component.js":5,"../../menu/menu-item.js":48,"../../utils/fn.js":82,"global/document":92,"global/window":93}],32:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"timeupdate",e.updateContent),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-current-time vjs-time-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-current-time-display",innerHTML:'<span class="vjs-control-text">Current Time </span>0:00'},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime(),b=this.localize("Current Time"),c=n["default"](a,this.player_.duration());c!==this.formattedTime_&&(this.formattedTime_=c,this.contentEl_.innerHTML='<span class="vjs-control-text">'+b+"</span> "+c)},b}(j["default"]);j["default"].registerComponent("CurrentTimeDisplay",o),c["default"]=o},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],33:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"durationchange",e.updateContent),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-duration vjs-time-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-duration-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Duration Time")+"</span> 0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a&&this.duration_!==a){this.duration_=a;var b=this.localize("Duration Time"),c=n["default"](a);this.contentEl_.innerHTML='<span class="vjs-control-text">'+b+"</span> "+c}},b}(j["default"]);j["default"].registerComponent("DurationDisplay",o),c["default"]=o},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],34:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../component.js"),j=e(i),k=a("../../utils/dom.js"),l=d(k),m=a("../../utils/format-time.js"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"timeupdate",e.updateContent),e.on(c,"durationchange",e.updateContent),e}return h(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-remaining-time vjs-time-control vjs-control"});return this.contentEl_=l.createEl("div",{className:"vjs-remaining-time-display",innerHTML:'<span class="vjs-control-text">'+this.localize("Remaining Time")+"</span> -0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){if(this.player_.duration()){var a=this.localize("Remaining Time"),b=n["default"](this.player_.remainingTime());b!==this.formattedTime_&&(this.formattedTime_=b,this.contentEl_.innerHTML='<span class="vjs-control-text">'+a+"</span> -"+b)}},b}(j["default"]);j["default"].registerComponent("RemainingTimeDisplay",o),c["default"]=o},{"../../component.js":5,"../../utils/dom.js":80,"../../utils/format-time.js":83}],35:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"<div><span>/</span></div>"})},b}(i["default"]);i["default"].registerComponent("TimeDivider",j),c["default"]=j},{"../../component.js":5}],36:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../menu/menu-button.js"),j=e(i),k=a("../component.js"),l=e(k),m=a("../utils/fn.js"),n=d(m),o=function(a){function b(c,d){f(this,b);var e=d.tracks,h=g(this,a.call(this,c,d));if(h.items.length<=1&&h.hide(),!e)return g(h);var i=n.bind(h,h.update);return e.addEventListener("removetrack",i),e.addEventListener("addtrack",i),h.player_.on("dispose",function(){e.removeEventListener("removetrack",i),e.removeEventListener("addtrack",i)}),h}return h(b,a),b}(j["default"]);l["default"].registerComponent("TrackButton",o),c["default"]=o},{"../component.js":5,"../menu/menu-button.js":47,"../utils/fn.js":82}],37:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../../slider/slider.js"),j=e(i),k=a("../../component.js"),l=e(k),m=a("../../utils/fn.js"),n=d(m);a("./volume-level.js");var o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.on(c,"volumechange",e.updateARIAAttributes),c.ready(n.bind(e,e.updateARIAAttributes)),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-bar vjs-slider-bar"},{"aria-label":"volume level"})},b.prototype.handleMouseMove=function(a){this.checkMuted(),this.player_.volume(this.calculateDistance(a))},b.prototype.checkMuted=function(){this.player_.muted()&&this.player_.muted(!1)},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.checkMuted(),this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){this.checkMuted(),this.player_.volume(this.player_.volume()-.1)},b.prototype.updateARIAAttributes=function(){var a=(100*this.player_.volume()).toFixed(2);this.el_.setAttribute("aria-valuenow",a),this.el_.setAttribute("aria-valuetext",a+"%")},b}(j["default"]);o.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},o.prototype.playerEvent="volumechange",l["default"].registerComponent("VolumeBar",o),c["default"]=o},{"../../component.js":5,"../../slider/slider.js":57,"../../utils/fn.js":82,"./volume-level.js":39}],38:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h);a("./volume-bar.js");var j=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return c.tech_&&c.tech_.featuresVolumeControl===!1&&g.addClass("vjs-hidden"),g.on(c,"loadstart",function(){c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}),g}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(i["default"]);j.prototype.options_={children:["volumeBar"]},i["default"].registerComponent("VolumeControl",j),c["default"]=j},{"../../component.js":5,"./volume-bar.js":37}],39:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../../component.js"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:'<span class="vjs-control-text"></span>'})},b}(i["default"]);i["default"].registerComponent("VolumeLevel",j),c["default"]=j},{"../../component.js":5}],40:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../utils/fn.js"),j=e(i),k=a("../component.js"),l=d(k),m=a("../popup/popup.js"),n=d(m),o=a("../popup/popup-button.js"),p=d(o),q=a("./mute-toggle.js"),r=d(q),s=a("./volume-control/volume-bar.js"),t=d(s),u=function(a){function b(c){function d(){c.tech_&&c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];f(this,b),void 0===e.inline&&(e.inline=!0),void 0===e.vertical&&(e.vertical=e.inline?!1:!0),e.volumeBar=e.volumeBar||{},e.volumeBar.vertical=!!e.vertical;var h=g(this,a.call(this,c,e));return h.on(c,"volumechange",h.volumeUpdate),h.on(c,"loadstart",h.volumeUpdate),d.call(h),h.on(c,"loadstart",d),h.on(h.volumeBar,["slideractive","focus"],function(){this.addClass("vjs-slider-active")}),h.on(h.volumeBar,["sliderinactive","blur"],function(){this.removeClass("vjs-slider-active")}),h.on(h.volumeBar,["focus"],function(){this.addClass("vjs-lock-showing")}),h.on(h.volumeBar,["blur"],function(){this.removeClass("vjs-lock-showing")}),h}return h(b,a),b.prototype.buildCSSClass=function(){var b="";return b=this.options_.vertical?"vjs-volume-menu-button-vertical":"vjs-volume-menu-button-horizontal","vjs-volume-menu-button "+a.prototype.buildCSSClass.call(this)+" "+b},b.prototype.createPopup=function(){var a=new n["default"](this.player_,{contentElType:"div"}),b=new t["default"](this.player_,this.options_.volumeBar);return a.addChild(b),this.menuContent=a,this.volumeBar=b,this.attachVolumeBarEvents(),a},b.prototype.handleClick=function(){r["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b.prototype.attachVolumeBarEvents=function(){this.menuContent.on(["mousedown","touchdown"],j.bind(this,this.handleMouseDown))},b.prototype.handleMouseDown=function(){this.on(["mousemove","touchmove"],j.bind(this.volumeBar,this.volumeBar.handleMouseMove)),this.on(this.el_.ownerDocument,["mouseup","touchend"],this.handleMouseUp)},b.prototype.handleMouseUp=function(){this.off(["mousemove","touchmove"],j.bind(this.volumeBar,this.volumeBar.handleMouseMove))},b}(p["default"]);u.prototype.volumeUpdate=r["default"].prototype.update,u.prototype.controlText_="Mute",l["default"].registerComponent("VolumeMenuButton",u),c["default"]=u},{"../component.js":5,"../popup/popup-button.js":53,"../popup/popup.js":54,"../utils/fn.js":82,"./mute-toggle.js":11,"./volume-control/volume-bar.js":37}],41:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component"),i=d(h),j=a("./modal-dialog"),k=d(j),l=a("./utils/merge-options"),m=d(l),n=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.on(c,"error",g.open),g}return g(b,a),b.prototype.buildCSSClass=function(){return"vjs-error-display "+a.prototype.buildCSSClass.call(this)},b.prototype.content=function(){var a=this.player().error();return a?this.localize(a.message):""},b}(k["default"]);n.prototype.options_=m["default"](k["default"].prototype.options_,{fillAlways:!0,temporary:!1,uncloseable:!0}),i["default"].registerComponent("ErrorDisplay",n),c["default"]=n},{"./component":5,"./modal-dialog":50,"./utils/merge-options":86}],42:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}c.__esModule=!0;var e=a("./utils/events.js"),f=d(e),g=function(){};g.prototype.allowedEvents_={},g.prototype.on=function(a,b){var c=this.addEventListener;this.addEventListener=function(){},f.on(this,a,b),this.addEventListener=c},g.prototype.addEventListener=g.prototype.on,g.prototype.off=function(a,b){f.off(this,a,b)},g.prototype.removeEventListener=g.prototype.off,g.prototype.one=function(a,b){var c=this.addEventListener;this.addEventListener=function(){},f.one(this,a,b),this.addEventListener=c},g.prototype.trigger=function(a){var b=a.type||a;"string"==typeof a&&(a={type:b}),a=f.fixEvent(a),this.allowedEvents_[b]&&this["on"+b]&&this["on"+b](a),f.trigger(this,a)},g.prototype.dispatchEvent=g.prototype.trigger,c["default"]=g},{"./utils/events.js":81}],43:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},f=a("./utils/log"),g=d(f),h=function(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof b?"undefined":e(b)));a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(a.super_=b)},i=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"===("undefined"==typeof b?"undefined":e(b))?("function"==typeof b.init&&(g["default"].warn("Constructor logic via init() is deprecated; please use constructor() instead."),b.constructor=b.init),b.constructor!==Object.prototype.constructor&&(c=b.constructor),d=b):"function"==typeof b&&(c=b),h(c,a);for(var f in d)d.hasOwnProperty(f)&&(c.prototype[f]=d[f]);return c};c["default"]=i},{"./utils/log":85}],44:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;for(var e=a("global/document"),f=d(e),g={},h=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],i=h[0],j=void 0,k=0;k<h.length;k++)if(h[k][1]in f["default"]){j=h[k];break}if(j)for(var l=0;l<j.length;l++)g[i[l]]=j[l];c["default"]=g},{"global/document":92}],45:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("./component"),i=d(h),j=function(a){function b(){return e(this,b),f(this,a.apply(this,arguments))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-loading-spinner",dir:"ltr"})},b}(i["default"]);i["default"].registerComponent("LoadingSpinner",j),c["default"]=j},{"./component":5}],46:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return a instanceof e?a:("number"==typeof a?this.code=a:"string"==typeof a?this.message=a:"object"===("undefined"==typeof a?"undefined":f(a))&&("number"==typeof a.code&&(this.code=a.code),h["default"](this,a)),void(this.message||(this.message=e.defaultMessages[this.code]||"")))}c.__esModule=!0;var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},g=a("object.assign"),h=d(g);e.prototype.code=0,e.prototype.message="",e.prototype.status=null,e.errorTypes=["MEDIA_ERR_CUSTOM","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_ENCRYPTED"],e.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail part-way.",3:"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.",4:"The media could not be loaded, either because the server or network failed or because the format is not supported.",5:"The media is encrypted and we do not have the keys to decrypt it."};for(var i=0;i<e.errorTypes.length;i++)e[e.errorTypes[i]]=i,e.prototype[e.errorTypes[i]]=i;c["default"]=e},{"object.assign":136}],47:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../clickable-component.js"),j=e(i),k=a("../component.js"),l=e(k),m=a("./menu.js"),n=e(m),o=a("../utils/dom.js"),p=d(o),q=a("../utils/fn.js"),r=d(q),s=a("../utils/to-title-case.js"),t=e(s),u=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];f(this,b);var e=g(this,a.call(this,c,d));return e.update(),e.enabled_=!0,e.el_.setAttribute("aria-haspopup","true"),e.el_.setAttribute("role","menuitem"),e.on("keydown",e.handleSubmenuKeyPress),e}return h(b,a),b.prototype.update=function(){var a=this.createMenu();this.menu&&this.removeChild(this.menu),this.menu=a,this.addChild(a),this.buttonPressed_=!1,this.el_.setAttribute("aria-expanded","false"),this.items&&0===this.items.length?this.hide():this.items&&this.items.length>1&&this.show()},b.prototype.createMenu=function(){var a=new n["default"](this.player_);if(this.options_.title){var b=p.createEl("li",{className:"vjs-menu-title",innerHTML:t["default"](this.options_.title),tabIndex:-1});a.children_.unshift(b),p.insertElFirst(b,a.contentEl())}if(this.items=this.createItems(),this.items)for(var c=0;c<this.items.length;c++)a.addItem(this.items[c]);return a},b.prototype.createItems=function(){},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b.prototype.buildCSSClass=function(){var b="vjs-menu-button";return b+=this.options_.inline===!0?"-inline":"-popup","vjs-menu-button "+b+" "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.one(this.menu.contentEl(),"mouseleave",r.bind(this,function(){this.unpressButton(),this.el_.blur()})),this.buttonPressed_?this.unpressButton():this.pressButton()},b.prototype.handleKeyPress=function(b){27===b.which||9===b.which?(this.buttonPressed_&&this.unpressButton(),9!==b.which&&b.preventDefault()):38===b.which||40===b.which?this.buttonPressed_||(this.pressButton(),b.preventDefault()):a.prototype.handleKeyPress.call(this,b)},b.prototype.handleSubmenuKeyPress=function(a){(27===a.which||9===a.which)&&(this.buttonPressed_&&this.unpressButton(),9!==a.which&&a.preventDefault())},b.prototype.pressButton=function(){this.enabled_&&(this.buttonPressed_=!0,this.menu.lockShowing(),this.el_.setAttribute("aria-expanded","true"),this.menu.focus())},b.prototype.unpressButton=function(){this.enabled_&&(this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-expanded","false"),this.el_.focus())},b.prototype.disable=function(){return this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-expanded","false"),this.enabled_=!1,a.prototype.disable.call(this)},b.prototype.enable=function(){return this.enabled_=!0,a.prototype.enable.call(this)},b}(j["default"]);l["default"].registerComponent("MenuButton",u),c["default"]=u},{"../clickable-component.js":3,"../component.js":5,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/to-title-case.js":89,"./menu.js":49}],48:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../clickable-component.js"),i=d(h),j=a("../component.js"),k=d(j),l=a("object.assign"),m=d(l),n=function(a){function b(c,d){e(this,b);var g=f(this,a.call(this,c,d));return g.selectable=d.selectable,g.selected(d.selected),g.selectable?g.el_.setAttribute("role","menuitemcheckbox"):g.el_.setAttribute("role","menuitem"),g}return g(b,a),b.prototype.createEl=function(b,c,d){return a.prototype.createEl.call(this,"li",m["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label),tabIndex:-1},c),d)},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){this.selectable&&(a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-checked","true"),this.controlText(", selected")):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-checked","false"),this.controlText(" ")))},b}(i["default"]);k["default"].registerComponent("MenuItem",n),c["default"]=n},{"../clickable-component.js":3,"../component.js":5,"object.assign":136}],49:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{
+constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component.js"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=a("../utils/fn.js"),n=d(m),o=a("../utils/events.js"),p=d(o),q=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.focusedChild_=-1,e.on("keydown",e.handleKeyPress),e}return h(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",n.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=l.createEl(b,{className:"vjs-menu-content"}),this.contentEl_.setAttribute("role","menu");var c=a.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return c.setAttribute("role","presentation"),c.appendChild(this.contentEl_),p.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b.prototype.handleKeyPress=function(a){37===a.which||40===a.which?(a.preventDefault(),this.stepForward()):(38===a.which||39===a.which)&&(a.preventDefault(),this.stepBack())},b.prototype.stepForward=function(){var a=0;void 0!==this.focusedChild_&&(a=this.focusedChild_+1),this.focus(a)},b.prototype.stepBack=function(){var a=0;void 0!==this.focusedChild_&&(a=this.focusedChild_-1),this.focus(a)},b.prototype.focus=function(){var a=arguments.length<=0||void 0===arguments[0]?0:arguments[0],b=this.children().slice(),c=b.length&&b[0].className&&/vjs-menu-title/.test(b[0].className);c&&b.shift(),b.length>0&&(0>a?a=0:a>=b.length&&(a=b.length-1),this.focusedChild_=a,b[a].el_.focus())},b}(j["default"]);j["default"].registerComponent("Menu",q),c["default"]=q},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],50:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./utils/dom"),j=e(i),k=a("./utils/fn"),l=e(k),m=a("./component"),n=d(m),o="vjs-modal-dialog",p=27,q=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.opened_=e.hasBeenOpened_=e.hasBeenFilled_=!1,e.closeable(!e.options_.uncloseable),e.content(e.options_.content),e.contentEl_=j.createEl("div",{className:o+"-content"},{role:"document"}),e.descEl_=j.createEl("p",{className:o+"-description vjs-offscreen",id:e.el().getAttribute("aria-describedby")}),j.textContent(e.descEl_,e.description()),e.el_.appendChild(e.descEl_),e.el_.appendChild(e.contentEl_),e}return h(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass(),tabIndex:-1},{"aria-describedby":this.id()+"_description","aria-hidden":"true","aria-label":this.label(),role:"dialog"})},b.prototype.buildCSSClass=function(){return o+" vjs-hidden "+a.prototype.buildCSSClass.call(this)},b.prototype.handleKeyPress=function(a){a.which===p&&this.closeable()&&this.close()},b.prototype.label=function(){return this.options_.label||this.localize("Modal Window")},b.prototype.description=function(){var a=this.options_.description||this.localize("This is a modal window.");return this.closeable()&&(a+=" "+this.localize("This modal can be closed by pressing the Escape key or activating the close button.")),a},b.prototype.open=function(){if(!this.opened_){var a=this.player();this.trigger("beforemodalopen"),this.opened_=!0,(this.options_.fillAlways||!this.hasBeenOpened_&&!this.hasBeenFilled_)&&this.fill(),this.wasPlaying_=!a.paused(),this.wasPlaying_&&a.pause(),this.closeable()&&this.on(this.el_.ownerDocument,"keydown",l.bind(this,this.handleKeyPress)),a.controls(!1),this.show(),this.el().setAttribute("aria-hidden","false"),this.trigger("modalopen"),this.hasBeenOpened_=!0}return this},b.prototype.opened=function(a){return"boolean"==typeof a&&this[a?"open":"close"](),this.opened_},b.prototype.close=function(){if(this.opened_){var a=this.player();this.trigger("beforemodalclose"),this.opened_=!1,this.wasPlaying_&&a.play(),this.closeable()&&this.off(this.el_.ownerDocument,"keydown",l.bind(this,this.handleKeyPress)),a.controls(!0),this.hide(),this.el().setAttribute("aria-hidden","true"),this.trigger("modalclose"),this.options_.temporary&&this.dispose()}return this},b.prototype.closeable=function c(a){if("boolean"==typeof a){var c=this.closeable_=!!a,b=this.getChild("closeButton");if(c&&!b){var d=this.contentEl_;this.contentEl_=this.el_,b=this.addChild("closeButton",{controlText:"Close Modal Dialog"}),this.contentEl_=d,this.on(b,"close",this.close)}!c&&b&&(this.off(b,"close",this.close),this.removeChild(b),b.dispose())}return this.closeable_},b.prototype.fill=function(){return this.fillWith(this.content())},b.prototype.fillWith=function(a){var b=this.contentEl(),c=b.parentNode,d=b.nextSibling;return this.trigger("beforemodalfill"),this.hasBeenFilled_=!0,c.removeChild(b),this.empty(),j.insertContent(b,a),this.trigger("modalfill"),d?c.insertBefore(b,d):c.appendChild(b),this},b.prototype.empty=function(){return this.trigger("beforemodalempty"),j.emptyEl(this.contentEl()),this.trigger("modalempty"),this},b.prototype.content=function(a){return"undefined"!=typeof a&&(this.content_=a),this.content_},b}(n["default"]);q.prototype.options_={temporary:!0},n["default"].registerComponent("ModalDialog",q),c["default"]=q},{"./component":5,"./utils/dom":80,"./utils/fn":82}],51:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./component.js"),j=e(i),k=a("global/document"),l=e(k),m=a("global/window"),n=e(m),o=a("./utils/events.js"),p=d(o),q=a("./utils/dom.js"),r=d(q),s=a("./utils/fn.js"),t=d(s),u=a("./utils/guid.js"),v=d(u),w=a("./utils/browser.js"),x=d(w),y=a("./utils/log.js"),z=e(y),A=a("./utils/to-title-case.js"),B=e(A),C=a("./utils/time-ranges.js"),D=a("./utils/buffer.js"),E=a("./utils/stylesheet.js"),F=d(E),G=a("./fullscreen-api.js"),H=e(G),I=a("./media-error.js"),J=e(I),K=a("safe-json-parse/tuple"),L=e(K),M=a("object.assign"),N=e(M),O=a("./utils/merge-options.js"),P=e(O),Q=a("./tracks/text-track-list-converter.js"),R=e(Q),S=a("./modal-dialog"),T=e(S),U=a("./tech/tech.js"),V=e(U),W=a("./tracks/audio-track-list.js"),X=e(W),Y=a("./tracks/video-track-list.js"),Z=e(Y);a("./tech/loader.js"),a("./tech/flash.js"),a("./poster-image.js"),a("./tracks/text-track-display.js"),a("./loading-spinner.js"),a("./big-play-button.js"),a("./close-button.js"),a("./control-bar/control-bar.js"),a("./error-display.js"),a("./tracks/text-track-settings.js"),a("./tech/html5.js");var $=function(a){function b(c,d,e){if(f(this,b),c.id=c.id||"vjs_video_"+v.newGUID(),d=N["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,!d.language)if("function"==typeof c.closest){var h=c.closest("[lang]");h&&(d.language=h.getAttribute("lang"))}else for(var i=c;i&&1===i.nodeType;){if(r.getElAttributes(i).hasOwnProperty("lang")){d.language=i.getAttribute("lang");break}i=i.parentNode}var j=g(this,a.call(this,null,d,e));if(!j.options_||!j.options_.techOrder||!j.options_.techOrder.length)throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?");j.tag=c,j.tagAttributes=c&&r.getElAttributes(c),j.language(j.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),j.languages_=a}():j.languages_=b.prototype.options_.languages,j.cache_={},j.poster_=d.poster||"",j.controls_=!!d.controls,c.controls=!1,j.scrubbing_=!1,j.el_=j.createEl();var k=P["default"](j.options_);return d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):z["default"].error("Unable to find plugin:",b)},j)}(),j.options_.playerOptions=k,j.initChildren(),j.isAudio("audio"===c.nodeName.toLowerCase()),j.addClass(j.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),j.el_.setAttribute("role","region"),j.isAudio()?j.el_.setAttribute("aria-label","audio player"):j.el_.setAttribute("aria-label","video player"),j.isAudio()&&j.addClass("vjs-audio"),j.flexNotSupported_()&&j.addClass("vjs-no-flex"),x.IS_IOS||j.addClass("vjs-workinghover"),b.players[j.id_]=j,j.userActive(!0),j.reportUserActivity(),j.listenForUserActivity_(),j.on("fullscreenchange",j.handleFullscreenChange_),j.on("stageclick",j.handleStageClick_),j}return h(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&this.styleEl_.parentNode&&this.styleEl_.parentNode.removeChild(this.styleEl_),b.players[this.id_]=null,this.tag&&this.tag.player&&(this.tag.player=null),this.el_&&this.el_.player&&(this.el_.player=null),this.tech_&&this.tech_.dispose(),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var b=this.el_=a.prototype.createEl.call(this,"div"),c=this.tag;c.removeAttribute("width"),c.removeAttribute("height");var d=r.getElAttributes(c);if(Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.playerId=c.id,c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),n["default"].VIDEOJS_NO_DYNAMIC_STYLE!==!0){this.styleEl_=F.createStyleElement("vjs-styles-dimensions");var e=r.$(".vjs-styles-defaults"),f=r.$("head");f.insertBefore(this.styleEl_,e?e.nextSibling:f.firstChild)}this.width(this.options_.width),this.height(this.options_.height),this.fluid(this.options_.fluid),this.aspectRatio(this.options_.aspectRatio);for(var g=c.getElementsByTagName("a"),h=0;h<g.length;h++){var i=g.item(h);r.addElClass(i,"vjs-hidden"),i.setAttribute("hidden","hidden")}return c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),r.insertElFirst(c,b),this.children_.unshift(c),this.el_=b,b},b.prototype.width=function(a){return this.dimension("width",a)},b.prototype.height=function(a){return this.dimension("height",a)},b.prototype.dimension=function(a,b){var c=a+"_";if(void 0===b)return this[c]||0;if(""===b)this[c]=void 0;else{var d=parseFloat(b);if(isNaN(d))return z["default"].error('Improper value "'+b+'" supplied for for '+a),this;this[c]=d}return this.updateStyleEl_(),this},b.prototype.fluid=function(a){return void 0===a?!!this.fluid_:(this.fluid_=!!a,void(a?this.addClass("vjs-fluid"):this.removeClass("vjs-fluid")))},b.prototype.aspectRatio=function(a){if(void 0===a)return this.aspectRatio_;if(!/^\d+\:\d+$/.test(a))throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.");this.aspectRatio_=a,this.fluid(!0),this.updateStyleEl_()},b.prototype.updateStyleEl_=function(){if(n["default"].VIDEOJS_NO_DYNAMIC_STYLE===!0){var a="number"==typeof this.width_?this.width_:this.options_.width,b="number"==typeof this.height_?this.height_:this.options_.height,c=this.tech_&&this.tech_.el();return void(c&&(a>=0&&(c.width=a),b>=0&&(c.height=b)))}var d=void 0,e=void 0,f=void 0,g=void 0;f=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var h=f.split(":"),i=h[1]/h[0];d=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/i:this.videoWidth()||300,e=void 0!==this.height_?this.height_:d*i,g=/^[^a-zA-Z]/.test(this.id())?"dimensions-"+this.id():this.id()+"-dimensions",this.addClass(g),F.setTextContent(this.styleEl_,"\n      ."+g+" {\n        width: "+d+"px;\n        height: "+e+"px;\n      }\n\n      ."+g+".vjs-fluid {\n        padding-top: "+100*i+"%;\n      }\n    ")},b.prototype.loadTech_=function(a,b){this.tech_&&this.unloadTech_(),"Html5"!==a&&this.tag&&(V["default"].getTech("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=a,this.isReady_=!1;var c=N["default"]({source:b,nativeControlsForTouch:this.options_.nativeControlsForTouch,playerId:this.id(),techId:this.id()+"_"+a+"_api",videoTracks:this.videoTracks_,textTracks:this.textTracks_,audioTracks:this.audioTracks_,autoplay:this.options_.autoplay,preload:this.options_.preload,loop:this.options_.loop,muted:this.options_.muted,poster:this.poster(),language:this.language(),"vtt.js":this.options_["vtt.js"]},this.options_[a.toLowerCase()]);this.tag&&(c.tag=this.tag),b&&(this.currentType_=b.type,b.src===this.cache_.src&&this.cache_.currentTime>0&&(c.startTime=this.cache_.currentTime),this.cache_.src=b.src);var d=V["default"].getTech(a);d||(d=j["default"].getComponent(a)),this.tech_=new d(c),this.tech_.ready(t.bind(this,this.handleTechReady_),!0),R["default"].jsonToTextTracks(this.textTracksJson_||[],this.tech_),this.on(this.tech_,"loadstart",this.handleTechLoadStart_),this.on(this.tech_,"waiting",this.handleTechWaiting_),this.on(this.tech_,"canplay",this.handleTechCanPlay_),this.on(this.tech_,"canplaythrough",this.handleTechCanPlayThrough_),this.on(this.tech_,"playing",this.handleTechPlaying_),this.on(this.tech_,"ended",this.handleTechEnded_),this.on(this.tech_,"seeking",this.handleTechSeeking_),this.on(this.tech_,"seeked",this.handleTechSeeked_),this.on(this.tech_,"play",this.handleTechPlay_),this.on(this.tech_,"firstplay",this.handleTechFirstPlay_),this.on(this.tech_,"pause",this.handleTechPause_),this.on(this.tech_,"progress",this.handleTechProgress_),this.on(this.tech_,"durationchange",this.handleTechDurationChange_),this.on(this.tech_,"fullscreenchange",this.handleTechFullscreenChange_),this.on(this.tech_,"error",this.handleTechError_),this.on(this.tech_,"suspend",this.handleTechSuspend_),this.on(this.tech_,"abort",this.handleTechAbort_),this.on(this.tech_,"emptied",this.handleTechEmptied_),this.on(this.tech_,"stalled",this.handleTechStalled_),this.on(this.tech_,"loadedmetadata",this.handleTechLoadedMetaData_),this.on(this.tech_,"loadeddata",this.handleTechLoadedData_),this.on(this.tech_,"timeupdate",this.handleTechTimeUpdate_),this.on(this.tech_,"ratechange",this.handleTechRateChange_),this.on(this.tech_,"volumechange",this.handleTechVolumeChange_),this.on(this.tech_,"texttrackchange",this.handleTechTextTrackChange_),this.on(this.tech_,"loadedmetadata",this.updateStyleEl_),this.on(this.tech_,"posterchange",this.handleTechPosterChange_),this.on(this.tech_,"textdata",this.handleTechTextData_),this.usingNativeControls(this.techGet_("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners_(),this.tech_.el().parentNode===this.el()||"Html5"===a&&this.tag||r.insertElFirst(this.tech_.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null)},b.prototype.unloadTech_=function(){this.videoTracks_=this.videoTracks(),this.textTracks_=this.textTracks(),this.audioTracks_=this.audioTracks(),this.textTracksJson_=R["default"].textTracksToJson(this.tech_),this.isReady_=!1,this.tech_.dispose(),this.tech_=!1},b.prototype.tech=function(a){if(a&&a.IWillNotUseThisInPlugins)return this.tech_;var b="\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    ";throw n["default"].alert(b),new Error(b)},b.prototype.addTechControlsListeners_=function(){this.removeTechControlsListeners_(),this.on(this.tech_,"mousedown",this.handleTechClick_),this.on(this.tech_,"touchstart",this.handleTechTouchStart_),this.on(this.tech_,"touchmove",this.handleTechTouchMove_),this.on(this.tech_,"touchend",this.handleTechTouchEnd_),this.on(this.tech_,"tap",this.handleTechTap_)},b.prototype.removeTechControlsListeners_=function(){this.off(this.tech_,"tap",this.handleTechTap_),this.off(this.tech_,"touchstart",this.handleTechTouchStart_),this.off(this.tech_,"touchmove",this.handleTechTouchMove_),this.off(this.tech_,"touchend",this.handleTechTouchEnd_),this.off(this.tech_,"mousedown",this.handleTechClick_)},b.prototype.handleTechReady_=function(){if(this.triggerReady(),this.cache_.volume&&this.techCall_("setVolume",this.cache_.volume),this.handleTechPosterChange_(),this.handleTechDurationChange_(),(this.src()||this.currentSrc())&&this.tag&&this.options_.autoplay&&this.paused()){try{delete this.tag.poster}catch(a){z["default"]("deleting tag.poster throws in some browsers",a)}this.play()}},b.prototype.handleTechLoadStart_=function(){this.removeClass("vjs-ended"),this.error(null),this.paused()?(this.hasStarted(!1),this.trigger("loadstart")):(this.trigger("loadstart"),this.trigger("firstplay"))},b.prototype.hasStarted=function(a){return void 0!==a?(this.hasStarted_!==a&&(this.hasStarted_=a,a?(this.addClass("vjs-has-started"),this.trigger("firstplay")):this.removeClass("vjs-has-started")),this):!!this.hasStarted_},b.prototype.handleTechPlay_=function(){this.removeClass("vjs-ended"),this.removeClass("vjs-paused"),this.addClass("vjs-playing"),this.hasStarted(!0),this.trigger("play")},b.prototype.handleTechWaiting_=function(){var a=this;this.addClass("vjs-waiting"),this.trigger("waiting"),this.one("timeupdate",function(){return a.removeClass("vjs-waiting")})},b.prototype.handleTechCanPlay_=function(){this.removeClass("vjs-waiting"),this.trigger("canplay")},b.prototype.handleTechCanPlayThrough_=function(){this.removeClass("vjs-waiting"),this.trigger("canplaythrough")},b.prototype.handleTechPlaying_=function(){this.removeClass("vjs-waiting"),this.trigger("playing")},b.prototype.handleTechSeeking_=function(){this.addClass("vjs-seeking"),this.trigger("seeking")},b.prototype.handleTechSeeked_=function(){this.removeClass("vjs-seeking"),this.trigger("seeked")},b.prototype.handleTechFirstPlay_=function(){this.options_.starttime&&this.currentTime(this.options_.starttime),this.addClass("vjs-has-started"),this.trigger("firstplay")},b.prototype.handleTechPause_=function(){this.removeClass("vjs-playing"),this.addClass("vjs-paused"),this.trigger("pause")},b.prototype.handleTechProgress_=function(){this.trigger("progress")},b.prototype.handleTechEnded_=function(){this.addClass("vjs-ended"),this.options_.loop?(this.currentTime(0),this.play()):this.paused()||this.pause(),this.trigger("ended")},b.prototype.handleTechDurationChange_=function(){this.duration(this.techGet_("duration"))},b.prototype.handleTechClick_=function(a){0===a.button&&this.controls()&&(this.paused()?this.play():this.pause())},b.prototype.handleTechTap_=function(){this.userActive(!this.userActive())},b.prototype.handleTechTouchStart_=function(){this.userWasActive=this.userActive()},b.prototype.handleTechTouchMove_=function(){this.userWasActive&&this.reportUserActivity()},b.prototype.handleTechTouchEnd_=function(a){a.preventDefault()},b.prototype.handleFullscreenChange_=function(){this.isFullscreen()?this.addClass("vjs-fullscreen"):this.removeClass("vjs-fullscreen")},b.prototype.handleStageClick_=function(){this.reportUserActivity()},b.prototype.handleTechFullscreenChange_=function(a,b){b&&this.isFullscreen(b.isFullscreen),this.trigger("fullscreenchange")},b.prototype.handleTechError_=function(){var a=this.tech_.error();this.error(a)},b.prototype.handleTechSuspend_=function(){this.trigger("suspend")},b.prototype.handleTechAbort_=function(){this.trigger("abort")},b.prototype.handleTechEmptied_=function(){this.trigger("emptied")},b.prototype.handleTechStalled_=function(){this.trigger("stalled")},b.prototype.handleTechLoadedMetaData_=function(){this.trigger("loadedmetadata")},b.prototype.handleTechTextData_=function(){var a=null;arguments.length>1&&(a=arguments[1]),this.trigger("textdata",a)},b.prototype.handleTechLoadedData_=function(){this.trigger("loadeddata")},b.prototype.handleTechTimeUpdate_=function(){this.trigger("timeupdate")},b.prototype.handleTechRateChange_=function(){this.trigger("ratechange")},b.prototype.handleTechVolumeChange_=function(){this.trigger("volumechange")},b.prototype.handleTechTextTrackChange_=function(){this.trigger("texttrackchange")},b.prototype.getCache=function(){return this.cache_},b.prototype.techCall_=function(a,b){if(this.tech_&&!this.tech_.isReady_)this.tech_.ready(function(){this[a](b)},!0);else try{this.tech_&&this.tech_[a](b)}catch(c){throw z["default"](c),c}},b.prototype.techGet_=function(a){if(this.tech_&&this.tech_.isReady_)try{return this.tech_[a]()}catch(b){throw void 0===this.tech_[a]?z["default"]("Video.js: "+a+" method not defined for "+this.techName_+" playback technology.",b):"TypeError"===b.name?(z["default"]("Video.js: "+a+" unavailable on "+this.techName_+" playback technology element.",b),this.tech_.isReady_=!1):z["default"](b),b}},b.prototype.play=function(){return this.src()||this.currentSrc()?this.techCall_("play"):this.tech_.one("loadstart",function(){this.play()}),this},b.prototype.pause=function(){return this.techCall_("pause"),this},b.prototype.paused=function(){return this.techGet_("paused")===!1?!1:!0},b.prototype.scrubbing=function(a){return void 0!==a?(this.scrubbing_=!!a,a?this.addClass("vjs-scrubbing"):this.removeClass("vjs-scrubbing"),this):this.scrubbing_},b.prototype.currentTime=function(a){return void 0!==a?(this.techCall_("setCurrentTime",a),this):(this.cache_.currentTime=this.techGet_("currentTime")||0,this.cache_.currentTime)},b.prototype.duration=function(a){return void 0===a?this.cache_.duration||0:(a=parseFloat(a)||0,0>a&&(a=1/0),a!==this.cache_.duration&&(this.cache_.duration=a,a===1/0?this.addClass("vjs-live"):this.removeClass("vjs-live"),this.trigger("durationchange")),this)},b.prototype.remainingTime=function(){return this.duration()-this.currentTime()},b.prototype.buffered=function c(){var c=this.techGet_("buffered");return c&&c.length||(c=C.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return D.bufferedPercent(this.buffered(),this.duration())},b.prototype.bufferedEnd=function(){var a=this.buffered(),b=this.duration(),c=a.end(a.length-1);return c>b&&(c=b),c},b.prototype.volume=function(a){var b=void 0;return void 0!==a?(b=Math.max(0,Math.min(1,parseFloat(a))),this.cache_.volume=b,this.techCall_("setVolume",b),this):(b=parseFloat(this.techGet_("volume")),isNaN(b)?1:b)},b.prototype.muted=function(a){return void 0!==a?(this.techCall_("setMuted",a),this):this.techGet_("muted")||!1},b.prototype.supportsFullScreen=function(){return this.techGet_("supportsFullScreen")||!1},b.prototype.isFullscreen=function(a){return void 0!==a?(this.isFullscreen_=!!a,this):!!this.isFullscreen_},b.prototype.requestFullscreen=function(){var a=H["default"];return this.isFullscreen(!0),a.requestFullscreen?(p.on(l["default"],a.fullscreenchange,t.bind(this,function b(){this.isFullscreen(l["default"][a.fullscreenElement]),this.isFullscreen()===!1&&p.off(l["default"],a.fullscreenchange,b),this.trigger("fullscreenchange")})),this.el_[a.requestFullscreen]()):this.tech_.supportsFullScreen()?this.techCall_("enterFullScreen"):(this.enterFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.exitFullscreen=function(){var a=H["default"];return this.isFullscreen(!1),a.requestFullscreen?l["default"][a.exitFullscreen]():this.tech_.supportsFullScreen()?this.techCall_("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=l["default"].documentElement.style.overflow,p.on(l["default"],"keydown",t.bind(this,this.fullWindowOnEscKey)),l["default"].documentElement.style.overflow="hidden",r.addElClass(l["default"].body,"vjs-full-window"),this.trigger("enterFullWindow")},b.prototype.fullWindowOnEscKey=function(a){27===a.keyCode&&(this.isFullscreen()===!0?this.exitFullscreen():this.exitFullWindow())},b.prototype.exitFullWindow=function(){this.isFullWindow=!1,p.off(l["default"],"keydown",this.fullWindowOnEscKey),l["default"].documentElement.style.overflow=this.docOrigOverflow,r.removeElClass(l["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.canPlayType=function(a){for(var b=void 0,c=0,d=this.options_.techOrder;c<d.length;c++){var e=B["default"](d[c]),f=V["default"].getTech(e);if(f||(f=j["default"].getComponent(e)),f){if(f.isSupported()&&(b=f.canPlayType(a)))return b}else z["default"].error('The "'+e+'" tech is undefined. Skipped browser support check for that tech.')}return""},b.prototype.selectSource=function(a){var b=this,c=this.options_.techOrder.map(B["default"]).map(function(a){return[a,V["default"].getTech(a)||j["default"].getComponent(a)]}).filter(function(a){var b=a[0],c=a[1];return c?c.isSupported():(z["default"].error('The "'+b+'" tech is undefined. Skipped browser support check for that tech.'),!1)}),d=function(a,b,c){var d=void 0;return a.some(function(a){return b.some(function(b){return d=c(a,b),d?!0:void 0})}),d},e=void 0,f=function(a){return function(b,c){return a(c,b)}},g=function(a,c){var d=a[0],e=a[1];return e.canPlaySource(c,b.options_[d.toLowerCase()])?{source:c,tech:d}:void 0};return e=this.options_.sourceOrder?d(a,c,f(g)):d(c,a,g),e||!1},b.prototype.src=function(a){if(void 0===a)return this.techGet_("src");var b=V["default"].getTech(this.techName_);return b||(b=j["default"].getComponent(this.techName_)),Array.isArray(a)?this.sourceList_(a):"string"==typeof a?this.src({src:a}):a instanceof Object&&(a.type&&!b.canPlaySource(a,this.options_[this.techName_.toLowerCase()])?this.sourceList_([a]):(this.cache_.src=a.src,this.currentType_=a.type||"",this.ready(function(){b.prototype.hasOwnProperty("setSource")?this.techCall_("setSource",a):this.techCall_("src",a.src),"auto"===this.options_.preload&&this.load(),this.options_.autoplay&&this.play()},!0))),this},b.prototype.sourceList_=function(a){var b=this.selectSource(a);b?b.tech===this.techName_?this.src(b.source):this.loadTech_(b.tech,b.source):(this.setTimeout(function(){this.error({code:4,message:this.localize(this.options_.notSupportedMessage)})},0),this.triggerReady())},b.prototype.load=function(){return this.techCall_("load"),this},b.prototype.reset=function(){return this.loadTech_(B["default"](this.options_.techOrder[0]),null),this.techCall_("reset"),this},b.prototype.currentSrc=function(){return this.techGet_("currentSrc")||this.cache_.src||""},b.prototype.currentType=function(){return this.currentType_||""},b.prototype.preload=function(a){return void 0!==a?(this.techCall_("setPreload",a),this.options_.preload=a,this):this.techGet_("preload")},b.prototype.autoplay=function(a){return void 0!==a?(this.techCall_("setAutoplay",a),this.options_.autoplay=a,this):this.techGet_("autoplay",a)},b.prototype.loop=function(a){return void 0!==a?(this.techCall_("setLoop",a),this.options_.loop=a,this):this.techGet_("loop")},b.prototype.poster=function(a){return void 0===a?this.poster_:(a||(a=""),this.poster_=a,this.techCall_("setPoster",a),this.trigger("posterchange"),this)},b.prototype.handleTechPosterChange_=function(){!this.poster_&&this.tech_&&this.tech_.poster&&(this.poster_=this.tech_.poster()||"",this.trigger("posterchange"))},b.prototype.controls=function(a){return void 0!==a?(a=!!a,this.controls_!==a&&(this.controls_=a,this.usingNativeControls()&&this.techCall_("setControls",a),a?(this.removeClass("vjs-controls-disabled"),this.addClass("vjs-controls-enabled"),this.trigger("controlsenabled"),this.usingNativeControls()||this.addTechControlsListeners_()):(this.removeClass("vjs-controls-enabled"),this.addClass("vjs-controls-disabled"),this.trigger("controlsdisabled"),this.usingNativeControls()||this.removeTechControlsListeners_())),this):!!this.controls_},b.prototype.usingNativeControls=function(a){return void 0!==a?(a=!!a,this.usingNativeControls_!==a&&(this.usingNativeControls_=a,a?(this.addClass("vjs-using-native-controls"),this.trigger("usingnativecontrols")):(this.removeClass("vjs-using-native-controls"),this.trigger("usingcustomcontrols"))),this):!!this.usingNativeControls_},b.prototype.error=function(a){return void 0===a?this.error_||null:null===a?(this.error_=a,this.removeClass("vjs-error"),this.errorDisplay&&this.errorDisplay.close(),this):(this.error_=new J["default"](a),this.addClass("vjs-error"),z["default"].error("(CODE:"+this.error_.code+" "+J["default"].errorTypes[this.error_.code]+")",this.error_.message,this.error_),this.trigger("error"),this)},b.prototype.ended=function(){return this.techGet_("ended")},b.prototype.seeking=function(){return this.techGet_("seeking")},b.prototype.seekable=function(){return this.techGet_("seekable")},b.prototype.reportUserActivity=function(){this.userActivity_=!0},b.prototype.userActive=function(a){return void 0!==a?(a=!!a,a!==this.userActive_&&(this.userActive_=a,a?(this.userActivity_=!0,this.removeClass("vjs-user-inactive"),this.addClass("vjs-user-active"),this.trigger("useractive")):(this.userActivity_=!1,this.tech_&&this.tech_.one("mousemove",function(a){a.stopPropagation(),a.preventDefault()}),this.removeClass("vjs-user-active"),this.addClass("vjs-user-inactive"),this.trigger("userinactive"))),this):this.userActive_},b.prototype.listenForUserActivity_=function(){var a=void 0,b=void 0,c=void 0,d=t.bind(this,this.reportUserActivity),e=function(a){(a.screenX!==b||a.screenY!==c)&&(b=a.screenX,c=a.screenY,d())},f=function(){d(),this.clearInterval(a),a=this.setInterval(d,250)},g=function(){d(),this.clearInterval(a)};this.on("mousedown",f),this.on("mousemove",e),this.on("mouseup",g),this.on("keydown",d),this.on("keyup",d);var h=void 0;this.setInterval(function(){if(this.userActivity_){this.userActivity_=!1,this.userActive(!0),this.clearTimeout(h);var a=this.options_.inactivityTimeout;a>0&&(h=this.setTimeout(function(){this.userActivity_||this.userActive(!1)},a))}},250)},b.prototype.playbackRate=function(a){return void 0!==a?(this.techCall_("setPlaybackRate",a),this):this.tech_&&this.tech_.featuresPlaybackRate?this.techGet_("playbackRate"):1},b.prototype.isAudio=function(a){return void 0!==a?(this.isAudio_=!!a,this):!!this.isAudio_},b.prototype.networkState=function(){return this.techGet_("networkState")},b.prototype.readyState=function(){return this.techGet_("readyState")},b.prototype.videoTracks=function(){return this.tech_?this.tech_.videoTracks():(this.videoTracks_=this.videoTracks_||new Z["default"],this.videoTracks_)},b.prototype.audioTracks=function(){return this.tech_?this.tech_.audioTracks():(this.audioTracks_=this.audioTracks_||new X["default"],this.audioTracks_)},b.prototype.textTracks=function(){return this.tech_?this.tech_.textTracks():void 0},b.prototype.remoteTextTracks=function(){return this.tech_?this.tech_.remoteTextTracks():void 0},b.prototype.remoteTextTrackEls=function(){return this.tech_?this.tech_.remoteTextTrackEls():void 0},b.prototype.addTextTrack=function(a,b,c){return this.tech_?this.tech_.addTextTrack(a,b,c):void 0},b.prototype.addRemoteTextTrack=function(a){
+return this.tech_?this.tech_.addRemoteTextTrack(a):void 0},b.prototype.removeRemoteTextTrack=function(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],b=a.track,c=void 0===b?arguments[0]:b;return this.tech_?this.tech_.removeRemoteTextTrack(c):void 0},b.prototype.videoWidth=function(){return this.tech_&&this.tech_.videoWidth&&this.tech_.videoWidth()||0},b.prototype.videoHeight=function(){return this.tech_&&this.tech_.videoHeight&&this.tech_.videoHeight()||0},b.prototype.language=function(a){return void 0===a?this.language_:(this.language_=String(a).toLowerCase(),this)},b.prototype.languages=function(){return P["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=P["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;c<b.length;c++){var d=b[c];d=P["default"](d),d.player=void 0,a.tracks[c]=d}return a},b.prototype.createModal=function(a,b){var c=this;b=b||{},b.content=a||"";var d=new T["default"](this,b);return this.addChild(d),d.on("dispose",function(){c.removeChild(d)}),d.open()},b.getTagSettings=function(a){var b={sources:[],tracks:[]},c=r.getElAttributes(a),d=c["data-setup"];if(null!==d){var e=L["default"](d||"{}"),f=e[0],g=e[1];f&&z["default"].error(f),N["default"](c,g)}if(N["default"](b,c),a.hasChildNodes())for(var h=a.childNodes,i=0,j=h.length;j>i;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(r.getElAttributes(k)):"track"===l&&b.tracks.push(r.getElAttributes(k))}return b},b}(j["default"]);$.players={};var _=n["default"].navigator;$.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:["mediaLoader","posterImage","textTrackDisplay","loadingSpinner","bigPlayButton","controlBar","errorDisplay","textTrackSettings"],language:_&&(_.languages&&_.languages[0]||_.userLanguage||_.language)||"en",languages:{},notSupportedMessage:"No compatible source was found for this media."},$.prototype.handleTechLoadStart_,$.prototype.handleLoadedMetaData_,$.prototype.handleTextData_,$.prototype.handleLoadedData_,$.prototype.handleUserActive_,$.prototype.handleUserInactive_,$.prototype.handleTimeUpdate_,$.prototype.handleTechEnded_,$.prototype.handleVolumeChange_,$.prototype.handleError_,$.prototype.flexNotSupported_=function(){var a=l["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},j["default"].registerComponent("Player",$),c["default"]=$},{"./big-play-button.js":1,"./close-button.js":4,"./component.js":5,"./control-bar/control-bar.js":8,"./error-display.js":41,"./fullscreen-api.js":44,"./loading-spinner.js":45,"./media-error.js":46,"./modal-dialog":50,"./poster-image.js":55,"./tech/flash.js":59,"./tech/html5.js":60,"./tech/loader.js":61,"./tech/tech.js":62,"./tracks/audio-track-list.js":63,"./tracks/text-track-display.js":68,"./tracks/text-track-list-converter.js":69,"./tracks/text-track-settings.js":71,"./tracks/video-track-list.js":76,"./utils/browser.js":78,"./utils/buffer.js":79,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/guid.js":84,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/to-title-case.js":89,"global/document":92,"global/window":93,"object.assign":136,"safe-json-parse/tuple":145}],52:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./player.js"),f=d(e),g=function(a,b){f["default"].prototype[a]=b};c["default"]=g},{"./player.js":51}],53:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../clickable-component.js"),i=d(h),j=a("../component.js"),k=d(j),l=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b);var g=f(this,a.call(this,c,d));return g.update(),g}return g(b,a),b.prototype.update=function(){var a=this.createPopup();this.popup&&this.removeChild(this.popup),this.popup=a,this.addChild(a),this.items&&0===this.items.length?this.hide():this.items&&this.items.length>1&&this.show()},b.prototype.createPopup=function(){},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:this.buildCSSClass()})},b.prototype.buildCSSClass=function(){var b="vjs-menu-button";return b+=this.options_.inline===!0?"-inline":"-popup","vjs-menu-button "+b+" "+a.prototype.buildCSSClass.call(this)},b}(i["default"]);k["default"].registerComponent("PopupButton",l),c["default"]=l},{"../clickable-component.js":3,"../component.js":5}],54:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component.js"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=a("../utils/fn.js"),n=d(m),o=a("../utils/events.js"),p=d(o),q=function(a){function b(){return f(this,b),g(this,a.apply(this,arguments))}return h(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",n.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=l.createEl(b,{className:"vjs-menu-content"});var c=a.prototype.createEl.call(this,"div",{append:this.contentEl_,className:"vjs-menu"});return c.appendChild(this.contentEl_),p.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(j["default"]);j["default"].registerComponent("Popup",q),c["default"]=q},{"../component.js":5,"../utils/dom.js":80,"../utils/events.js":81,"../utils/fn.js":82}],55:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./clickable-component.js"),j=e(i),k=a("./component.js"),l=e(k),m=a("./utils/fn.js"),n=d(m),o=a("./utils/dom.js"),p=d(o),q=a("./utils/browser.js"),r=d(q),s=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.update(),c.on("posterchange",n.bind(e,e.update)),e}return h(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=p.createEl("div",{className:"vjs-poster",tabIndex:-1});return r.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=p.createEl("img"),a.appendChild(this.fallbackImg_)),a},b.prototype.update=function(){var a=this.player().poster();this.setSrc(a),a?this.show():this.hide()},b.prototype.setSrc=function(a){if(this.fallbackImg_)this.fallbackImg_.src=a;else{var b="";a&&(b='url("'+a+'")'),this.el_.style.backgroundImage=b}},b.prototype.handleClick=function(){this.player_.paused()?this.player_.play():this.player_.pause()},b}(j["default"]);l["default"].registerComponent("PosterImage",s),c["default"]=s},{"./clickable-component.js":3,"./component.js":5,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/fn.js":82}],56:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){b&&(n=b),setTimeout(o,a)}c.__esModule=!0,c.hasLoaded=c.autoSetupTimeout=c.autoSetup=void 0;var g=a("./utils/events.js"),h=e(g),i=a("global/document"),j=d(i),k=a("global/window"),l=d(k),m=!1,n=void 0,o=function(){var a=j["default"].getElementsByTagName("video"),b=j["default"].getElementsByTagName("audio"),c=[];if(a&&a.length>0)for(var d=0,e=a.length;e>d;d++)c.push(a[d]);if(b&&b.length>0)for(var g=0,h=b.length;h>g;g++)c.push(b[g]);if(c&&c.length>0)for(var i=0,k=c.length;k>i;i++){var l=c[i];if(!l||!l.getAttribute){f(1);break}if(void 0===l.player){var o=l.getAttribute("data-setup");null!==o&&n(l)}}else m||f(1)};"complete"===j["default"].readyState?m=!0:h.one(l["default"],"load",function(){m=!0});var p=function(){return m};c.autoSetup=o,c.autoSetupTimeout=f,c.hasLoaded=p},{"./utils/events.js":81,"global/document":92,"global/window":93}],57:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../component.js"),j=e(i),k=a("../utils/dom.js"),l=d(k),m=a("object.assign"),n=e(m),o=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.bar=e.getChild(e.options_.barName),e.vertical(!!e.options_.vertical),e.on("mousedown",e.handleMouseDown),e.on("touchstart",e.handleMouseDown),e.on("focus",e.handleFocus),e.on("blur",e.handleBlur),e.on("click",e.handleClick),e.on(c,"controlsvisible",e.update),e.on(c,e.playerEvent,e.update),e}return h(b,a),b.prototype.createEl=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];return c.className=c.className+" vjs-slider",c=n["default"]({tabIndex:0},c),d=n["default"]({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},d),a.prototype.createEl.call(this,b,c,d)},b.prototype.handleMouseDown=function(a){var b=this.bar.el_.ownerDocument;a.preventDefault(),l.blockTextSelection(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(b,"mousemove",this.handleMouseMove),this.on(b,"mouseup",this.handleMouseUp),this.on(b,"touchmove",this.handleMouseMove),this.on(b,"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){var a=this.bar.el_.ownerDocument;l.unblockTextSelection(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(a,"mousemove",this.handleMouseMove),this.off(a,"mouseup",this.handleMouseUp),this.off(a,"touchmove",this.handleMouseMove),this.off(a,"touchend",this.handleMouseUp),this.update()},b.prototype.update=function(){if(this.el_){var a=this.getPercent(),b=this.bar;if(b){("number"!=typeof a||a!==a||0>a||a===1/0)&&(a=0);var c=(100*a).toFixed(2)+"%";this.vertical()?b.el().style.height=c:b.el().style.width=c}}},b.prototype.calculateDistance=function(a){var b=l.getPointerPosition(this.el_,a);return this.vertical()?b.y:b.x},b.prototype.handleFocus=function(){this.on(this.bar.el_.ownerDocument,"keydown",this.handleKeyPress)},b.prototype.handleKeyPress=function(a){37===a.which||40===a.which?(a.preventDefault(),this.stepBack()):(38===a.which||39===a.which)&&(a.preventDefault(),this.stepForward())},b.prototype.handleBlur=function(){this.off(this.bar.el_.ownerDocument,"keydown",this.handleKeyPress)},b.prototype.handleClick=function(a){a.stopImmediatePropagation(),a.preventDefault()},b.prototype.vertical=function(a){return void 0===a?this.vertical_||!1:(this.vertical_=!!a,this.addClass(this.vertical_?"vjs-slider-vertical":"vjs-slider-horizontal"),this)},b}(j["default"]);j["default"].registerComponent("Slider",o),c["default"]=o},{"../component.js":5,"../utils/dom.js":80,"object.assign":136}],58:[function(a,b,c){"use strict";function d(a){return a.streamingFormats={"rtmp/mp4":"MP4","rtmp/flv":"FLV"},a.streamFromParts=function(a,b){return a+"&"+b},a.streamToParts=function(a){var b={connection:"",stream:""};if(!a)return b;var c=a.search(/&(?!\w+=)/),d=void 0;return-1!==c?d=c+1:(c=d=a.lastIndexOf("/")+1,0===c&&(c=d=a.length)),b.connection=a.substring(0,c),b.stream=a.substring(d,a.length),b},a.isStreamingType=function(b){return b in a.streamingFormats},a.RTMP_RE=/^rtmp[set]?:\/\//i,a.isStreamingSrc=function(b){return a.RTMP_RE.test(b)},a.rtmpSourceHandler={},a.rtmpSourceHandler.canPlayType=function(b){return a.isStreamingType(b)?"maybe":""},a.rtmpSourceHandler.canHandleSource=function(b){var c=a.rtmpSourceHandler.canPlayType(b.type);return c?c:a.isStreamingSrc(b.src)?"maybe":""},a.rtmpSourceHandler.handleSource=function(b,c){var d=a.streamToParts(b.src);c.setRtmpConnection(d.connection),c.setRtmpStream(d.stream)},a.registerSourceHandler(a.rtmpSourceHandler),a}c.__esModule=!0,c["default"]=d},{}],59:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a){var b=a.charAt(0).toUpperCase()+a.slice(1);B["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function j(a){B[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var k=a("./tech"),l=e(k),m=a("../utils/dom.js"),n=d(m),o=a("../utils/url.js"),p=d(o),q=a("../utils/time-ranges.js"),r=a("./flash-rtmp"),s=e(r),t=a("../component"),u=e(t),v=a("global/window"),w=e(v),x=a("object.assign"),y=e(x),z=w["default"].navigator,A=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return c.source&&e.ready(function(){this.setSource(c.source)},!0),c.startTime&&e.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),w["default"].videojs=w["default"].videojs||{},w["default"].videojs.Flash=w["default"].videojs.Flash||{},w["default"].videojs.Flash.onReady=b.onReady,w["default"].videojs.Flash.onEvent=b.onEvent,w["default"].videojs.Flash.onError=b.onError,e.on("seeked",function(){this.lastSeekTarget_=void 0}),e}return h(b,a),b.prototype.createEl=function(){var a=this.options_;if(!a.swf){var c="5.1.0";a.swf="//vjs.zencdn.net/swf/"+c+"/video-js.swf"}var d=a.techId,e=y["default"]({readyFunction:"videojs.Flash.onReady",eventProxyFunction:"videojs.Flash.onEvent",errorEventProxyFunction:"videojs.Flash.onError",autoplay:a.autoplay,preload:a.preload,loop:a.loop,muted:a.muted},a.flashVars),f=y["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),g=y["default"]({id:d,name:d,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,e,f,g),this.el_.tech=this,this.el_},b.prototype.play=function(){this.ended()&&this.setCurrentTime(0),this.el_.vjs_play()},b.prototype.pause=function(){this.el_.vjs_pause()},b.prototype.src=function(a){return void 0===a?this.currentSrc():this.setSrc(a)},b.prototype.setSrc=function(a){var b=this;a=p.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()&&this.setTimeout(function(){return b.play()},0)},b.prototype.seeking=function(){return void 0!==this.lastSeekTarget_},b.prototype.setCurrentTime=function(b){var c=this.seekable();c.length&&(b=b>c.start(0)?b:c.start(0),b=b<c.end(c.length-1)?b:c.end(c.length-1),this.lastSeekTarget_=b,this.trigger("seeking"),this.el_.vjs_setProperty("currentTime",b),a.prototype.setCurrentTime.call(this))},b.prototype.currentTime=function(){return this.seeking()?this.lastSeekTarget_||0:this.el_.vjs_getProperty("currentTime")},b.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.vjs_getProperty("currentSrc")},b.prototype.duration=function c(){if(0===this.readyState())return 0/0;var c=this.el_.vjs_getProperty("duration");return c>=0?c:1/0},b.prototype.load=function(){this.el_.vjs_load()},b.prototype.poster=function(){this.el_.vjs_getProperty("poster")},b.prototype.setPoster=function(){},b.prototype.seekable=function(){var a=this.duration();return 0===a?q.createTimeRange():q.createTimeRange(0,a)},b.prototype.buffered=function(){var a=this.el_.vjs_getProperty("buffered");return 0===a.length?q.createTimeRange():q.createTimeRange(a[0][0],a[0][1])},b.prototype.supportsFullScreen=function(){return!1},b.prototype.enterFullScreen=function(){return!1},b}(l["default"]),B=A.prototype,C="rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted".split(","),D="networkState,readyState,initialTime,startOffsetTime,paused,ended,videoWidth,videoHeight".split(","),E=0;E<C.length;E++)j(C[E]),i(C[E]);for(var F=0;F<D.length;F++)j(D[F]);A.isSupported=function(){return A.version()[0]>=10},l["default"].withSourceHandlers(A),A.nativeSourceHandler={},A.nativeSourceHandler.canPlayType=function(a){return a in A.formats?"maybe":""},A.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=p.getFileExtension(a);return b?"video/"+b:""}var c=void 0;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),A.nativeSourceHandler.canPlayType(c)},A.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},A.nativeSourceHandler.dispose=function(){},A.registerSourceHandler(A.nativeSourceHandler),A.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},A.onReady=function(a){var b=n.getEl(a),c=b&&b.tech;c&&c.el()&&A.checkReady(c)},A.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){A.checkReady(a)},50))},A.onEvent=function(a,b){var c=n.getEl(a).tech;c.trigger(b,Array.prototype.slice.call(arguments,2))},A.onError=function(a,b){var c=n.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},A.version=function(){var a="0,0,0";try{a=new w["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{z.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(z.plugins["Shockwave Flash 2.0"]||z.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},A.embed=function(a,b,c,d){var e=A.getEmbedCode(a,b,c,d),f=n.createEl("div",{innerHTML:e}).childNodes[0];return f},A.getEmbedCode=function(a,b,c,d){var e='<object type="application/x-shockwave-flash" ',f="",g="",h="";return b&&Object.getOwnPropertyNames(b).forEach(function(a){f+=a+"="+b[a]+"&amp;"}),c=y["default"]({movie:a,flashvars:f,allowScriptAccess:"always",allowNetworking:"all"},c),Object.getOwnPropertyNames(c).forEach(function(a){g+='<param name="'+a+'" value="'+c[a]+'" />'}),d=y["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+"</object>"},s["default"](A),u["default"].registerComponent("Flash",A),l["default"].registerTech("Flash",A),c["default"]=A},{"../component":5,"../utils/dom.js":80,"../utils/time-ranges.js":88,"../utils/url.js":90,"./flash-rtmp":58,"./tech":62,"global/window":93,"object.assign":136}],60:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){return a.raw=b,a}function g(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function h(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function i(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},k=f(["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n            This may prevent text tracks from loading."],["Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\n            This may prevent text tracks from loading."]),l=a("./tech.js"),m=e(l),n=a("../component"),o=e(n),p=a("../utils/dom.js"),q=d(p),r=a("../utils/url.js"),s=d(r),t=a("../utils/fn.js"),u=d(t),v=a("../utils/log.js"),w=e(v),x=a("tsml"),y=e(x),z=a("../utils/browser.js"),A=d(z),B=a("global/document"),C=e(B),D=a("global/window"),E=e(D),F=a("object.assign"),G=e(F),H=a("../utils/merge-options.js"),I=e(H),J=a("../utils/to-title-case.js"),K=e(J),L=function(a){function b(c,d){g(this,b);var e=h(this,a.call(this,c,d)),f=c.source,i=!1;if(f&&(e.el_.currentSrc!==f.src||c.tag&&3===c.tag.initNetworkState_)?e.setSource(f):e.handleLateInit_(e.el_),e.el_.hasChildNodes()){for(var j=e.el_.childNodes,l=j.length,m=[];l--;){var n=j[l],o=n.nodeName.toLowerCase();"track"===o&&(e.featuresNativeTextTracks?(e.remoteTextTrackEls().addTrackElement_(n),e.remoteTextTracks().addTrack_(n.track),i||e.el_.hasAttribute("crossorigin")||!s.isCrossOrigin(n.src)||(i=!0)):m.push(n))}for(var p=0;p<m.length;p++)e.el_.removeChild(m[p])}var q=["audio","video"];return q.forEach(function(a){var b=K["default"](a);if(e["featuresNative"+b+"Tracks"]){var c=e.el()[a+"Tracks"];c&&c.addEventListener&&(c.addEventListener("change",u.bind(e,e["handle"+b+"TrackChange_"])),c.addEventListener("addtrack",u.bind(e,e["handle"+b+"TrackAdd_"])),c.addEventListener("removetrack",u.bind(e,e["handle"+b+"TrackRemove_"])),e.on("loadstart",e["removeOld"+b+"Tracks_"]))}}),e.featuresNativeTextTracks&&(i&&w["default"].warn(y["default"](k)),e.handleTextTrackChange_=u.bind(e,e.handleTextTrackChange),e.handleTextTrackAdd_=u.bind(e,e.handleTextTrackAdd),e.handleTextTrackRemove_=u.bind(e,e.handleTextTrackRemove),e.proxyNativeTextTracks_()),(A.TOUCH_ENABLED||A.IS_IPHONE||A.IS_NATIVE_ANDROID)&&c.nativeControlsForTouch===!0&&e.setControls(!0),e.triggerReady(),e}return i(b,a),b.prototype.dispose=function(){var c=this;["audio","video","text"].forEach(function(a){var b=K["default"](a),d=c.el_[a+"Tracks"];d&&d.removeEventListener&&(d.removeEventListener("change",c["handle"+b+"TrackChange_"]),d.removeEventListener("addtrack",c["handle"+b+"TrackAdd_"]),d.removeEventListener("removetrack",c["handle"+b+"TrackRemove_"])),d&&c.off("loadstart",c["removeOld"+b+"Tracks_"])}),b.disposeMediaElement(this.el_),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=this.options_.tag;if(!a||this.movingMediaElementInDOM===!1)if(a){var c=a.cloneNode(!0);a.parentNode.insertBefore(c,a),b.disposeMediaElement(a),a=c}else{a=C["default"].createElement("video");var d=this.options_.tag&&q.getElAttributes(this.options_.tag),e=I["default"]({},d);A.TOUCH_ENABLED&&this.options_.nativeControlsForTouch===!0||delete e.controls,q.setElAttributes(a,G["default"](e,{id:this.options_.techId,"class":"vjs-tech"}))}for(var f=["autoplay","preload","loop","muted"],g=f.length-1;g>=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),q.setElAttributes(a,i)}return a},b.prototype.handleLateInit_=function(a){var b=this;if(0!==a.networkState&&3!==a.networkState){if(0===a.readyState){var c=function(){var a=!1,c=function(){a=!0};b.on("loadstart",c);var d=function(){a||this.trigger("loadstart")};return b.on("loadedmetadata",d),b.ready(function(){this.off("loadstart",c),this.off("loadedmetadata",d),a||this.trigger("loadstart")}),{v:void 0}}();if("object"===("undefined"==typeof c?"undefined":j(c)))return c.v}var d=["loadstart"];d.push("loadedmetadata"),a.readyState>=2&&d.push("loadeddata"),a.readyState>=3&&d.push("canplay"),a.readyState>=4&&d.push("canplaythrough"),this.ready(function(){d.forEach(function(a){this.trigger(a)},this)})}},b.prototype.proxyNativeTextTracks_=function(){var a=this.el().textTracks;if(a){for(var b=0;b<a.length;b++)this.textTracks().addTrack_(a[b]);a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_)),this.on("loadstart",this.removeOldTextTracks_)}},b.prototype.handleTextTrackChange=function(){var a=this.textTracks();this.textTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleTextTrackAdd=function(a){this.textTracks().addTrack_(a.track)},b.prototype.handleTextTrackRemove=function(a){this.textTracks().removeTrack_(a.track)},b.prototype.handleVideoTrackChange_=function(){var a=this.videoTracks();this.videoTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleVideoTrackAdd_=function(a){this.videoTracks().addTrack_(a.track)},b.prototype.handleVideoTrackRemove_=function(a){this.videoTracks().removeTrack_(a.track)},b.prototype.handleAudioTrackChange_=function(){var a=this.audioTracks();this.audioTracks().trigger({type:"change",target:a,currentTarget:a,srcElement:a})},b.prototype.handleAudioTrackAdd_=function(a){this.audioTracks().addTrack_(a.track)},b.prototype.handleAudioTrackRemove_=function(a){this.audioTracks().removeTrack_(a.track)},b.prototype.removeOldTracks_=function(a,b){var c=[];if(b){for(var d=0;d<a.length;d++){for(var e=a[d],f=!1,g=0;g<b.length;g++)if(b[g]===e){f=!0;break}f||c.push(e)}for(var h=0;h<c.length;h++){var i=c[h];a.removeTrack_(i)}}},b.prototype.removeOldTextTracks_=function(){var a=this.textTracks(),b=this.el().textTracks;this.removeOldTracks_(a,b)},b.prototype.removeOldAudioTracks_=function(){var a=this.audioTracks(),b=this.el().audioTracks;this.removeOldTracks_(a,b)},b.prototype.removeOldVideoTracks_=function(){var a=this.videoTracks(),b=this.el().videoTracks;this.removeOldTracks_(a,b)},b.prototype.play=function(){var a=this.el_.play();void 0!==a&&"function"==typeof a.then&&a.then(null,function(){})},b.prototype.pause=function(){this.el_.pause()},b.prototype.paused=function(){return this.el_.paused},b.prototype.currentTime=function(){return this.el_.currentTime},b.prototype.setCurrentTime=function(a){try{this.el_.currentTime=a}catch(b){w["default"](b,"Video is not ready. (Video.js)")}},b.prototype.duration=function(){return this.el_.duration||0},b.prototype.buffered=function(){return this.el_.buffered},b.prototype.volume=function(){return this.el_.volume},b.prototype.setVolume=function(a){this.el_.volume=a},b.prototype.muted=function(){return this.el_.muted},b.prototype.setMuted=function(a){this.el_.muted=a},b.prototype.width=function(){return this.el_.offsetWidth},b.prototype.height=function(){return this.el_.offsetHeight},b.prototype.supportsFullScreen=function(){if("function"==typeof this.el_.webkitEnterFullScreen){var a=E["default"].navigator&&E["default"].navigator.userAgent||"";if(/Android/.test(a)||!/Chrome|Mac OS X 10.5/.test(a))return!0}return!1},b.prototype.enterFullScreen=function(){var a=this.el_;"webkitDisplayingFullscreen"in a&&this.one("webkitbeginfullscreen",function(){this.one("webkitendfullscreen",function(){this.trigger("fullscreenchange",{isFullscreen:!1})}),this.trigger("fullscreenchange",{isFullscreen:!0})}),a.paused&&a.networkState<=a.HAVE_METADATA?(this.el_.play(),this.setTimeout(function(){a.pause(),a.webkitEnterFullScreen()},0)):a.webkitEnterFullScreen()},b.prototype.exitFullScreen=function(){this.el_.webkitExitFullScreen()},b.prototype.src=function(a){return void 0===a?this.el_.src:void this.setSrc(a)},b.prototype.setSrc=function(a){this.el_.src=a},b.prototype.load=function(){this.el_.load()},b.prototype.reset=function(){b.resetMediaElement(this.el_)},b.prototype.currentSrc=function(){return this.currentSource_?this.currentSource_.src:this.el_.currentSrc},b.prototype.poster=function(){return this.el_.poster},b.prototype.setPoster=function(a){this.el_.poster=a},b.prototype.preload=function(){return this.el_.preload},b.prototype.setPreload=function(a){this.el_.preload=a},b.prototype.autoplay=function(){return this.el_.autoplay},b.prototype.setAutoplay=function(a){this.el_.autoplay=a},b.prototype.controls=function(){return this.el_.controls},b.prototype.setControls=function(a){this.el_.controls=!!a},b.prototype.loop=function(){return this.el_.loop},b.prototype.setLoop=function(a){this.el_.loop=a},b.prototype.error=function(){return this.el_.error},b.prototype.seeking=function(){return this.el_.seeking},b.prototype.seekable=function(){return this.el_.seekable},b.prototype.ended=function(){return this.el_.ended},b.prototype.defaultMuted=function(){return this.el_.defaultMuted},b.prototype.playbackRate=function(){return this.el_.playbackRate},b.prototype.played=function(){return this.el_.played},b.prototype.setPlaybackRate=function(a){this.el_.playbackRate=a},b.prototype.networkState=function(){return this.el_.networkState},b.prototype.readyState=function(){return this.el_.readyState},b.prototype.videoWidth=function(){return this.el_.videoWidth},b.prototype.videoHeight=function(){return this.el_.videoHeight},b.prototype.textTracks=function(){return a.prototype.textTracks.call(this)},b.prototype.addTextTrack=function(b,c,d){return this.featuresNativeTextTracks?this.el_.addTextTrack(b,c,d):a.prototype.addTextTrack.call(this,b,c,d)},b.prototype.addRemoteTextTrack=function(){var b=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!this.featuresNativeTextTracks)return a.prototype.addRemoteTextTrack.call(this,b);var c=C["default"].createElement("track");return b.kind&&(c.kind=b.kind),b.label&&(c.label=b.label),(b.language||b.srclang)&&(c.srclang=b.language||b.srclang),b["default"]&&(c["default"]=b["default"]),b.id&&(c.id=b.id),b.src&&(c.src=b.src),this.el().appendChild(c),this.remoteTextTrackEls().addTrackElement_(c),
+this.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c=this.remoteTextTrackEls().getTrackElementByTrack_(b);this.remoteTextTrackEls().removeTrackElement_(c),this.remoteTextTracks().removeTrack_(b);for(var d=this.$$("track"),e=d.length;e--;)(b===d[e]||b===d[e].track)&&this.el().removeChild(d[e])},b}(m["default"]);L.TEST_VID=C["default"].createElement("video");var M=C["default"].createElement("track");M.kind="captions",M.srclang="en",M.label="English",L.TEST_VID.appendChild(M),L.isSupported=function(){try{L.TEST_VID.volume=.5}catch(a){return!1}return!!L.TEST_VID.canPlayType},m["default"].withSourceHandlers(L),L.nativeSourceHandler={},L.nativeSourceHandler.canPlayType=function(a){try{return L.TEST_VID.canPlayType(a)}catch(b){return""}},L.nativeSourceHandler.canHandleSource=function(a){if(a.type)return L.nativeSourceHandler.canPlayType(a.type);if(a.src){var b=s.getFileExtension(a.src);return L.nativeSourceHandler.canPlayType("video/"+b)}return""},L.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},L.nativeSourceHandler.dispose=function(){},L.registerSourceHandler(L.nativeSourceHandler),L.canControlVolume=function(){try{var a=L.TEST_VID.volume;return L.TEST_VID.volume=a/2+.1,a!==L.TEST_VID.volume}catch(b){return!1}},L.canControlPlaybackRate=function(){if(A.IS_ANDROID&&A.IS_CHROME)return!1;try{var a=L.TEST_VID.playbackRate;return L.TEST_VID.playbackRate=a/2+.1,a!==L.TEST_VID.playbackRate}catch(b){return!1}},L.supportsNativeTextTracks=function(){var a=void 0;return a=!!L.TEST_VID.textTracks,a&&L.TEST_VID.textTracks.length>0&&(a="number"!=typeof L.TEST_VID.textTracks[0].mode),a&&A.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in L.TEST_VID.textTracks||(a=!1),a},L.supportsNativeVideoTracks=function(){var a=!!L.TEST_VID.videoTracks;return a},L.supportsNativeAudioTracks=function(){var a=!!L.TEST_VID.audioTracks;return a},L.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],L.prototype.featuresVolumeControl=L.canControlVolume(),L.prototype.featuresPlaybackRate=L.canControlPlaybackRate(),L.prototype.movingMediaElementInDOM=!A.IS_IOS,L.prototype.featuresFullscreenResize=!0,L.prototype.featuresProgressEvents=!0,L.prototype.featuresNativeTextTracks=L.supportsNativeTextTracks(),L.prototype.featuresNativeVideoTracks=L.supportsNativeVideoTracks(),L.prototype.featuresNativeAudioTracks=L.supportsNativeAudioTracks();var N=void 0,O=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,P=/^video\/mp4/i;L.patchCanPlayType=function(){A.ANDROID_VERSION>=4&&(N||(N=L.TEST_VID.constructor.prototype.canPlayType),L.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&O.test(a)?"maybe":N.call(this,a)}),A.IS_OLD_ANDROID&&(N||(N=L.TEST_VID.constructor.prototype.canPlayType),L.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&P.test(a)?"maybe":N.call(this,a)})},L.unpatchCanPlayType=function(){var a=L.TEST_VID.constructor.prototype.canPlayType;return L.TEST_VID.constructor.prototype.canPlayType=N,N=null,a},L.patchCanPlayType(),L.disposeMediaElement=function(a){if(a){for(a.parentNode&&a.parentNode.removeChild(a);a.hasChildNodes();)a.removeChild(a.firstChild);a.removeAttribute("src"),"function"==typeof a.load&&!function(){try{a.load()}catch(b){}}()}},L.resetMediaElement=function(a){if(a){for(var b=a.querySelectorAll("source"),c=b.length;c--;)a.removeChild(b[c]);a.removeAttribute("src"),"function"==typeof a.load&&!function(){try{a.load()}catch(b){}}()}},o["default"].registerComponent("Html5",L),m["default"].registerTech("Html5",L),c["default"]=L},{"../component":5,"../utils/browser.js":78,"../utils/dom.js":80,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/to-title-case.js":89,"../utils/url.js":90,"./tech.js":62,"global/document":92,"global/window":93,"object.assign":136,tsml:146}],61:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function g(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var h=a("../component.js"),i=d(h),j=a("./tech.js"),k=d(j),l=a("../utils/to-title-case.js"),m=d(l),n=function(a){function b(c,d,g){e(this,b);var h=f(this,a.call(this,c,d,g));if(d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var j=0,l=d.playerOptions.techOrder;j<l.length;j++){var n=m["default"](l[j]),o=k["default"].getTech(n);if(n||(o=i["default"].getComponent(n)),o&&o.isSupported()){c.loadTech_(n);break}}return h}return g(b,a),b}(i["default"]);i["default"].registerComponent("MediaLoader",n),c["default"]=n},{"../component.js":5,"../utils/to-title-case.js":89,"./tech.js":62}],62:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c,d){var e=arguments.length<=4||void 0===arguments[4]?{}:arguments[4],f=a.textTracks();e.kind=b,c&&(e.label=c),d&&(e.language=d),e.tech=a;var g=new s["default"](e);return f.addTrack_(g),g}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../tracks/html-track-element"),m=e(l),n=a("../tracks/html-track-element-list"),o=e(n),p=a("../utils/merge-options.js"),q=e(p),r=a("../tracks/text-track"),s=e(r),t=a("../tracks/text-track-list"),u=e(t),v=a("../tracks/video-track-list"),w=e(v),x=a("../tracks/audio-track-list"),y=e(x),z=a("../utils/fn.js"),A=d(z),B=a("../utils/log.js"),C=e(B),D=a("../utils/time-ranges.js"),E=a("../utils/buffer.js"),F=a("../media-error.js"),G=e(F),H=a("global/window"),I=e(H),J=a("global/document"),K=e(J),L=function(a){function b(){var c=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],d=arguments.length<=1||void 0===arguments[1]?function(){}:arguments[1];f(this,b),c.reportTouchActivity=!1;var e=g(this,a.call(this,null,c,d));return e.hasStarted_=!1,e.on("playing",function(){this.hasStarted_=!0}),e.on("loadstart",function(){this.hasStarted_=!1}),e.textTracks_=c.textTracks,e.videoTracks_=c.videoTracks,e.audioTracks_=c.audioTracks,e.featuresProgressEvents||e.manualProgressOn(),e.featuresTimeupdateEvents||e.manualTimeUpdatesOn(),(c.nativeCaptions===!1||c.nativeTextTracks===!1)&&(e.featuresNativeTextTracks=!1),e.featuresNativeTextTracks||e.on("ready",e.emulateTextTracks),e.initTextTrackListeners(),e.initTrackListeners(),e.emitTapEvents(),e}return h(b,a),b.prototype.manualProgressOn=function(){this.on("durationchange",this.onDurationChange),this.manualProgress=!0,this.one("ready",this.trackProgress)},b.prototype.manualProgressOff=function(){this.manualProgress=!1,this.stopTrackingProgress(),this.off("durationchange",this.onDurationChange)},b.prototype.trackProgress=function(){this.stopTrackingProgress(),this.progressInterval=this.setInterval(A.bind(this,function(){var a=this.bufferedPercent();this.bufferedPercent_!==a&&this.trigger("progress"),this.bufferedPercent_=a,1===a&&this.stopTrackingProgress()}),500)},b.prototype.onDurationChange=function(){this.duration_=this.duration()},b.prototype.buffered=function(){return D.createTimeRange(0,0)},b.prototype.bufferedPercent=function(){return E.bufferedPercent(this.buffered(),this.duration_)},b.prototype.stopTrackingProgress=function(){this.clearInterval(this.progressInterval)},b.prototype.manualTimeUpdatesOn=function(){this.manualTimeUpdates=!0,this.on("play",this.trackCurrentTime),this.on("pause",this.stopTrackingCurrentTime)},b.prototype.manualTimeUpdatesOff=function(){this.manualTimeUpdates=!1,this.stopTrackingCurrentTime(),this.off("play",this.trackCurrentTime),this.off("pause",this.stopTrackingCurrentTime)},b.prototype.trackCurrentTime=function(){this.currentTimeInterval&&this.stopTrackingCurrentTime(),this.currentTimeInterval=this.setInterval(function(){this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},250)},b.prototype.stopTrackingCurrentTime=function(){this.clearInterval(this.currentTimeInterval),this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.dispose=function(){this.clearTracks(["audio","video","text"]),this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),a.prototype.dispose.call(this)},b.prototype.clearTracks=function(a){var b=this;a=[].concat(a),a.forEach(function(a){for(var c=b[a+"Tracks"]()||[],d=c.length;d--;){var e=c[d];"text"===a&&b.removeRemoteTextTrack(e),c.removeTrack_(e)}})},b.prototype.reset=function(){},b.prototype.error=function(a){return void 0!==a&&(this.error_=new G["default"](a),this.trigger("error")),this.error_},b.prototype.played=function(){return this.hasStarted_?D.createTimeRange(0,0):D.createTimeRange()},b.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.initTextTrackListeners=function(){var a=A.bind(this,function(){this.trigger("texttrackchange")}),b=this.textTracks();b&&(b.addEventListener("removetrack",a),b.addEventListener("addtrack",a),this.on("dispose",A.bind(this,function(){b.removeEventListener("removetrack",a),b.removeEventListener("addtrack",a)})))},b.prototype.initTrackListeners=function(){var a=this,b=["video","audio"];b.forEach(function(b){var c=function(){a.trigger(b+"trackchange")},d=a[b+"Tracks"]();d.addEventListener("removetrack",c),d.addEventListener("addtrack",c),a.on("dispose",function(){d.removeEventListener("removetrack",c),d.removeEventListener("addtrack",c)})})},b.prototype.emulateTextTracks=function(){var a=this,b=this.textTracks();if(b){I["default"].WebVTT||null===this.el().parentNode||void 0===this.el().parentNode||!function(){var b=K["default"].createElement("script");b.src=a.options_["vtt.js"]||"https://cdn.rawgit.com/gkatsev/vtt.js/vjs-v0.12.1/dist/vtt.min.js",b.onload=function(){a.trigger("vttjsloaded")},b.onerror=function(){a.trigger("vttjserror")},a.on("dispose",function(){b.onload=null,b.onerror=null}),I["default"].WebVTT=!0,a.el().parentNode.appendChild(b)}();var c=function(){return a.trigger("texttrackchange")},d=function(){c();for(var a=0;a<b.length;a++){var d=b[a];d.removeEventListener("cuechange",c),"showing"===d.mode&&d.addEventListener("cuechange",c)}};d(),b.addEventListener("change",d),this.on("dispose",function(){b.removeEventListener("change",d)})}},b.prototype.videoTracks=function(){return this.videoTracks_=this.videoTracks_||new w["default"],this.videoTracks_},b.prototype.audioTracks=function(){return this.audioTracks_=this.audioTracks_||new y["default"],this.audioTracks_},b.prototype.textTracks=function(){return this.textTracks_=this.textTracks_||new u["default"],this.textTracks_},b.prototype.remoteTextTracks=function(){return this.remoteTextTracks_=this.remoteTextTracks_||new u["default"],this.remoteTextTracks_},b.prototype.remoteTextTrackEls=function(){return this.remoteTextTrackEls_=this.remoteTextTrackEls_||new o["default"],this.remoteTextTrackEls_},b.prototype.addTextTrack=function(a,b,c){if(!a)throw new Error("TextTrack kind is required but was not provided");return i(this,a,b,c)},b.prototype.addRemoteTextTrack=function(a){var b=q["default"](a,{tech:this}),c=new m["default"](b);return this.remoteTextTrackEls().addTrackElement_(c),this.remoteTextTracks().addTrack_(c.track),this.textTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(a){this.textTracks().removeTrack_(a);var b=this.remoteTextTrackEls().getTrackElementByTrack_(a);this.remoteTextTrackEls().removeTrackElement_(b),this.remoteTextTracks().removeTrack_(a)},b.prototype.setPoster=function(){},b.prototype.canPlayType=function(){return""},b.isTech=function(a){return a.prototype instanceof b||a instanceof b||a===b},b.registerTech=function(a,c){if(b.techs_||(b.techs_={}),!b.isTech(c))throw new Error("Tech "+a+" must be a Tech");return b.techs_[a]=c,c},b.getTech=function(a){return b.techs_&&b.techs_[a]?b.techs_[a]:I["default"]&&I["default"].videojs&&I["default"].videojs[a]?(C["default"].warn("The "+a+" tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"),I["default"].videojs[a]):void 0},b}(k["default"]);L.prototype.textTracks_,L.prototype.audioTracks_,L.prototype.videoTracks_,L.prototype.featuresVolumeControl=!0,L.prototype.featuresFullscreenResize=!1,L.prototype.featuresPlaybackRate=!1,L.prototype.featuresProgressEvents=!1,L.prototype.featuresTimeupdateEvents=!1,L.prototype.featuresNativeTextTracks=!1,L.withSourceHandlers=function(a){a.registerSourceHandler=function(b,c){var d=a.sourceHandlers;d||(d=a.sourceHandlers=[]),void 0===c&&(c=d.length),d.splice(c,0,b)},a.canPlayType=function(b){for(var c=a.sourceHandlers||[],d=void 0,e=0;e<c.length;e++)if(d=c[e].canPlayType(b))return d;return""},a.selectSourceHandler=function(b,c){for(var d=a.sourceHandlers||[],e=void 0,f=0;f<d.length;f++)if(e=d[f].canHandleSource(b,c))return d[f];return null},a.canPlaySource=function(b,c){var d=a.selectSourceHandler(b,c);return d?d.canHandleSource(b,c):""};var b=["seekable","duration"];b.forEach(function(a){var b=this[a];"function"==typeof b&&(this[a]=function(){return this.sourceHandler_&&this.sourceHandler_[a]?this.sourceHandler_[a].apply(this.sourceHandler_,arguments):b.apply(this,arguments)})},a.prototype),a.prototype.setSource=function(b){var c=a.selectSourceHandler(b,this.options_);return c||(a.nativeSourceHandler?c=a.nativeSourceHandler:C["default"].error("No source hander found for the current source.")),this.disposeSourceHandler(),this.off("dispose",this.disposeSourceHandler),this.currentSource_&&(this.clearTracks(["audio","video"]),this.currentSource_=null),c!==a.nativeSourceHandler&&(this.currentSource_=b,this.off(this.el_,"loadstart",a.prototype.firstLoadStartListener_),this.off(this.el_,"loadstart",a.prototype.successiveLoadStartListener_),this.one(this.el_,"loadstart",a.prototype.firstLoadStartListener_)),this.sourceHandler_=c.handleSource(b,this,this.options_),this.on("dispose",this.disposeSourceHandler),this},a.prototype.firstLoadStartListener_=function(){this.one(this.el_,"loadstart",a.prototype.successiveLoadStartListener_)},a.prototype.successiveLoadStartListener_=function(){this.currentSource_=null,this.disposeSourceHandler(),this.one(this.el_,"loadstart",a.prototype.successiveLoadStartListener_)},a.prototype.disposeSourceHandler=function(){this.sourceHandler_&&this.sourceHandler_.dispose&&(this.off(this.el_,"loadstart",a.prototype.firstLoadStartListener_),this.off(this.el_,"loadstart",a.prototype.successiveLoadStartListener_),this.sourceHandler_.dispose(),this.sourceHandler_=null)}},k["default"].registerComponent("Tech",L),k["default"].registerComponent("MediaTechController",L),L.registerTech("Tech",L),c["default"]=L},{"../component":5,"../media-error.js":46,"../tracks/audio-track-list":63,"../tracks/html-track-element":66,"../tracks/html-track-element-list":65,"../tracks/text-track":72,"../tracks/text-track-list":70,"../tracks/video-track-list":76,"../utils/buffer.js":79,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options.js":86,"../utils/time-ranges.js":88,"global/document":92,"global/window":93}],63:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-list"),j=e(i),k=a("../utils/browser.js"),l=d(k),m=a("global/document"),n=e(m),o=function(a,b){for(var c=0;c<a.length;c++)b.id!==a[c].id&&(a[c].enabled=!1)},p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,b);for(var h=void 0,i=e.length-1;i>=0;i--)if(e[i].enabled){o(e,e[i]);break}if(l.IS_IE8){h=n["default"].createElement("custom");for(var k in j["default"].prototype)"constructor"!==k&&(h[k]=j["default"].prototype[k]);for(var m in b.prototype)"constructor"!==m&&(h[m]=b.prototype[m])}return h=c=g(this,a.call(this,e,h)),h.changing_=!1,d=h,g(c,d)}return h(b,a),b.prototype.addTrack_=function(b){var c=this;b.enabled&&o(this,b),a.prototype.addTrack_.call(this,b),b.addEventListener&&b.addEventListener("enabledchange",function(){c.changing_||(c.changing_=!0,o(c,b),c.changing_=!1,c.trigger("change"))})},b.prototype.addTrack=function(a){this.addTrack_(a)},b.prototype.removeTrack=function(b){a.prototype.removeTrack_.call(this,b)},b}(j["default"]);c["default"]=p},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],64:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-enums"),j=a("./track"),k=e(j),l=a("../utils/merge-options"),m=e(l),n=a("../utils/browser.js"),o=d(n),p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var h=m["default"](e,{kind:i.AudioTrackKind[e.kind]||""}),j=c=g(this,a.call(this,h)),k=!1;if(o.IS_IE8)for(var l in b.prototype)"constructor"!==l&&(j[l]=b.prototype[l]);return Object.defineProperty(j,"enabled",{get:function(){return k},set:function(a){"boolean"==typeof a&&a!==k&&(k=a,this.trigger("enabledchange"))}}),h.enabled&&(j.enabled=h.enabled),j.loaded_=!0,d=j,g(c,d)}return h(b,a),b}(k["default"]);c["default"]=p},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],65:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("../utils/browser.js"),h=e(g),i=a("global/document"),j=d(i),k=function(){function a(){var b=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,a);var c=this;if(h.IS_IE8){c=j["default"].createElement("custom");for(var d in a.prototype)"constructor"!==d&&(c[d]=a.prototype[d])}c.trackElements_=[],Object.defineProperty(c,"length",{get:function(){return this.trackElements_.length}});for(var e=0,g=b.length;g>e;e++)c.addTrackElement_(b[e]);return h.IS_IE8?c:void 0}return a.prototype.addTrackElement_=function(a){this.trackElements_.push(a)},a.prototype.getTrackElementByTrack_=function(a){for(var b=void 0,c=0,d=this.trackElements_.length;d>c;c++)if(a===this.trackElements_[c].track){b=this.trackElements_[c];break}return b},a.prototype.removeTrackElement_=function(a){for(var b=0,c=this.trackElements_.length;c>b;b++)if(a===this.trackElements_[b]){this.trackElements_.splice(b,1);break}},a}();c["default"]=k},{"../utils/browser.js":78,"global/document":92}],66:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../utils/browser.js"),j=e(i),k=a("global/document"),l=d(k),m=a("../event-target"),n=d(m),o=a("../tracks/text-track"),p=d(o),q=0,r=1,s=2,t=3,u=function(a){function b(){var c=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var d=g(this,a.call(this)),e=void 0,h=d;if(j.IS_IE8){h=l["default"].createElement("custom");for(var i in b.prototype)"constructor"!==i&&(h[i]=b.prototype[i])}var k=new p["default"](c);if(h.kind=k.kind,h.src=k.src,h.srclang=k.language,h.label=k.label,h["default"]=k["default"],Object.defineProperty(h,"readyState",{get:function(){return e}}),Object.defineProperty(h,"track",{get:function(){return k}}),e=q,k.addEventListener("loadeddata",function(){e=s,h.trigger({type:"load",target:h})}),j.IS_IE8){var m;return m=h,g(d,m)}return d}return h(b,a),b}(n["default"]);u.prototype.allowedEvents_={load:"load"},u.NONE=q,u.LOADING=r,u.LOADED=s,u.ERROR=t,c["default"]=u},{"../event-target":42,"../tracks/text-track":72,"../utils/browser.js":78,"global/document":92}],67:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}c.__esModule=!0;var g=a("../utils/browser.js"),h=e(g),i=a("global/document"),j=d(i),k=function(){function a(b){f(this,a);var c=this;if(h.IS_IE8){c=j["default"].createElement("custom");for(var d in a.prototype)"constructor"!==d&&(c[d]=a.prototype[d])}return a.prototype.setCues_.call(c,b),Object.defineProperty(c,"length",{get:function(){return this.length_}}),h.IS_IE8?c:void 0}return a.prototype.setCues_=function(a){var b=this.length||0,c=0,d=a.length;this.cues_=a,this.length_=a.length;var e=function(a){""+a in this||Object.defineProperty(this,""+a,{get:function(){return this.cues_[a]}})};if(d>b)for(c=b;d>c;c++)e.call(this,c)},a.prototype.getCueById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},a}();c["default"]=k},{"../utils/browser.js":78,"global/document":92}],68:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function j(a,b,c){try{a.style[b]=c}catch(d){return}}c.__esModule=!0;var k=a("../component"),l=e(k),m=a("../utils/fn.js"),n=d(m),o=a("global/window"),p=e(o),q="#222",r="#ccc",s={monospace:"monospace",sansSerif:"sans-serif",serif:"serif",monospaceSansSerif:'"Andale Mono", "Lucida Console", monospace',monospaceSerif:'"Courier New", monospace',proportionalSansSerif:"sans-serif",proportionalSerif:"serif",casual:'"Comic Sans MS", Impact, fantasy',script:'"Monotype Corsiva", cursive',smallcaps:'"Andale Mono", "Lucida Console", monospace, sans-serif'},t=function(a){function b(c,d,e){f(this,b);var h=g(this,a.call(this,c,d,e));return c.on("loadstart",n.bind(h,h.toggleDisplay)),c.on("texttrackchange",n.bind(h,h.updateDisplay)),c.ready(n.bind(h,function(){if(c.tech_&&c.tech_.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",n.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;b<a.length;b++)this.player_.addRemoteTextTrack(a[b]);var d={captions:1,subtitles:1},e=this.player_.textTracks(),f=void 0,g=void 0;if(e){for(var h=0;h<e.length;h++){var i=e[h];i["default"]&&("descriptions"!==i.kind||f?i.kind in d&&!g&&(g=i):f=i)}g?g.mode="showing":f&&(f.mode="showing")}})),h}return h(b,a),b.prototype.toggleDisplay=function(){this.player_.tech_&&this.player_.tech_.featuresNativeTextTracks?this.hide():this.show()},b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-text-track-display"},{"aria-live":"assertive","aria-atomic":"true"})},b.prototype.clearDisplay=function(){"function"==typeof p["default"].WebVTT&&p["default"].WebVTT.processCues(p["default"],[],this.el_)},b.prototype.updateDisplay=function(){var a=this.player_.textTracks();if(this.clearDisplay(),a){for(var b=null,c=null,d=a.length;d--;){var e=a[d];"showing"===e.mode&&("descriptions"===e.kind?b=e:c=e)}c?this.updateForTrack(c):b&&this.updateForTrack(b)}},b.prototype.updateForTrack=function(a){if("function"==typeof p["default"].WebVTT&&a.activeCues){for(var b=this.player_.textTrackSettings.getValues(),c=[],d=0;d<a.activeCues.length;d++)c.push(a.activeCues[d]);p["default"].WebVTT.processCues(p["default"],c,this.el_);for(var e=c.length;e--;){var f=c[e];if(f){var g=f.displayState;if(b.color&&(g.firstChild.style.color=b.color),b.textOpacity&&j(g.firstChild,"color",i(b.color||"#fff",b.textOpacity)),b.backgroundColor&&(g.firstChild.style.backgroundColor=b.backgroundColor),b.backgroundOpacity&&j(g.firstChild,"backgroundColor",i(b.backgroundColor||"#000",b.backgroundOpacity)),b.windowColor&&(b.windowOpacity?j(g,"backgroundColor",i(b.windowColor,b.windowOpacity)):g.style.backgroundColor=b.windowColor),b.edgeStyle&&("dropshadow"===b.edgeStyle?g.firstChild.style.textShadow="2px 2px 3px "+q+", 2px 2px 4px "+q+", 2px 2px 5px "+q:"raised"===b.edgeStyle?g.firstChild.style.textShadow="1px 1px "+q+", 2px 2px "+q+", 3px 3px "+q:"depressed"===b.edgeStyle?g.firstChild.style.textShadow="1px 1px "+r+", 0 1px "+r+", -1px -1px "+q+", 0 -1px "+q:"uniform"===b.edgeStyle&&(g.firstChild.style.textShadow="0 0 4px "+q+", 0 0 4px "+q+", 0 0 4px "+q+", 0 0 4px "+q)),b.fontPercent&&1!==b.fontPercent){var h=p["default"].parseFloat(g.style.fontSize);g.style.fontSize=h*b.fontPercent+"px",g.style.height="auto",g.style.top="auto",g.style.bottom="2px"}b.fontFamily&&"default"!==b.fontFamily&&("small-caps"===b.fontFamily?g.firstChild.style.fontVariant="small-caps":g.firstChild.style.fontFamily=s[b.fontFamily])}}}},b}(l["default"]);l["default"].registerComponent("TextTrackDisplay",t),c["default"]=t},{"../component":5,"../utils/fn.js":82,"global/window":93}],69:[function(a,b,c){"use strict";c.__esModule=!0;var d=function(a){var b=["kind","label","language","id","inBandMetadataTrackDispatchType","mode","src"].reduce(function(b,c){return a[c]&&(b[c]=a[c]),b},{cues:a.cues&&Array.prototype.map.call(a.cues,function(a){return{startTime:a.startTime,endTime:a.endTime,text:a.text,id:a.id}})});return b},e=function(a){var b=a.$$("track"),c=Array.prototype.map.call(b,function(a){return a.track}),e=Array.prototype.map.call(b,function(a){var b=d(a.track);return a.src&&(b.src=a.src),b});return e.concat(Array.prototype.filter.call(a.textTracks(),function(a){return-1===c.indexOf(a)}).map(d))},f=function(a,b){return a.forEach(function(a){var c=b.addRemoteTextTrack(a).track;!a.src&&a.cues&&a.cues.forEach(function(a){return c.addCue(a)})}),b.textTracks()};c["default"]={textTracksToJson:e,jsonToTextTracks:f,trackToJson_:d}},{}],70:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-list"),j=e(i),k=a("../utils/fn.js"),l=d(k),m=a("../utils/browser.js"),n=d(m),o=a("global/document"),p=e(o),q=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,b);var h=void 0;if(n.IS_IE8){h=p["default"].createElement("custom");for(var i in j["default"].prototype)"constructor"!==i&&(h[i]=j["default"].prototype[i]);for(var k in b.prototype)"constructor"!==k&&(h[k]=b.prototype[k])}return h=c=g(this,a.call(this,e,h)),d=h,g(c,d)}return h(b,a),b.prototype.addTrack_=function(b){a.prototype.addTrack_.call(this,b),b.addEventListener("modechange",l.bind(this,function(){this.trigger("change")}))},b.prototype.removeTrack_=function(a){for(var b=void 0,c=0,d=this.length;d>c;c++)if(this[c]===a){b=this[c],b.off&&b.off(),this.tracks_.splice(c,1);break}b&&this.trigger({track:b,type:"removetrack"})},b.prototype.getTrackById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},b}(j["default"]);c["default"]=q},{"../utils/browser.js":78,"../utils/fn.js":82,"./track-list":74,"global/document":92}],71:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+
+return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b,c){var d='\n    <div role="document">\n      <div role="heading" aria-level="1" id="'+b+'" class="vjs-control-text">Captions Settings Dialog</div>\n      <div id="'+c+'" class="vjs-control-text">Beginning of dialog window. Escape will cancel and close the window.</div>\n      <div class="vjs-tracksettings">\n        <div class="vjs-tracksettings-colors">\n          <fieldset class="vjs-fg-color vjs-tracksetting">\n            <legend>Text</legend>\n            <label class="vjs-label" for="captions-foreground-color-'+a+'">Color</label>\n            <select id="captions-foreground-color-'+a+'">\n              <option value="#FFF" selected>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              <label class="vjs-label" for="captions-foreground-opacity-'+a+'">Transparency</label>\n              <select id="captions-foreground-opacity-'+a+'">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="vjs-bg-color vjs-tracksetting">\n            <legend>Background</legend>\n            <label class="vjs-label" for="captions-background-color-'+a+'">Color</label>\n            <select id="captions-background-color-'+a+'">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-background-opacity-'+a+'">Transparency</label>\n              <select id="captions-background-opacity-'+a+'">\n                <option value="1" selected>Opaque</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="0">Transparent</option>\n              </select>\n            </span>\n          </fieldset>\n          <fieldset class="window-color vjs-tracksetting">\n            <legend>Window</legend>\n            <label class="vjs-label" for="captions-window-color-'+a+'">Color</label>\n            <select id="captions-window-color-'+a+'">\n              <option value="#000" selected>Black</option>\n              <option value="#FFF">White</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              <label class="vjs-label" for="captions-window-opacity-'+a+'">Transparency</label>\n              <select id="captions-window-opacity-'+a+'">\n                <option value="0" selected>Transparent</option>\n                <option value="0.5">Semi-Transparent</option>\n                <option value="1">Opaque</option>\n              </select>\n            </span>\n          </fieldset>\n        </div> <!-- vjs-tracksettings-colors -->\n        <div class="vjs-tracksettings-font">\n          <div class="vjs-font-percent vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-size-'+a+'">Font Size</label>\n            <select id="captions-font-size-'+a+'">\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>\n          <div class="vjs-edge-style vjs-tracksetting">\n            <label class="vjs-label" for="captions-edge-style-'+a+'">Text Edge Style</label>\n            <select id="captions-edge-style-'+a+'">\n              <option value="none" selected>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>\n          <div class="vjs-font-family vjs-tracksetting">\n            <label class="vjs-label" for="captions-font-family-'+a+'">Font Family</label>\n            <select id="captions-font-family-'+a+'">\n              <option value="proportionalSansSerif" selected>Proportional Sans-Serif</option>\n              <option value="monospaceSansSerif">Monospace Sans-Serif</option>\n              <option value="proportionalSerif">Proportional Serif</option>\n              <option value="monospaceSerif">Monospace 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>\n        </div> <!-- vjs-tracksettings-font -->\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      </div> <!-- vjs-tracksettings -->\n    </div> <!--  role="document" -->\n  ';return d}function j(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function k(a,b){if(b){var c=void 0;for(c=0;c<a.options.length;c++){var d=a.options[c];if(d.value===b)break}a.selectedIndex=c}}c.__esModule=!0;var l=a("../component"),m=e(l),n=a("../utils/events.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("safe-json-parse/tuple"),u=e(t),v=a("global/window"),w=e(v),x=function(a){function b(c,d){f(this,b);var e=g(this,a.call(this,c,d));return e.hide(),void 0===d.persistTextTrackSettings&&(e.options_.persistTextTrackSettings=e.options_.playerOptions.persistTextTrackSettings),o.on(e.$(".vjs-done-button"),"click",q.bind(e,function(){this.saveSettings(),this.hide()})),o.on(e.$(".vjs-default-button"),"click",q.bind(e,function(){this.$(".vjs-fg-color > select").selectedIndex=0,this.$(".vjs-bg-color > select").selectedIndex=0,this.$(".window-color > select").selectedIndex=0,this.$(".vjs-text-opacity > select").selectedIndex=0,this.$(".vjs-bg-opacity > select").selectedIndex=0,this.$(".vjs-window-opacity > select").selectedIndex=0,this.$(".vjs-edge-style select").selectedIndex=0,this.$(".vjs-font-family select").selectedIndex=0,this.$(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),o.on(e.$(".vjs-fg-color > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-bg-color > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".window-color > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-text-opacity > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-bg-opacity > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-window-opacity > select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-font-percent select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-edge-style select"),"change",q.bind(e,e.updateDisplay)),o.on(e.$(".vjs-font-family select"),"change",q.bind(e,e.updateDisplay)),e.options_.persistTextTrackSettings&&e.restoreSettings(),e}return h(b,a),b.prototype.createEl=function(){var b=this.id_,c="TTsettingsDialogLabel-"+b,d="TTsettingsDialogDescription-"+b;return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:i(b,c,d),tabIndex:-1},{role:"dialog","aria-labelledby":c,"aria-describedby":d})},b.prototype.getValues=function(){var a=j(this.$(".vjs-edge-style select")),b=j(this.$(".vjs-font-family select")),c=j(this.$(".vjs-fg-color > select")),d=j(this.$(".vjs-text-opacity > select")),e=j(this.$(".vjs-bg-color > select")),f=j(this.$(".vjs-bg-opacity > select")),g=j(this.$(".window-color > select")),h=j(this.$(".vjs-window-opacity > select")),i=w["default"].parseFloat(j(this.$(".vjs-font-percent > select"))),k={fontPercent:i,fontFamily:b,textOpacity:d,windowColor:g,windowOpacity:h,backgroundOpacity:f,edgeStyle:a,color:c,backgroundColor:e};for(var l in k)(""===k[l]||"none"===k[l]||"fontPercent"===l&&1===k[l])&&delete k[l];return k},b.prototype.setValues=function(a){k(this.$(".vjs-edge-style select"),a.edgeStyle),k(this.$(".vjs-font-family select"),a.fontFamily),k(this.$(".vjs-fg-color > select"),a.color),k(this.$(".vjs-text-opacity > select"),a.textOpacity),k(this.$(".vjs-bg-color > select"),a.backgroundColor),k(this.$(".vjs-bg-opacity > select"),a.backgroundOpacity),k(this.$(".window-color > select"),a.windowColor),k(this.$(".vjs-window-opacity > select"),a.windowOpacity);var b=a.fontPercent;b&&(b=b.toFixed(2)),k(this.$(".vjs-font-percent > select"),b)},b.prototype.restoreSettings=function(){var a=void 0,b=void 0;try{var c=u["default"](w["default"].localStorage.getItem("vjs-text-track-settings"));a=c[0],b=c[1],a&&s["default"].error(a)}catch(d){s["default"].warn(d)}b&&this.setValues(b)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?w["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):w["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){s["default"].warn(b)}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(m["default"]);m["default"].registerComponent("TextTrackSettings",x),c["default"]=x},{"../component":5,"../utils/events.js":81,"../utils/fn.js":82,"../utils/log.js":85,"global/window":93,"safe-json-parse/tuple":145}],72:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./text-track-cue-list"),j=e(i),k=a("../utils/fn.js"),l=d(k),m=a("./track-enums"),n=a("../utils/log.js"),o=e(n),p=a("global/window"),q=e(p),r=a("./track.js"),s=e(r),t=a("../utils/url.js"),u=a("xhr"),v=e(u),w=a("../utils/merge-options"),x=e(w),y=a("../utils/browser.js"),z=d(y),A=function(a,b){var c=new q["default"].WebVTT.Parser(q["default"],q["default"].vttjs,q["default"].WebVTT.StringDecoder()),d=[];c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){d.push(a)},c.onflush=function(){b.trigger({type:"loadeddata",target:b})},c.parse(a),d.length>0&&(q["default"].console&&q["default"].console.groupCollapsed&&q["default"].console.groupCollapsed("Text Track parsing errors for "+b.src),d.forEach(function(a){return o["default"].error(a)}),q["default"].console&&q["default"].console.groupEnd&&q["default"].console.groupEnd()),c.flush()},B=function(a,b){var c={uri:a},d=t.isCrossOrigin(a);d&&(c.cors=d),v["default"](c,l.bind(this,function(a,c,d){return a?o["default"].error(a,c):(b.loaded_=!0,void("function"!=typeof q["default"].WebVTT?b.tech_&&!function(){var a=function(){return A(d,b)};b.tech_.on("vttjsloaded",a),b.tech_.on("vttjserror",function(){o["default"].error("vttjs failed to load, stopping trying to process "+b.src),b.tech_.off("vttjsloaded",a)})}():A(d,b)))}))},C=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(f(this,b),!e.tech)throw new Error("A tech was not provided.");var h=x["default"](e,{kind:m.TextTrackKind[e.kind]||"subtitles",language:e.language||e.srclang||""}),i=m.TextTrackMode[h.mode]||"disabled",k=h["default"];("metadata"===h.kind||"chapters"===h.kind)&&(i="hidden");var n=c=g(this,a.call(this,h));if(n.tech_=h.tech,z.IS_IE8)for(var o in b.prototype)"constructor"!==o&&(n[o]=b.prototype[o]);n.cues_=[],n.activeCues_=[];var p=new j["default"](n.cues_),q=new j["default"](n.activeCues_),r=!1,s=l.bind(n,function(){this.activeCues,r&&(this.trigger("cuechange"),r=!1)});return"disabled"!==i&&n.tech_.on("timeupdate",s),Object.defineProperty(n,"default",{get:function(){return k},set:function(){}}),Object.defineProperty(n,"mode",{get:function(){return i},set:function(a){m.TextTrackMode[a]&&(i=a,"showing"===i&&this.tech_.on("timeupdate",s),this.trigger("modechange"))}}),Object.defineProperty(n,"cues",{get:function(){return this.loaded_?p:null},set:function(){}}),Object.defineProperty(n,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return q;for(var a=this.tech_.currentTime(),b=[],c=0,d=this.cues.length;d>c;c++){var e=this.cues[c];e.startTime<=a&&e.endTime>=a?b.push(e):e.startTime===e.endTime&&e.startTime<=a&&e.startTime+.5>=a&&b.push(e)}if(r=!1,b.length!==this.activeCues_.length)r=!0;else for(var f=0;f<b.length;f++)-1===this.activeCues_.indexOf(b[f])&&(r=!0);return this.activeCues_=b,q.setCues_(this.activeCues_),q},set:function(){}}),h.src?(n.src=h.src,B(h.src,n)):n.loaded_=!0,d=n,g(c,d)}return h(b,a),b.prototype.addCue=function(a){var b=this.tech_.textTracks();if(b)for(var c=0;c<b.length;c++)b[c]!==this&&b[c].removeCue(a);this.cues_.push(a),this.cues.setCues_(this.cues_)},b.prototype.removeCue=function(a){for(var b=!1,c=0,d=this.cues_.length;d>c;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)},b}(s["default"]);C.prototype.allowedEvents_={cuechange:"cuechange"},c["default"]=C},{"../utils/browser.js":78,"../utils/fn.js":82,"../utils/log.js":85,"../utils/merge-options":86,"../utils/url.js":90,"./text-track-cue-list":67,"./track-enums":73,"./track.js":75,"global/window":93,xhr:147}],73:[function(a,b,c){"use strict";c.__esModule=!0;c.VideoTrackKind={alternative:"alternative",captions:"captions",main:"main",sign:"sign",subtitles:"subtitles",commentary:"commentary"},c.AudioTrackKind={alternative:"alternative",descriptions:"descriptions",main:"main","main-desc":"main-desc",translation:"translation",commentary:"commentary"},c.TextTrackKind={subtitles:"subtitles",captions:"captions",descriptions:"descriptions",chapters:"chapters",metadata:"metadata"},c.TextTrackMode={disabled:"disabled",hidden:"hidden",showing:"showing"}},{}],74:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../event-target"),j=e(i),k=a("../utils/browser.js"),l=d(k),m=a("global/document"),n=e(m),o=function(a){function b(){var c,d=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],e=arguments.length<=1||void 0===arguments[1]?null:arguments[1];f(this,b);var h=g(this,a.call(this));if(!e&&(e=h,l.IS_IE8)){e=n["default"].createElement("custom");for(var i in b.prototype)"constructor"!==i&&(e[i]=b.prototype[i])}e.tracks_=[],Object.defineProperty(e,"length",{get:function(){return this.tracks_.length}});for(var j=0;j<d.length;j++)e.addTrack_(d[j]);return c=e,g(h,c)}return h(b,a),b.prototype.addTrack_=function(a){var b=this.tracks_.length;""+b in this||Object.defineProperty(this,b,{get:function(){return this.tracks_[b]}}),-1===this.tracks_.indexOf(a)&&(this.tracks_.push(a),this.trigger({track:a,type:"addtrack"}))},b.prototype.removeTrack_=function(a){for(var b=void 0,c=0,d=this.length;d>c;c++)if(this[c]===a){b=this[c],b.off&&b.off(),this.tracks_.splice(c,1);break}b&&this.trigger({track:b,type:"removetrack"})},b.prototype.getTrackById=function(a){for(var b=null,c=0,d=this.length;d>c;c++){var e=this[c];if(e.id===a){b=e;break}}return b},b}(j["default"]);o.prototype.allowedEvents_={change:"change",addtrack:"addtrack",removetrack:"removetrack"};for(var p in o.prototype.allowedEvents_)o.prototype["on"+p]=null;c["default"]=o},{"../event-target":42,"../utils/browser.js":78,"global/document":92}],75:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("../utils/browser.js"),j=e(i),k=a("global/document"),l=d(k),m=a("../utils/guid.js"),n=e(m),o=a("../event-target"),p=d(o),q=function(a){function b(){var c,d=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var e=g(this,a.call(this)),h=e;if(j.IS_IE8){h=l["default"].createElement("custom");for(var i in b.prototype)"constructor"!==i&&(h[i]=b.prototype[i])}var k={id:d.id||"vjs_track_"+n.newGUID(),kind:d.kind||"",label:d.label||"",language:d.language||""},m=function(a){Object.defineProperty(h,a,{get:function(){return k[a]},set:function(){}})};for(var o in k)m(o);return c=h,g(e,c)}return h(b,a),b}(p["default"]);c["default"]=q},{"../event-target":42,"../utils/browser.js":78,"../utils/guid.js":84,"global/document":92}],76:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-list"),j=e(i),k=a("../utils/browser.js"),l=d(k),m=a("global/document"),n=e(m),o=function(a,b){for(var c=0;c<a.length;c++)b.id!==a[c].id&&(a[c].selected=!1)},p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];f(this,b);for(var h=void 0,i=e.length-1;i>=0;i--)if(e[i].selected){o(e,e[i]);break}if(l.IS_IE8){h=n["default"].createElement("custom");for(var k in j["default"].prototype)"constructor"!==k&&(h[k]=j["default"].prototype[k]);for(var m in b.prototype)"constructor"!==m&&(h[m]=b.prototype[m])}return h=c=g(this,a.call(this,e,h)),h.changing_=!1,Object.defineProperty(h,"selectedIndex",{get:function(){for(var a=0;a<this.length;a++)if(this[a].selected)return a;return-1},set:function(){}}),d=h,g(c,d)}return h(b,a),b.prototype.addTrack_=function(b){var c=this;b.selected&&o(this,b),a.prototype.addTrack_.call(this,b),b.addEventListener&&b.addEventListener("selectedchange",function(){c.changing_||(c.changing_=!0,o(c,b),c.changing_=!1,c.trigger("change"))})},b.prototype.addTrack=function(a){this.addTrack_(a)},b.prototype.removeTrack=function(b){a.prototype.removeTrack_.call(this,b)},b}(j["default"]);c["default"]=p},{"../utils/browser.js":78,"./track-list":74,"global/document":92}],77:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function g(a,b){if(!a)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!b||"object"!=typeof b&&"function"!=typeof b?a:b}function h(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}c.__esModule=!0;var i=a("./track-enums"),j=a("./track"),k=e(j),l=a("../utils/merge-options"),m=e(l),n=a("../utils/browser.js"),o=d(n),p=function(a){function b(){var c,d,e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];f(this,b);var h=m["default"](e,{kind:i.VideoTrackKind[e.kind]||""}),j=c=g(this,a.call(this,h)),k=!1;if(o.IS_IE8)for(var l in b.prototype)"constructor"!==l&&(j[l]=b.prototype[l]);return Object.defineProperty(j,"selected",{get:function(){return k},set:function(a){"boolean"==typeof a&&a!==k&&(k=a,this.trigger("selectedchange"))}}),h.selected&&(j.selected=h.selected),d=j,g(c,d)}return h(b,a),b}(k["default"]);c["default"]=p},{"../utils/browser.js":78,"../utils/merge-options":86,"./track":75,"./track-enums":73}],78:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.BACKGROUND_SIZE_SUPPORTED=c.TOUCH_ENABLED=c.IE_VERSION=c.IS_IE8=c.IS_CHROME=c.IS_EDGE=c.IS_FIREFOX=c.IS_NATIVE_ANDROID=c.IS_OLD_ANDROID=c.ANDROID_VERSION=c.IS_ANDROID=c.IOS_VERSION=c.IS_IOS=c.IS_IPOD=c.IS_IPHONE=c.IS_IPAD=void 0;{var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator&&h["default"].navigator.userAgent||"",j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=c.IS_IPAD=/iPad/i.test(i),m=c.IS_IPHONE=/iPhone/i.test(i)&&!l,n=c.IS_IPOD=/iPod/i.test(i),o=(c.IS_IOS=m||l||n,c.IOS_VERSION=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:null}(),c.IS_ANDROID=/Android/i.test(i)),p=c.ANDROID_VERSION=function(){var a=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(!a)return null;var b=a[1]&&parseFloat(a[1]),c=a[2]&&parseFloat(a[2]);return b&&c?parseFloat(a[1]+"."+a[2]):b?b:null}(),q=(c.IS_OLD_ANDROID=o&&/webkit/i.test(i)&&2.3>p,c.IS_NATIVE_ANDROID=o&&5>p&&537>k,c.IS_FIREFOX=/Firefox/i.test(i),c.IS_EDGE=/Edge/i.test(i));c.IS_CHROME=!q&&/Chrome/i.test(i),c.IS_IE8=/MSIE\s8\.0/.test(i),c.IE_VERSION=function(a){return a&&parseFloat(a[1])}(/MSIE\s(\d+)\.\d/.exec(i)),c.TOUCH_ENABLED=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch),c.BACKGROUND_SIZE_SUPPORTED="backgroundSize"in f["default"].createElement("video").style}},{"global/document":92,"global/window":93}],79:[function(a,b,c){"use strict";function d(a,b){var c=0,d=void 0,f=void 0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;g<a.length;g++)d=a.start(g),f=a.end(g),f>b&&(f=b),c+=f-d;return c/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":88}],80:[function(a,b,c){"use strict";function d(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function e(a){return a&&a.__esModule?a:{"default":a}}function f(a,b){return a.raw=b,a}function g(a){return"string"==typeof a&&/\S/.test(a)}function h(a){if(/\s/.test(a))throw new Error("class has illegal whitespace characters")}function i(a){return new RegExp("(^|\\s)"+a+"($|\\s)")}function j(a){return!!a&&"object"===("undefined"==typeof a?"undefined":H(a))&&1===a.nodeType}function k(a){return function(b,c){if(!g(b))return K["default"][a](null);g(c)&&(c=K["default"].querySelector(c));var d=j(c)?c:K["default"];return d[a]&&d[a](b)}}function l(a){return 0===a.indexOf("#")&&(a=a.slice(1)),K["default"].getElementById(a)}function m(){var a=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],d=K["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var c=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?(Q["default"].warn(S["default"](I,a,c)),d.setAttribute(a,c)):d[a]=c}),Object.getOwnPropertyNames(c).forEach(function(a){d.setAttribute(a,c[a])}),d}function n(a,b){"undefined"==typeof a.textContent?a.innerText=b:a.textContent=b}function o(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function p(a){var b=a[U];return b||(b=a[U]=O.newGUID()),T[b]||(T[b]={}),T[b]}function q(a){var b=a[U];return b?!!Object.getOwnPropertyNames(T[b]).length:!1}function r(a){var b=a[U];if(b){delete T[b];try{delete a[U]}catch(c){a.removeAttribute?a.removeAttribute(U):a[U]=null}}}function s(a,b){return a.classList?a.classList.contains(b):(h(b),i(b).test(a.className))}function t(a,b){return a.classList?a.classList.add(b):s(a,b)||(a.className=(a.className+" "+b).trim()),a}function u(a,b){return a.classList?a.classList.remove(b):(h(b),a.className=a.className.split(/\s+/).filter(function(a){return a!==b}).join(" ")),a}function v(a,b,c){var d=s(a,b);return"function"==typeof c&&(c=c(a,b)),"boolean"!=typeof c&&(c=!d),c!==d?(c?t(a,b):u(a,b),a):void 0}function w(a,b){Object.getOwnPropertyNames(b).forEach(function(c){var d=b[c];null===d||"undefined"==typeof d||d===!1?a.removeAttribute(c):a.setAttribute(c,d===!0?"":d)})}function x(a){var b={},c=",autoplay,controls,loop,muted,default,";if(a&&a.attributes&&a.attributes.length>0)for(var d=a.attributes,e=d.length-1;e>=0;e--){var f=d[e].name,g=d[e].value;("boolean"==typeof a[f]||-1!==c.indexOf(","+f+","))&&(g=null!==g?!0:!1),b[f]=g}return b}function y(){K["default"].body.focus(),K["default"].onselectstart=function(){return!1}}function z(){K["default"].onselectstart=function(){return!0}}function A(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=K["default"].documentElement,d=K["default"].body,e=c.clientLeft||d.clientLeft||0,f=M["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=M["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}function B(a,b){var c={},d=A(a),e=a.offsetWidth,f=a.offsetHeight,g=d.top,h=d.left,i=b.pageY,j=b.pageX;return b.changedTouches&&(j=b.changedTouches[0].pageX,i=b.changedTouches[0].pageY),c.y=Math.max(0,Math.min(1,(g-i+f)/f)),c.x=Math.max(0,Math.min(1,(j-h)/e)),c}function C(a){return!!a&&"object"===("undefined"==typeof a?"undefined":H(a))&&3===a.nodeType}function D(a){for(;a.firstChild;)a.removeChild(a.firstChild);return a}function E(a){return"function"==typeof a&&(a=a()),(Array.isArray(a)?a:[a]).map(function(a){return"function"==typeof a&&(a=a()),j(a)||C(a)?a:"string"==typeof a&&/\S/.test(a)?K["default"].createTextNode(a):void 0}).filter(function(a){return a})}function F(a,b){return E(b).forEach(function(b){return a.appendChild(b)}),a}function G(a,b){return F(D(a),b)}c.__esModule=!0,c.$$=c.$=void 0;var H="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},I=f(["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 "," to ","."],["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 "," to ","."]);c.isEl=j,c.getEl=l,c.createEl=m,c.textContent=n,c.insertElFirst=o,c.getElData=p,c.hasElData=q,c.removeElData=r,c.hasElClass=s,c.addElClass=t,c.removeElClass=u,c.toggleElClass=v,c.setElAttributes=w,c.getElAttributes=x,c.blockTextSelection=y,c.unblockTextSelection=z,c.findElPosition=A,c.getPointerPosition=B,c.isTextNode=C,c.emptyEl=D,c.normalizeContent=E,c.appendContent=F,c.insertContent=G;{var J=a("global/document"),K=e(J),L=a("global/window"),M=e(L),N=a("./guid.js"),O=d(N),P=a("./log.js"),Q=e(P),R=a("tsml"),S=e(R),T={},U="vdata"+(new Date).getTime();c.$=k("querySelector"),c.$$=k("querySelectorAll")}},{"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93,tsml:146}],81:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a,b){var c=n.getElData(a);0===c.handlers[b].length&&(delete c.handlers[b],a.removeEventListener?a.removeEventListener(b,c.dispatcher,!1):a.detachEvent&&a.detachEvent("on"+b,c.dispatcher)),Object.getOwnPropertyNames(c.handlers).length<=0&&(delete c.handlers,delete c.dispatcher,delete c.disabled),0===Object.getOwnPropertyNames(c).length&&n.removeElData(a)}function g(a,b,c,d){c.forEach(function(c){a(b,c,d)})}function h(a){function b(){return!0}function c(){return!1}return a&&a.isPropagationStopped||!function(){var d=a||t["default"].event;a={};for(var e in d)"layerX"!==e&&"layerY"!==e&&"keyLocation"!==e&&"webkitMovementX"!==e&&"webkitMovementY"!==e&&("returnValue"===e&&d.preventDefault||(a[e]=d[e]));if(a.target||(a.target=a.srcElement||v["default"]),a.relatedTarget||(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement),a.preventDefault=function(){d.preventDefault&&d.preventDefault(),a.returnValue=!1,d.returnValue=!1,a.defaultPrevented=!0},a.defaultPrevented=!1,a.stopPropagation=function(){d.stopPropagation&&d.stopPropagation(),a.cancelBubble=!0,d.cancelBubble=!0,a.isPropagationStopped=b},a.isPropagationStopped=c,a.stopImmediatePropagation=function(){d.stopImmediatePropagation&&d.stopImmediatePropagation(),a.isImmediatePropagationStopped=b,a.stopPropagation();
+
+},a.isImmediatePropagationStopped=c,null!==a.clientX&&void 0!==a.clientX){var f=v["default"].documentElement,g=v["default"].body;a.pageX=a.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=a.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)}a.which=a.charCode||a.keyCode,null!==a.button&&void 0!==a.button&&(a.button=1&a.button?0:4&a.button?1:2&a.button?2:0)}(),a}function i(a,b,c){if(Array.isArray(b))return g(i,a,b,c);var d=n.getElData(a);d.handlers||(d.handlers={}),d.handlers[b]||(d.handlers[b]=[]),c.guid||(c.guid=p.newGUID()),d.handlers[b].push(c),d.dispatcher||(d.disabled=!1,d.dispatcher=function(b,c){if(!d.disabled){b=h(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,i=f.length;i>g&&!b.isImmediatePropagationStopped();g++)try{f[g].call(a,b,c)}catch(j){r["default"].error(j)}}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function j(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return g(j,a,b,c);var e=function(b){d.handlers[b]=[],f(a,b)};if(b){var h=d.handlers[b];if(h){if(!c)return void e(b);if(c.guid)for(var i=0;i<h.length;i++)h[i].guid===c.guid&&h.splice(i--,1);f(a,b)}}else for(var k in d.handlers)e(k)}}}function k(a,b,c){var d=n.hasElData(a)?n.getElData(a):{},e=a.parentNode||a.ownerDocument;if("string"==typeof b&&(b={type:b,target:a}),b=h(b),d.dispatcher&&d.dispatcher.call(a,b,c),e&&!b.isPropagationStopped()&&b.bubbles===!0)k.call(null,e,b,c);else if(!e&&!b.defaultPrevented){var f=n.getElData(b.target);b.target[b.type]&&(f.disabled=!0,"function"==typeof b.target[b.type]&&b.target[b.type](),f.disabled=!1)}return!b.defaultPrevented}function l(a,b,c){if(Array.isArray(b))return g(l,a,b,c);var d=function e(){j(a,b,e),c.apply(this,arguments)};d.guid=c.guid=c.guid||p.newGUID(),i(a,b,d)}c.__esModule=!0,c.fixEvent=h,c.on=i,c.off=j,c.trigger=k,c.one=l;var m=a("./dom.js"),n=e(m),o=a("./guid.js"),p=e(o),q=a("./log.js"),r=d(q),s=a("global/window"),t=d(s),u=a("global/document"),v=d(u)},{"./dom.js":80,"./guid.js":84,"./log.js":85,"global/document":92,"global/window":93}],82:[function(a,b,c){"use strict";c.__esModule=!0,c.bind=void 0;{var d=a("./guid.js");c.bind=function(a,b,c){b.guid||(b.guid=d.newGUID());var e=function(){return b.apply(a,arguments)};return e.guid=c?c+"_"+b.guid:b.guid,e}}},{"./guid.js":84}],83:[function(a,b,c){"use strict";function d(a){var b=arguments.length<=1||void 0===arguments[1]?a:arguments[1];a=0>a?0:a;var c=Math.floor(a%60),d=Math.floor(a/60%60),e=Math.floor(a/3600),f=Math.floor(b/60%60),g=Math.floor(b/3600);return(isNaN(a)||a===1/0)&&(e=d=c="-"),e=e>0||g>0?e+":":"",d=((e||f>=10)&&10>d?"0"+d:d)+":",c=10>c?"0"+c:c,e+d+c}c.__esModule=!0,c["default"]=d},{}],84:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],85:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.logByType=void 0;var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},f=a("global/window"),g=d(f),h=a("./browser"),i=void 0,j=c.logByType=function(a,b){var c=arguments.length<=2||void 0===arguments[2]?!!h.IE_VERSION&&h.IE_VERSION<11:arguments[2],d=g["default"].console&&g["default"].console[a]||function(){};"log"!==a&&b.unshift(a.toUpperCase()+":"),i.history.push(b),b.unshift("VIDEOJS:"),c&&(b=b.map(function(a){if(a&&"object"===("undefined"==typeof a?"undefined":e(a))||Array.isArray(a))try{return JSON.stringify(a)}catch(b){return String(a)}return String(a)}).join(" ")),d.apply?d[Array.isArray(b)?"apply":"call"](console,b):d(b)};i=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];j("log",b)},i.history=[],i.error=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return j("error",b)},i.warn=function(){for(var a=arguments.length,b=Array(a),c=0;a>c;c++)b[c]=arguments[c];return j("warn",b)},c["default"]=i},{"./browser":78,"global/window":93}],86:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"===("undefined"==typeof a?"undefined":h(a))&&"[object Object]"===a.toString()&&a.constructor===Object}function f(a,b){return e(b)?e(a)?void 0:g(b):b}function g(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(f),j["default"].apply(null,a),a[0]}c.__esModule=!0;var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a};c["default"]=g;var i=a("lodash-compat/object/merge"),j=d(i)},{"lodash-compat/object/merge":131}],87:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.setTextContent=c.createStyleElement=void 0;{var e=a("global/document"),f=d(e);c.createStyleElement=function(a){var b=f["default"].createElement("style");return b.className=a,b},c.setTextContent=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b}}},{"global/document":92}],88:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b,c){if(0>b||b>c)throw new Error("Failed to execute '"+a+"' on 'TimeRanges': The index provided ("+b+") is greater than or equal to the maximum bound ("+c+").")}function f(a,b,c,d){return void 0===d&&(j["default"].warn("DEPRECATED: Function '"+a+"' on 'TimeRanges' called without an index argument."),d=0),e(a,d,c.length-1),c[d][b]}function g(a){return void 0===a||0===a.length?{length:0,start:function(){throw new Error("This TimeRanges object is empty")},end:function(){throw new Error("This TimeRanges object is empty")}}:{length:a.length,start:f.bind(null,"start",0,a),end:f.bind(null,"end",1,a)}}function h(a,b){return Array.isArray(a)?g(a):void 0===a||void 0===b?g():g([[a,b]])}c.__esModule=!0,c.createTimeRange=void 0,c.createTimeRanges=h;var i=a("./log.js"),j=d(i);c.createTimeRange=h},{"./log.js":85}],89:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d},{}],90:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0,c.isCrossOrigin=c.getFileExtension=c.getAbsoluteURL=c.parseUrl=void 0;{var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=c.parseUrl=function(a){var b=["protocol","hostname","port","pathname","search","hash","host"],c=f["default"].createElement("a");c.href=a;var d=""===c.host&&"file:"!==c.protocol,e=void 0;d&&(e=f["default"].createElement("div"),e.innerHTML='<a href="'+a+'"></a>',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;h<b.length;h++)g[b[h]]=c[b[h]];return"http:"===g.protocol&&(g.host=g.host.replace(/:80$/,"")),"https:"===g.protocol&&(g.host=g.host.replace(/:443$/,"")),d&&f["default"].body.removeChild(e),g};c.getAbsoluteURL=function(a){if(!a.match(/^https?:\/\//)){var b=f["default"].createElement("div");b.innerHTML='<a href="'+a+'">x</a>',a=b.firstChild.href}return a},c.getFileExtension=function(a){if("string"==typeof a){var b=/^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/i,c=b.exec(a);if(c)return c.pop().toLowerCase()}return""},c.isCrossOrigin=function(a){var b=h["default"].location,c=i(a),d=":"===c.protocol?b.protocol:c.protocol,e=d+c.host!==b.protocol+b.host;return e}}},{"global/document":92,"global/window":93}],91:[function(b,c,d){"use strict";function e(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b}function f(a){return a&&a.__esModule?a:{"default":a}}function g(a,b,c){var d=void 0;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),g.getPlayers()[a])return b&&O["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&g.getPlayers()[a].ready(c),g.getPlayers()[a];d=Q.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||x["default"].players[d.playerId]||new x["default"](d,b,c)}d.__esModule=!0;var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol?"symbol":typeof a},i=b("global/window"),j=f(i),k=b("global/document"),l=f(k),m=b("./setup"),n=e(m),o=b("./utils/stylesheet.js"),p=e(o),q=b("./component"),r=f(q),s=b("./event-target"),t=f(s),u=b("./utils/events.js"),v=e(u),w=b("./player"),x=f(w),y=b("./plugins.js"),z=f(y),A=b("./utils/merge-options.js"),B=f(A),C=b("./utils/fn.js"),D=e(C),E=b("./tracks/text-track.js"),F=f(E),G=b("./tracks/audio-track.js"),H=f(G),I=b("./tracks/video-track.js"),J=f(I),K=b("./utils/time-ranges.js"),L=b("./utils/format-time.js"),M=f(L),N=b("./utils/log.js"),O=f(N),P=b("./utils/dom.js"),Q=e(P),R=b("./utils/browser.js"),S=e(R),T=b("./utils/url.js"),U=e(T),V=b("./extend.js"),W=f(V),X=b("lodash-compat/object/merge"),Y=f(X),Z=b("xhr"),$=f(Z),_=b("./tech/tech.js"),aa=f(_);if("undefined"==typeof HTMLVideoElement&&(l["default"].createElement("video"),l["default"].createElement("audio"),l["default"].createElement("track")),j["default"].VIDEOJS_NO_DYNAMIC_STYLE!==!0){var ba=Q.$(".vjs-styles-defaults");if(!ba){ba=p.createStyleElement("vjs-styles-defaults");var ca=Q.$("head");ca&&ca.insertBefore(ba,ca.firstChild),p.setTextContent(ba,"\n      .video-js {\n        width: 300px;\n        height: 150px;\n      }\n\n      .vjs-fluid {\n        padding-top: 56.25%\n      }\n    ")}}n.autoSetupTimeout(1,g),g.VERSION="5.12.1",g.options=x["default"].prototype.options_,g.getPlayers=function(){return x["default"].players},g.players=x["default"].players,g.getComponent=r["default"].getComponent,g.registerComponent=function(a,b){aa["default"].isTech(b)&&O["default"].warn("The "+a+" tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"),r["default"].registerComponent.call(r["default"],a,b)},g.getTech=aa["default"].getTech,g.registerTech=aa["default"].registerTech,g.browser=S,g.TOUCH_ENABLED=S.TOUCH_ENABLED,g.extend=W["default"],g.mergeOptions=B["default"],g.bind=D.bind,g.plugin=z["default"],g.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),Y["default"](g.options.languages,(c={},c[a]=b,c))[a]},g.log=O["default"],g.createTimeRange=g.createTimeRanges=K.createTimeRanges,g.formatTime=M["default"],g.parseUrl=U.parseUrl,g.isCrossOrigin=U.isCrossOrigin,g.EventTarget=t["default"],g.on=v.on,g.one=v.one,g.off=v.off,g.trigger=v.trigger,g.xhr=$["default"],g.TextTrack=F["default"],g.AudioTrack=H["default"],g.VideoTrack=J["default"],g.isEl=Q.isEl,g.isTextNode=Q.isTextNode,g.createEl=Q.createEl,g.hasClass=Q.hasElClass,g.addClass=Q.addElClass,g.removeClass=Q.removeElClass,g.toggleClass=Q.toggleElClass,g.setAttributes=Q.setElAttributes,g.getAttributes=Q.getElAttributes,g.emptyEl=Q.emptyEl,g.appendContent=Q.appendContent,g.insertContent=Q.insertContent,"function"==typeof a&&a.amd?a("videojs",[],function(){return g}):"object"===("undefined"==typeof d?"undefined":h(d))&&"object"===("undefined"==typeof c?"undefined":h(c))&&(c.exports=g),d["default"]=g},{"./component":5,"./event-target":42,"./extend.js":43,"./player":51,"./plugins.js":52,"./setup":56,"./tech/tech.js":62,"./tracks/audio-track.js":64,"./tracks/text-track.js":72,"./tracks/video-track.js":77,"./utils/browser.js":78,"./utils/dom.js":80,"./utils/events.js":81,"./utils/fn.js":82,"./utils/format-time.js":83,"./utils/log.js":85,"./utils/merge-options.js":86,"./utils/stylesheet.js":87,"./utils/time-ranges.js":88,"./utils/url.js":90,"global/document":92,"global/window":93,"lodash-compat/object/merge":131,xhr:147}],92:[function(a,b){(function(c){var d="undefined"!=typeof c?c:"undefined"!=typeof window?window:{},e=a("min-document");if("undefined"!=typeof document)b.exports=document;else{var f=d["__GLOBAL_DOCUMENT_CACHE@4"];f||(f=d["__GLOBAL_DOCUMENT_CACHE@4"]=e),b.exports=f}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"min-document":94}],93:[function(a,b){(function(a){b.exports="undefined"!=typeof window?window:"undefined"!=typeof a?a:"undefined"!=typeof self?self:{}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],94:[function(){},{}],95:[function(a,b){var c=a("../internal/getNative"),d=c(Date,"now"),e=d||function(){return(new Date).getTime()};b.exports=e},{"../internal/getNative":111}],96:[function(a,b){function c(a,b,c){function h(){r&&clearTimeout(r),n&&clearTimeout(n),t=0,n=r=s=void 0}function i(b,c){c&&clearTimeout(c),n=r=s=void 0,b&&(t=e(),o=a.apply(q,m),r||n||(m=q=void 0))}function j(){var a=b-(e()-p);0>=a||a>b?i(s,n):r=setTimeout(j,a)}function k(){i(v,r)}function l(){if(m=arguments,p=e(),q=this,s=v&&(r||!w),u===!1)var c=w&&!r;else{n||w||(t=p);var d=u-(p-t),f=0>=d||d>u;f?(n&&(n=clearTimeout(n)),t=p,o=a.apply(q,m)):n||(n=setTimeout(k,d))}return f&&r?r=clearTimeout(r):r||b===u||(r=setTimeout(j,b)),c&&(f=!0,o=a.apply(q,m)),!f||r||n||(m=q=void 0),o}var m,n,o,p,q,r,s,t=0,u=!1,v=!0;if("function"!=typeof a)throw new TypeError(f);if(b=0>b?0:+b||0,c===!0){var w=!0;v=!1}else d(c)&&(w=!!c.leading,u="maxWait"in c&&g(+c.maxWait||0,b),v="trailing"in c?!!c.trailing:v);return l.cancel=h,l}var d=a("../lang/isObject"),e=a("../date/now"),f="Expected a function",g=Math.max;b.exports=c},{"../date/now":95,"../lang/isObject":124}],97:[function(a,b){function c(a,b){if("function"!=typeof a)throw new TypeError(d);return b=e(void 0===b?a.length-1:+b||0,0),function(){for(var c=arguments,d=-1,f=e(c.length-b,0),g=Array(f);++d<f;)g[d]=c[b+d];switch(b){case 0:return a.call(this,g);case 1:return a.call(this,c[0],g);case 2:return a.call(this,c[0],c[1],g)}var h=Array(b+1);for(d=-1;++d<b;)h[d]=c[d];return h[b]=g,a.apply(this,h)}}var d="Expected a function",e=Math.max;b.exports=c},{}],98:[function(a,b){function c(a,b,c){var g=!0,h=!0;if("function"!=typeof a)throw new TypeError(f);return c===!1?g=!1:e(c)&&(g="leading"in c?!!c.leading:g,h="trailing"in c?!!c.trailing:h),d(a,b,{leading:g,maxWait:+b,trailing:h})}var d=a("./debounce"),e=a("../lang/isObject"),f="Expected a function";b.exports=c},{"../lang/isObject":124,"./debounce":96}],99:[function(a,b){function c(a,b){var c=-1,d=a.length;for(b||(b=Array(d));++c<d;)b[c]=a[c];return b}b.exports=c},{}],100:[function(a,b){function c(a,b){for(var c=-1,d=a.length;++c<d&&b(a[c],c,a)!==!1;);return a}b.exports=c},{}],101:[function(a,b){function c(a,b,c){c||(c={});for(var d=-1,e=b.length;++d<e;){var f=b[d];c[f]=a[f]}return c}b.exports=c},{}],102:[function(a,b){var c=a("./createBaseFor"),d=c();b.exports=d},{"./createBaseFor":109}],103:[function(a,b){function c(a,b){return d(a,b,e)}var d=a("./baseFor"),e=a("../object/keysIn");b.exports=c},{"../object/keysIn":130,"./baseFor":102}],104:[function(a,b){function c(a,b,l,m,n){if(!h(a))return a;var o=g(b)&&(f(b)||j(b)),p=o?void 0:k(b);return d(p||b,function(d,f){if(p&&(f=d,d=b[f]),i(d))m||(m=[]),n||(n=[]),e(a,b,f,c,l,m,n);else{var g=a[f],h=l?l(g,d,f,a,b):void 0,j=void 0===h;j&&(h=d),void 0===h&&(!o||f in a)||!j&&(h===h?h===g:g!==g)||(a[f]=h)}}),a}var d=a("./arrayEach"),e=a("./baseMergeDeep"),f=a("../lang/isArray"),g=a("./isArrayLike"),h=a("../lang/isObject"),i=a("./isObjectLike"),j=a("../lang/isTypedArray"),k=a("../object/keys");b.exports=c},{"../lang/isArray":121,"../lang/isObject":124,"../lang/isTypedArray":127,"../object/keys":129,"./arrayEach":100,"./baseMergeDeep":105,"./isArrayLike":112,"./isObjectLike":117}],105:[function(a,b){function c(a,b,c,k,l,m,n){for(var o=m.length,p=b[c];o--;)if(m[o]==p)return void(a[c]=n[o]);var q=a[c],r=l?l(q,p,c,a,b):void 0,s=void 0===r;s&&(r=p,g(p)&&(f(p)||i(p))?r=f(q)?q:g(q)?d(q):[]:h(p)||e(p)?r=e(q)?j(q):h(q)?q:{}:s=!1),m.push(p),n.push(r),s?a[c]=k(r,p,l,m,n):(r===r?r!==q:q===q)&&(a[c]=r)}var d=a("./arrayCopy"),e=a("../lang/isArguments"),f=a("../lang/isArray"),g=a("./isArrayLike"),h=a("../lang/isPlainObject"),i=a("../lang/isTypedArray"),j=a("../lang/toPlainObject");b.exports=c},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isPlainObject":125,"../lang/isTypedArray":127,"../lang/toPlainObject":128,"./arrayCopy":99,"./isArrayLike":112}],106:[function(a,b){function c(a){return function(b){return null==b?void 0:d(b)[a]}}var d=a("./toObject");b.exports=c},{"./toObject":119}],107:[function(a,b){function c(a,b,c){if("function"!=typeof a)return d;if(void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)};case 5:return function(c,d,e,f,g){return a.call(b,c,d,e,f,g)}}return function(){return a.apply(b,arguments)}}var d=a("../utility/identity");b.exports=c},{"../utility/identity":133}],108:[function(a,b){function c(a){return f(function(b,c){var f=-1,g=null==b?0:c.length,h=g>2?c[g-2]:void 0,i=g>2?c[2]:void 0,j=g>1?c[g-1]:void 0;for("function"==typeof h?(h=d(h,j,5),g-=2):(h="function"==typeof j?j:void 0,g-=h?1:0),i&&e(c[0],c[1],i)&&(h=3>g?void 0:h,g=1);++f<g;){var k=c[f];k&&a(b,k,h)}return b})}var d=a("./bindCallback"),e=a("./isIterateeCall"),f=a("../function/restParam");b.exports=c},{"../function/restParam":97,"./bindCallback":107,"./isIterateeCall":115}],109:[function(a,b){function c(a){return function(b,c,e){for(var f=d(b),g=e(b),h=g.length,i=a?h:-1;a?i--:++i<h;){var j=g[i];if(c(f[j],j,f)===!1)break}return b}}var d=a("./toObject");b.exports=c},{"./toObject":119}],110:[function(a,b){var c=a("./baseProperty"),d=c("length");b.exports=d},{"./baseProperty":106}],111:[function(a,b){function c(a,b){var c=null==a?void 0:a[b];return d(c)?c:void 0}var d=a("../lang/isNative");b.exports=c},{"../lang/isNative":123}],112:[function(a,b){function c(a){return null!=a&&e(d(a))}var d=a("./getLength"),e=a("./isLength");b.exports=c},{"./getLength":110,"./isLength":116}],113:[function(a,b){var c=function(){try{Object({toString:0}+"")}catch(a){return function(){return!1}}return function(a){return"function"!=typeof a.toString&&"string"==typeof(a+"")}}();b.exports=c},{}],114:[function(a,b){function c(a,b){return a="number"==typeof a||d.test(a)?+a:-1,b=null==b?e:b,a>-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],115:[function(a,b){function c(a,b,c){if(!f(c))return!1;var g=typeof b;if("number"==g?d(c)&&e(b,c.length):"string"==g&&b in c){var h=c[b];return a===a?a===h:h!==h}return!1}var d=a("./isArrayLike"),e=a("./isIndex"),f=a("../lang/isObject");b.exports=c},{"../lang/isObject":124,"./isArrayLike":112,"./isIndex":114}],116:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],117:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],118:[function(a,b){function c(a){for(var b=i(a),c=b.length,j=c&&a.length,l=!!j&&g(j)&&(e(a)||d(a)||h(a)),m=-1,n=[];++m<c;){var o=b[m];(l&&f(o,j)||k.call(a,o))&&n.push(o)}return n}var d=a("../lang/isArguments"),e=a("../lang/isArray"),f=a("./isIndex"),g=a("./isLength"),h=a("../lang/isString"),i=a("../object/keysIn"),j=Object.prototype,k=j.hasOwnProperty;b.exports=c},{"../lang/isArguments":120,"../lang/isArray":121,"../lang/isString":126,"../object/keysIn":130,"./isIndex":114,"./isLength":116}],119:[function(a,b){function c(a){if(f.unindexedChars&&e(a)){for(var b=-1,c=a.length,g=Object(a);++b<c;)g[b]=a.charAt(b);return g}return d(a)?a:Object(a)}var d=a("../lang/isObject"),e=a("../lang/isString"),f=a("../support");b.exports=c},{"../lang/isObject":124,"../lang/isString":126,"../support":132}],120:[function(a,b){function c(a){return e(a)&&d(a)&&g.call(a,"callee")&&!h.call(a,"callee")}var d=a("../internal/isArrayLike"),e=a("../internal/isObjectLike"),f=Object.prototype,g=f.hasOwnProperty,h=f.propertyIsEnumerable;b.exports=c},{"../internal/isArrayLike":112,"../internal/isObjectLike":117}],121:[function(a,b){var c=a("../internal/getNative"),d=a("../internal/isLength"),e=a("../internal/isObjectLike"),f="[object Array]",g=Object.prototype,h=g.toString,i=c(Array,"isArray"),j=i||function(a){return e(a)&&d(a.length)&&h.call(a)==f};b.exports=j},{"../internal/getNative":111,"../internal/isLength":116,"../internal/isObjectLike":117}],122:[function(a,b){function c(a){return d(a)&&g.call(a)==e}var d=a("./isObject"),e="[object Function]",f=Object.prototype,g=f.toString;b.exports=c},{"./isObject":124}],123:[function(a,b){function c(a){return null==a?!1:d(a)?k.test(i.call(a)):f(a)&&(e(a)?k:g).test(a)}var d=a("./isFunction"),e=a("../internal/isHostObject"),f=a("../internal/isObjectLike"),g=/^\[object .+?Constructor\]$/,h=Object.prototype,i=Function.prototype.toString,j=h.hasOwnProperty,k=RegExp("^"+i.call(j).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");b.exports=c},{"../internal/isHostObject":113,"../internal/isObjectLike":117,"./isFunction":122}],124:[function(a,b){function c(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}b.exports=c},{}],125:[function(a,b){function c(a){var b;if(!g(a)||l.call(a)!=i||f(a)||e(a)||!k.call(a,"constructor")&&(b=a.constructor,"function"==typeof b&&!(b instanceof b)))return!1;var c;return h.ownLast?(d(a,function(a,b,d){return c=k.call(d,b),!1}),c!==!1):(d(a,function(a,b){c=b}),void 0===c||k.call(a,c))}var d=a("../internal/baseForIn"),e=a("./isArguments"),f=a("../internal/isHostObject"),g=a("../internal/isObjectLike"),h=a("../support"),i="[object Object]",j=Object.prototype,k=j.hasOwnProperty,l=j.toString;b.exports=c},{"../internal/baseForIn":103,"../internal/isHostObject":113,"../internal/isObjectLike":117,"../support":132,"./isArguments":120}],126:[function(a,b){function c(a){return"string"==typeof a||d(a)&&g.call(a)==e}var d=a("../internal/isObjectLike"),e="[object String]",f=Object.prototype,g=f.toString;b.exports=c},{"../internal/isObjectLike":117}],127:[function(a,b){function c(a){return e(a)&&d(a.length)&&!!C[E.call(a)]}var d=a("../internal/isLength"),e=a("../internal/isObjectLike"),f="[object Arguments]",g="[object Array]",h="[object Boolean]",i="[object Date]",j="[object Error]",k="[object Function]",l="[object Map]",m="[object Number]",n="[object Object]",o="[object RegExp]",p="[object Set]",q="[object String]",r="[object WeakMap]",s="[object ArrayBuffer]",t="[object Float32Array]",u="[object Float64Array]",v="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",y="[object Uint8Array]",z="[object Uint8ClampedArray]",A="[object Uint16Array]",B="[object Uint32Array]",C={};C[t]=C[u]=C[v]=C[w]=C[x]=C[y]=C[z]=C[A]=C[B]=!0,C[f]=C[g]=C[s]=C[h]=C[i]=C[j]=C[k]=C[l]=C[m]=C[n]=C[o]=C[p]=C[q]=C[r]=!1;var D=Object.prototype,E=D.toString;b.exports=c},{"../internal/isLength":116,"../internal/isObjectLike":117}],128:[function(a,b){function c(a){return d(a,e(a))}var d=a("../internal/baseCopy"),e=a("../object/keysIn");b.exports=c},{"../internal/baseCopy":101,"../object/keysIn":130}],129:[function(a,b){var c=a("../internal/getNative"),d=a("../internal/isArrayLike"),e=a("../lang/isObject"),f=a("../internal/shimKeys"),g=a("../support"),h=c(Object,"keys"),i=h?function(a){var b=null==a?void 0:a.constructor;return"function"==typeof b&&b.prototype===a||("function"==typeof a?g.enumPrototypes:d(a))?f(a):e(a)?h(a):[]}:f;b.exports=i},{"../internal/getNative":111,"../internal/isArrayLike":112,"../internal/shimKeys":118,"../lang/isObject":124,"../support":132}],130:[function(a,b){function c(a){if(null==a)return[];j(a)||(a=Object(a));var b=a.length;b=b&&i(b)&&(f(a)||e(a)||k(a))&&b||0;for(var c=a.constructor,d=-1,m=g(c)&&c.prototype||x,n=m===a,o=Array(b),q=b>0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d<b;)o[d]=d+"";for(var C in a)t&&"prototype"==C||r&&("message"==C||"name"==C)||q&&h(C,b)||"constructor"==C&&(n||!z.call(a,C))||o.push(C);if(l.nonEnumShadows&&a!==x){var D=a===y?u:a===w?p:A.call(a),E=B[D]||B[s];for(D==s&&(m=x),b=v.length;b--;){C=v[b];var F=E[C];n&&F||(F?!z.call(a,C):a[C]===m[C])||o.push(C)}}return o}var d=a("../internal/arrayEach"),e=a("../lang/isArguments"),f=a("../lang/isArray"),g=a("../lang/isFunction"),h=a("../internal/isIndex"),i=a("../internal/isLength"),j=a("../lang/isObject"),k=a("../lang/isString"),l=a("../support"),m="[object Array]",n="[object Boolean]",o="[object Date]",p="[object Error]",q="[object Function]",r="[object Number]",s="[object Object]",t="[object RegExp]",u="[object String]",v=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],w=Error.prototype,x=Object.prototype,y=String.prototype,z=x.hasOwnProperty,A=x.toString,B={};B[m]=B[o]=B[r]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},B[n]=B[u]={constructor:!0,toString:!0,valueOf:!0},B[p]=B[q]=B[t]={constructor:!0,toString:!0},B[s]={constructor:!0},d(v,function(a){for(var b in B)if(z.call(B,b)){var c=B[b];c[a]=z.call(c,a)}}),b.exports=c},{"../internal/arrayEach":100,"../internal/isIndex":114,"../internal/isLength":116,"../lang/isArguments":120,"../lang/isArray":121,"../lang/isFunction":122,"../lang/isObject":124,"../lang/isString":126,"../support":132}],131:[function(a,b){var c=a("../internal/baseMerge"),d=a("../internal/createAssigner"),e=d(c);b.exports=e},{"../internal/baseMerge":104,"../internal/createAssigner":108}],132:[function(a,b){var c=Array.prototype,d=Error.prototype,e=Object.prototype,f=e.propertyIsEnumerable,g=c.splice,h={};!function(a){var b=function(){this.x=a},c={0:a,length:a},e=[];b.prototype={valueOf:a,y:a};for(var i in new b)e.push(i);h.enumErrorProps=f.call(d,"message")||f.call(d,"name"),h.enumPrototypes=f.call(b,"prototype"),h.nonEnumShadows=!/valueOf/.test(e),h.ownLast="x"!=e[0],h.spliceObjects=(g.call(c,0,1),!c[0]),h.unindexedChars="x"[0]+Object("x")[0]!="xx"}(1,0),b.exports=h},{}],133:[function(a,b){function c(a){return a}b.exports=c},{}],134:[function(a,b){"use strict";var c=a("object-keys");b.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var a={},b=Symbol("test");if("string"==typeof b)return!1;var d=42;a[b]=d;for(b in a)return!1;if(0!==c(a).length)return!1;if("function"==typeof Object.keys&&0!==Object.keys(a).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(a).length)return!1;var e=Object.getOwnPropertySymbols(a);if(1!==e.length||e[0]!==b)return!1;if(!Object.prototype.propertyIsEnumerable.call(a,b))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var f=Object.getOwnPropertyDescriptor(a,b);if(f.value!==d||f.enumerable!==!0)return!1}return!0}},{"object-keys":141}],135:[function(a,b){"use strict";var c=a("object-keys"),d=a("function-bind"),e=function(a){return"undefined"!=typeof a&&null!==a},f=a("./hasSymbols")(),g=Object,h=d.call(Function.call,Array.prototype.push),i=d.call(Function.call,Object.prototype.propertyIsEnumerable);b.exports=function(a){if(!e(a))throw new TypeError("target must be an object");var b,d,j,k,l,m,n,o=g(a);for(b=1;b<arguments.length;++b){if(d=g(arguments[b]),k=c(d),f&&Object.getOwnPropertySymbols)for(l=Object.getOwnPropertySymbols(d),j=0;j<l.length;++j)n=l[j],i(d,n)&&h(k,n);for(j=0;j<k.length;++j)n=k[j],m=d[n],i(d,n)&&(o[n]=m)}return o}},{"./hasSymbols":134,"function-bind":140,"object-keys":141}],136:[function(a,b){"use strict";var c=a("define-properties"),d=a("./implementation"),e=a("./polyfill"),f=a("./shim");c(d,{implementation:d,getPolyfill:e,shim:f}),b.exports=d},{"./implementation":135,"./polyfill":143,"./shim":144,"define-properties":137}],137:[function(a,b){"use strict";var c=a("object-keys"),d=a("foreach"),e="function"==typeof Symbol&&"symbol"==typeof Symbol(),f=Object.prototype.toString,g=function(a){return"function"==typeof a&&"[object Function]"===f.call(a)},h=function(){var a={};try{Object.defineProperty(a,"x",{enumerable:!1,value:a});for(var b in a)return!1;return a.x===a}catch(c){return!1}},i=Object.defineProperty&&h(),j=function(a,b,c,d){(!(b in a)||g(d)&&d())&&(i?Object.defineProperty(a,b,{configurable:!0,enumerable:!1,value:c,writable:!0}):a[b]=c)},k=function(a,b){var f=arguments.length>2?arguments[2]:{},g=c(b);e&&(g=g.concat(Object.getOwnPropertySymbols(b))),d(g,function(c){j(a,c,b[c],f[c])})};k.supportsDescriptors=!!i,b.exports=k},{foreach:138,"object-keys":141}],138:[function(a,b){var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString;b.exports=function(a,b,e){if("[object Function]"!==d.call(b))throw new TypeError("iterator must be a function");var f=a.length;if(f===+f)for(var g=0;f>g;g++)b.call(e,a[g],g,a);else for(var h in a)c.call(a,h)&&b.call(e,a[h],h,a)}},{}],139:[function(a,b){var c="Function.prototype.bind called on incompatible ",d=Array.prototype.slice,e=Object.prototype.toString,f="[object Function]";b.exports=function(a){var b=this;if("function"!=typeof b||e.call(b)!==f)throw new TypeError(c+b);for(var g,h=d.call(arguments,1),i=function(){if(this instanceof g){var c=b.apply(this,h.concat(d.call(arguments)));return Object(c)===c?c:this}return b.apply(a,h.concat(d.call(arguments)))},j=Math.max(0,b.length-h.length),k=[],l=0;j>l;l++)k.push("$"+l);if(g=Function("binder","return function ("+k.join(",")+"){ return binder.apply(this,arguments); }")(i),b.prototype){var m=function(){};m.prototype=b.prototype,g.prototype=new m,m.prototype=null}return g}},{}],140:[function(a,b){var c=a("./implementation");b.exports=Function.prototype.bind||c},{"./implementation":139}],141:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=Object.prototype.propertyIsEnumerable,h=!g.call({toString:null},"toString"),i=g.call(function(){},"prototype"),j=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],k=function(a){var b=a.constructor;return b&&b.prototype===a},l={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},m=function(){if("undefined"==typeof window)return!1;for(var a in window)try{if(!l["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{k(window[a])}catch(b){return!0}}catch(b){return!0}return!1}(),n=function(a){if("undefined"==typeof window||!m)return k(a);try{return k(a)}catch(b){return!1}},o=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),g=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!g)throw new TypeError("Object.keys called on a non-object");var m=i&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o<a.length;++o)l.push(String(o));if(g&&a.length>0)for(var p=0;p<a.length;++p)l.push(String(p));else for(var q in a)m&&"prototype"===q||!c.call(a,q)||l.push(String(q));if(h)for(var r=n(a),s=0;s<j.length;++s)r&&"constructor"===j[s]||!c.call(a,j[s])||l.push(j[s]);return l};o.shim=function(){if(Object.keys){var a=function(){return 2===(Object.keys(arguments)||"").length}(1,2);if(!a){var b=Object.keys;Object.keys=function(a){return b(f(a)?e.call(a):a)}}}else Object.keys=o;return Object.keys||o},b.exports=o},{"./isArguments":142}],142:[function(a,b){"use strict";var c=Object.prototype.toString;b.exports=function(a){var b=c.call(a),d="[object Arguments]"===b;return d||(d="[object Array]"!==b&&null!==a&&"object"==typeof a&&"number"==typeof a.length&&a.length>=0&&"[object Function]"===c.call(a.callee)),d}},{}],143:[function(a,b){"use strict";var c=a("./implementation"),d=function(){if(!Object.assign)return!1;for(var a="abcdefghijklmnopqrst",b=a.split(""),c={},d=0;d<b.length;++d)c[b[d]]=b[d];var e=Object.assign({},c),f="";
+
+for(var g in e)f+=g;return a!==f},e=function(){if(!Object.assign||!Object.preventExtensions)return!1;var a=Object.preventExtensions({1:2});try{Object.assign(a,"xy")}catch(b){return"y"===a[1]}};b.exports=function(){return Object.assign?d()?c:e()?c:Object.assign:c}},{"./implementation":135}],144:[function(a,b){"use strict";var c=a("define-properties"),d=a("./polyfill");b.exports=function(){var a=d();return c(Object,{assign:a},{assign:function(){return Object.assign!==a}}),a}},{"./polyfill":143,"define-properties":137}],145:[function(a,b){function c(a,b){var c,d=null;try{c=JSON.parse(a,b)}catch(e){d=e}return[d,c]}b.exports=c},{}],146:[function(a,b){function c(a){return a.replace(/\n\r?\s*/g,"")}b.exports=function(a){for(var b="",d=0;d<arguments.length;d++)b+=c(a[d])+(arguments[d+1]||"");return b}},{}],147:[function(a,b){"use strict";function c(a,b){for(var c=0;c<a.length;c++)b(a[c])}function d(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function e(a,b,c){var d=a;return k(b)?(c=b,"string"==typeof a&&(d={uri:a})):d=m(b,{uri:a}),d.callback=c,d}function f(a,b,c){return b=e(a,b,c),g(b)}function g(a){function b(){4===k.readyState&&g()}function c(){var a=void 0;if(k.response?a=k.response:"text"!==k.responseType&&k.responseType||(a=k.responseText||k.responseXML),u)try{a=JSON.parse(a)}catch(b){}return a}function e(a){clearTimeout(o),a instanceof Error||(a=new Error(""+(a||"Unknown XMLHttpRequest Error"))),a.statusCode=0,h(a,i)}function g(){if(!n){var b;clearTimeout(o),b=a.useXDR&&void 0===k.status?200:1223===k.status?204:k.status;var d=i,e=null;0!==b?(d={body:c(),statusCode:b,method:q,headers:{},url:p,rawRequest:k},k.getAllResponseHeaders&&(d.headers=l(k.getAllResponseHeaders()))):e=new Error("Internal XMLHttpRequest Error"),h(e,d,d.body)}}var h=a.callback;if("undefined"==typeof h)throw new Error("callback argument missing");h=j(h);var i={body:void 0,headers:{},statusCode:0,method:q,url:p,rawRequest:k},k=a.xhr||null;k||(k=a.cors||a.useXDR?new f.XDomainRequest:new f.XMLHttpRequest);var m,n,o,p=k.url=a.uri||a.url,q=k.method=a.method||"GET",r=a.body||a.data||null,s=k.headers=a.headers||{},t=!!a.sync,u=!1;if("json"in a&&(u=!0,s.accept||s.Accept||(s.Accept="application/json"),"GET"!==q&&"HEAD"!==q&&(s["content-type"]||s["Content-Type"]||(s["Content-Type"]="application/json"),r=JSON.stringify(a.json))),k.onreadystatechange=b,k.onload=g,k.onerror=e,k.onprogress=function(){},k.ontimeout=e,k.open(q,p,!t,a.username,a.password),t||(k.withCredentials=!!a.withCredentials),!t&&a.timeout>0&&(o=setTimeout(function(){n=!0,k.abort("timeout");var a=new Error("XMLHttpRequest timeout");a.code="ETIMEDOUT",e(a)},a.timeout)),k.setRequestHeader)for(m in s)s.hasOwnProperty(m)&&k.setRequestHeader(m,s[m]);else if(a.headers&&!d(a.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in a&&(k.responseType=a.responseType),"beforeSend"in a&&"function"==typeof a.beforeSend&&a.beforeSend(k),k.send(r),k}function h(){}var i=a("global/window"),j=a("once"),k=a("is-function"),l=a("parse-headers"),m=a("xtend");b.exports=f,f.XMLHttpRequest=i.XMLHttpRequest||h,f.XDomainRequest="withCredentials"in new f.XMLHttpRequest?f.XMLHttpRequest:i.XDomainRequest,c(["get","put","post","patch","head","delete"],function(a){f["delete"===a?"del":a]=function(b,c,d){return c=e(b,c,d),c.method=a.toUpperCase(),g(c)}})},{"global/window":93,"is-function":148,once:149,"parse-headers":152,xtend:153}],148:[function(a,b){function c(a){var b=d.call(a);return"[object Function]"===b||"function"==typeof a&&"[object RegExp]"!==b||"undefined"!=typeof window&&(a===window.setTimeout||a===window.alert||a===window.confirm||a===window.prompt)}b.exports=c;var d=Object.prototype.toString},{}],149:[function(a,b){function c(a){var b=!1;return function(){return b?void 0:(b=!0,a.apply(this,arguments))}}b.exports=c,c.proto=c(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return c(this)},configurable:!0})})},{}],150:[function(a,b){function c(a,b,c){if(!g(b))throw new TypeError("iterator must be a function");arguments.length<3&&(c=this),"[object Array]"===h.call(a)?d(a,b,c):"string"==typeof a?e(a,b,c):f(a,b,c)}function d(a,b,c){for(var d=0,e=a.length;e>d;d++)i.call(a,d)&&b.call(c,a[d],d,a)}function e(a,b,c){for(var d=0,e=a.length;e>d;d++)b.call(c,a.charAt(d),d,a)}function f(a,b,c){for(var d in a)i.call(a,d)&&b.call(c,a[d],d,a)}var g=a("is-function");b.exports=c;var h=Object.prototype.toString,i=Object.prototype.hasOwnProperty},{"is-function":148}],151:[function(a,b,c){function d(a){return a.replace(/^\s*|\s*$/g,"")}c=b.exports=d,c.left=function(a){return a.replace(/^\s*/,"")},c.right=function(a){return a.replace(/\s*$/,"")}},{}],152:[function(a,b){var c=a("trim"),d=a("for-each"),e=function(a){return"[object Array]"===Object.prototype.toString.call(a)};b.exports=function(a){if(!a)return{};var b={};return d(c(a).split("\n"),function(a){var d=a.indexOf(":"),f=c(a.slice(0,d)).toLowerCase(),g=c(a.slice(d+1));"undefined"==typeof b[f]?b[f]=g:e(b[f])?b[f].push(g):b[f]=[b[f],g]}),b}},{"for-each":150,trim:151}],153:[function(a,b){function c(){for(var a={},b=0;b<arguments.length;b++){var c=arguments[b];for(var e in c)d.call(c,e)&&(a[e]=c[e])}return a}b.exports=c;var d=Object.prototype.hasOwnProperty},{}]},{},[91])(91)}),function(a){var b=a.vttjs={},c=b.VTTCue,d=b.VTTRegion,e=a.VTTCue,f=a.VTTRegion;b.shim=function(){b.VTTCue=c,b.VTTRegion=d},b.restore=function(){b.VTTCue=e,b.VTTRegion=f}}(this),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=h[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){if("string"!=typeof a)return!1;var b=i[a.toLowerCase()];return b?a.toLowerCase():!1}function e(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)a[d]=c[d]}return a}function f(a,b,f){var h=this,i=/MSIE\s8\.0/.test(navigator.userAgent),j={};i?h=document.createElement("custom"):j.enumerable=!0,h.hasBeenReset=!1;var k="",l=!1,m=a,n=b,o=f,p=null,q="",r=!0,s="auto",t="start",u=50,v="middle",w=50,x="middle";return Object.defineProperty(h,"id",e({},j,{get:function(){return k},set:function(a){k=""+a}})),Object.defineProperty(h,"pauseOnExit",e({},j,{get:function(){return l},set:function(a){l=!!a}})),Object.defineProperty(h,"startTime",e({},j,{get:function(){return m},set:function(a){if("number"!=typeof a)throw new TypeError("Start time must be set to a number.");m=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"endTime",e({},j,{get:function(){return n},set:function(a){if("number"!=typeof a)throw new TypeError("End time must be set to a number.");n=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"text",e({},j,{get:function(){return o},set:function(a){o=""+a,this.hasBeenReset=!0}})),Object.defineProperty(h,"region",e({},j,{get:function(){return p},set:function(a){p=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"vertical",e({},j,{get:function(){return q},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");q=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"snapToLines",e({},j,{get:function(){return r},set:function(a){r=!!a,this.hasBeenReset=!0}})),Object.defineProperty(h,"line",e({},j,{get:function(){return s},set:function(a){if("number"!=typeof a&&a!==g)throw new SyntaxError("An invalid number or illegal string was specified.");s=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"lineAlign",e({},j,{get:function(){return t},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");t=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"position",e({},j,{get:function(){return u},set:function(a){if(0>a||a>100)throw new Error("Position must be between 0 and 100.");u=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"positionAlign",e({},j,{get:function(){return v},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");v=b,this.hasBeenReset=!0}})),Object.defineProperty(h,"size",e({},j,{get:function(){return w},set:function(a){if(0>a||a>100)throw new Error("Size must be between 0 and 100.");w=a,this.hasBeenReset=!0}})),Object.defineProperty(h,"align",e({},j,{get:function(){return x},set:function(a){var b=d(a);if(!b)throw new SyntaxError("An invalid or illegal string was specified.");x=b,this.hasBeenReset=!0}})),h.displayState=void 0,i?h:void 0}var g="auto",h={"":!0,lr:!0,rl:!0},i={start:!0,middle:!0,end:!0,left:!0,right:!0};f.prototype.getCueAsHTML=function(){return WebVTT.convertCueToDOMTree(window,this.text)},a.VTTCue=a.VTTCue||f,b.VTTCue=f}(this,this.vttjs||{}),function(a,b){function c(a){if("string"!=typeof a)return!1;var b=f[a.toLowerCase()];return b?a.toLowerCase():!1}function d(a){return"number"==typeof a&&a>=0&&100>=a}function e(){var a=100,b=3,e=0,f=100,g=0,h=100,i="";Object.defineProperties(this,{width:{enumerable:!0,get:function(){return a},set:function(b){if(!d(b))throw new Error("Width must be between 0 and 100.");a=b}},lines:{enumerable:!0,get:function(){return b},set:function(a){if("number"!=typeof a)throw new TypeError("Lines must be set to a number.");b=a}},regionAnchorY:{enumerable:!0,get:function(){return f},set:function(a){if(!d(a))throw new Error("RegionAnchorX must be between 0 and 100.");f=a}},regionAnchorX:{enumerable:!0,get:function(){return e},set:function(a){if(!d(a))throw new Error("RegionAnchorY must be between 0 and 100.");e=a}},viewportAnchorY:{enumerable:!0,get:function(){return h},set:function(a){if(!d(a))throw new Error("ViewportAnchorY must be between 0 and 100.");h=a}},viewportAnchorX:{enumerable:!0,get:function(){return g},set:function(a){if(!d(a))throw new Error("ViewportAnchorX must be between 0 and 100.");g=a}},scroll:{enumerable:!0,get:function(){return i},set:function(a){var b=c(a);if(b===!1)throw new SyntaxError("An invalid or illegal string was specified.");i=b}}})}var f={"":!0,up:!0};a.VTTRegion=a.VTTRegion||e,b.VTTRegion=e}(this,this.vttjs||{}),function(a){function b(a,b){this.name="ParsingError",this.code=a.code,this.message=b||a.message}function c(a){function b(a,b,c,d){return 3600*(0|a)+60*(0|b)+(0|c)+(0|d)/1e3}var c=a.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return c?c[3]?b(c[1],c[2],c[3].replace(":",""),c[4]):c[1]>59?b(c[1],c[2],0,c[4]):b(0,c[1],c[2],c[4]):null}function d(){this.values=o(null)}function e(a,b,c,d){var e=d?a.split(d):[a];for(var f in e)if("string"==typeof e[f]){var g=e[f].split(c);if(2===g.length){var h=g[0],i=g[1];b(h,i)}}}function f(a,f,g){function h(){var d=c(a);if(null===d)throw new b(b.Errors.BadTimeStamp,"Malformed timestamp: "+k);return a=a.replace(/^[^\sa-zA-Z-]+/,""),d}function i(a,b){var c=new d;e(a,function(a,b){switch(a){case"region":for(var d=g.length-1;d>=0;d--)if(g[d].id===b){c.set(a,g[d].region);break}break;case"vertical":c.alt(a,b,["rl","lr"]);break;case"line":var e=b.split(","),f=e[0];c.integer(a,f),c.percent(a,f)?c.set("snapToLines",!1):null,c.alt(a,f,["auto"]),2===e.length&&c.alt("lineAlign",e[1],["start","middle","end"]);break;case"position":e=b.split(","),c.percent(a,e[0]),2===e.length&&c.alt("positionAlign",e[1],["start","middle","end"]);break;case"size":c.percent(a,b);break;case"align":c.alt(a,b,["start","middle","end","left","right"])}},/:/,/\s/),b.region=c.get("region",null),b.vertical=c.get("vertical",""),b.line=c.get("line","auto"),b.lineAlign=c.get("lineAlign","start"),b.snapToLines=c.get("snapToLines",!0),b.size=c.get("size",100),b.align=c.get("align","middle"),b.position=c.get("position",{start:0,left:0,middle:50,end:100,right:100},b.align),b.positionAlign=c.get("positionAlign",{start:"start",left:"start",middle:"middle",end:"end",right:"end"},b.align)}function j(){a=a.replace(/^\s+/,"")}var k=a;if(j(),f.startTime=h(),j(),"-->"!==a.substr(0,3))throw new b(b.Errors.BadTimeStamp,"Malformed time stamp (time stamps must be separated by '-->'): "+k);a=a.substr(3),j(),f.endTime=h(),j(),i(a,f)}function g(a,b){function d(){function a(a){return b=b.substr(a.length),a}if(!b)return null;var c=b.match(/^([^<]*)(<[^>]+>?)?/);return a(c[1]?c[1]:c[2])}function e(a){return p[a]}function f(a){for(;o=a.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)a=a.replace(o[0],e);return a}function g(a,b){return!s[b.localName]||s[b.localName]===a.localName}function h(b,c){var d=q[b];if(!d)return null;var e=a.document.createElement(d);e.localName=d;var f=r[b];return f&&c&&(e[f]=c.trim()),e}for(var i,j=a.document.createElement("div"),k=j,l=[];null!==(i=d());)if("<"!==i[0])k.appendChild(a.document.createTextNode(f(i)));else{if("/"===i[1]){l.length&&l[l.length-1]===i.substr(2).replace(">","")&&(l.pop(),k=k.parentNode);continue}var m,n=c(i.substr(1,i.length-2));if(n){m=a.document.createProcessingInstruction("timestamp",n),k.appendChild(m);continue}var o=i.match(/^<([^.\s\/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);if(!o)continue;if(m=h(o[1],o[3]),!m)continue;if(!g(k,m))continue;o[2]&&(m.className=o[2].substr(1).replace("."," ")),l.push(o[1]),k.appendChild(m),k=m}return j}function h(a){function b(a,b){for(var c=b.childNodes.length-1;c>=0;c--)a.push(b.childNodes[c])}function c(a){if(!a||!a.length)return null;var d=a.pop(),e=d.textContent||d.innerText;if(e){var f=e.match(/^.*(\n|\r)/);return f?(a.length=0,f[0]):e}return"ruby"===d.tagName?c(a):d.childNodes?(b(a,d),c(a)):void 0}var d,e=[],f="";if(!a||!a.childNodes)return"ltr";for(b(e,a);f=c(e);)for(var g=0;g<f.length;g++){d=f.charCodeAt(g);for(var h=0;h<t.length;h++)if(t[h]===d)return"rtl"}return"ltr"}function i(a){if("number"==typeof a.line&&(a.snapToLines||a.line>=0&&a.line<=100))return a.line;if(!a.track||!a.track.textTrackList||!a.track.textTrackList.mediaElement)return-1;for(var b=a.track,c=b.textTrackList,d=0,e=0;e<c.length&&c[e]!==b;e++)"showing"===c[e].mode&&d++;return-1*++d}function j(){}function k(a,b,c){var d=/MSIE\s8\.0/.test(navigator.userAgent),e="rgba(255, 255, 255, 1)",f="rgba(0, 0, 0, 0.8)";d&&(e="rgb(255, 255, 255)",f="rgb(0, 0, 0)"),j.call(this),this.cue=b,this.cueDiv=g(a,b.text);var i={color:e,backgroundColor:f,position:"relative",left:0,right:0,top:0,bottom:0,display:"inline"};d||(i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl",i.unicodeBidi="plaintext"),this.applyStyles(i,this.cueDiv),this.div=a.document.createElement("div"),i={textAlign:"middle"===b.align?"center":b.align,font:c.font,whiteSpace:"pre-line",position:"absolute"},d||(i.direction=h(this.cueDiv),i.writingMode=""===b.vertical?"horizontal-tb":"lr"===b.vertical?"vertical-lr":"vertical-rl".stylesunicodeBidi="plaintext"),this.applyStyles(i),this.div.appendChild(this.cueDiv);var k=0;switch(b.positionAlign){case"start":k=b.position;break;case"middle":k=b.position-b.size/2;break;case"end":k=b.position-b.size}this.applyStyles(""===b.vertical?{left:this.formatStyle(k,"%"),width:this.formatStyle(b.size,"%")}:{top:this.formatStyle(k,"%"),height:this.formatStyle(b.size,"%")}),this.move=function(a){this.applyStyles({top:this.formatStyle(a.top,"px"),bottom:this.formatStyle(a.bottom,"px"),left:this.formatStyle(a.left,"px"),right:this.formatStyle(a.right,"px"),height:this.formatStyle(a.height,"px"),width:this.formatStyle(a.width,"px")})}}function l(a){var b,c,d,e,f=/MSIE\s8\.0/.test(navigator.userAgent);if(a.div){c=a.div.offsetHeight,d=a.div.offsetWidth,e=a.div.offsetTop;var g=(g=a.div.childNodes)&&(g=g[0])&&g.getClientRects&&g.getClientRects();a=a.div.getBoundingClientRect(),b=g?Math.max(g[0]&&g[0].height||0,a.height/g.length):0}this.left=a.left,this.right=a.right,this.top=a.top||e,this.height=a.height||c,this.bottom=a.bottom||e+(a.height||c),this.width=a.width||d,this.lineHeight=void 0!==b?b:a.lineHeight,f&&!this.lineHeight&&(this.lineHeight=13)}function m(a,b,c,d){function e(a,b){for(var e,f=new l(a),g=1,h=0;h<b.length;h++){for(;a.overlapsOppositeAxis(c,b[h])||a.within(c)&&a.overlapsAny(d);)a.move(b[h]);if(a.within(c))return a;var i=a.intersectPercentage(c);g>i&&(e=new l(a),g=i),a=new l(f)}return e||f}var f=new l(b),g=b.cue,h=i(g),j=[];if(g.snapToLines){var k;switch(g.vertical){case"":j=["+y","-y"],k="height";break;case"rl":j=["+x","-x"],k="width";break;case"lr":j=["-x","+x"],k="width"}var m=f.lineHeight,n=m*Math.round(h),o=c[k]+m,p=j[0];Math.abs(n)>o&&(n=0>n?-1:1,n*=Math.ceil(o/m)*m),0>h&&(n+=""===g.vertical?c.height:c.width,j=j.reverse()),f.move(p,n)}else{var q=f.lineHeight/c.height*100;switch(g.lineAlign){case"middle":h-=q/2;break;case"end":h-=q}switch(g.vertical){case"":b.applyStyles({top:b.formatStyle(h,"%")});break;case"rl":b.applyStyles({left:b.formatStyle(h,"%")});break;case"lr":b.applyStyles({right:b.formatStyle(h,"%")})}j=["+y","-x","+x","-y"],f=new l(b)}var r=e(f,j);b.move(r.toCSSCompatValues(c))}function n(){}var o=Object.create||function(){function a(){}return function(b){if(1!==arguments.length)throw new Error("Object.create shim only accepts one parameter.");return a.prototype=b,new a}}();b.prototype=o(Error.prototype),b.prototype.constructor=b,b.Errors={BadSignature:{code:0,message:"Malformed WebVTT signature."},BadTimeStamp:{code:1,message:"Malformed time stamp."}},d.prototype={set:function(a,b){this.get(a)||""===b||(this.values[a]=b)},get:function(a,b,c){return c?this.has(a)?this.values[a]:b[c]:this.has(a)?this.values[a]:b},has:function(a){return a in this.values},alt:function(a,b,c){for(var d=0;d<c.length;++d)if(b===c[d]){this.set(a,b);break}},integer:function(a,b){/^-?\d+$/.test(b)&&this.set(a,parseInt(b,10))},percent:function(a,b){var c;return(c=b.match(/^([\d]{1,3})(\.[\d]*)?%$/))&&(b=parseFloat(b),b>=0&&100>=b)?(this.set(a,b),!0):!1}};var p={"&amp;":"&","&lt;":"<","&gt;":">","&lrm;":"‎","&rlm;":"‏","&nbsp;":" "},q={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},r={v:"title",lang:"lang"},s={rt:"ruby"},t=[1470,1472,1475,1478,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1520,1521,1522,1523,1524,1544,1547,1549,1563,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1645,1646,1647,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1765,1766,1774,1775,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1807,1808,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1969,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2e3,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2036,2037,2042,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2074,2084,2088,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2142,2208,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,8207,64285,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309,64310,64312,64313,64314,64315,64316,64318,64320,64321,64323,64324,64326,64327,64328,64329,64330,64331,64332,64333,64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345,64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357,64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369,64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381,64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393,64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405,64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417,64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429,64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441,64442,64443,64444,64445,64446,64447,64448,64449,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477,64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489,64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501,64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513,64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525,64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537,64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549,64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561,64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573,64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585,64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597,64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609,64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621,64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633,64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645,64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657,64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669,64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681,64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693,64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705,64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717,64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729,64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741,64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753,64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765,64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777,64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789,64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801,64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813,64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825,64826,64827,64828,64829,64848,64849,64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861,64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873,64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885,64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897,64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909,64910,64911,64914,64915,64916,64917,64918,64919,64920,64921,64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933,64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945,64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957,64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017,65018,65019,65020,65136,65137,65138,65139,65140,65142,65143,65144,65145,65146,65147,65148,65149,65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161,65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173,65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185,65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197,65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209,65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221,65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233,65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245,65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257,65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269,65270,65271,65272,65273,65274,65275,65276,67584,67585,67586,67587,67588,67589,67592,67594,67595,67596,67597,67598,67599,67600,67601,67602,67603,67604,67605,67606,67607,67608,67609,67610,67611,67612,67613,67614,67615,67616,67617,67618,67619,67620,67621,67622,67623,67624,67625,67626,67627,67628,67629,67630,67631,67632,67633,67634,67635,67636,67637,67639,67640,67644,67647,67648,67649,67650,67651,67652,67653,67654,67655,67656,67657,67658,67659,67660,67661,67662,67663,67664,67665,67666,67667,67668,67669,67671,67672,67673,67674,67675,67676,67677,67678,67679,67840,67841,67842,67843,67844,67845,67846,67847,67848,67849,67850,67851,67852,67853,67854,67855,67856,67857,67858,67859,67860,67861,67862,67863,67864,67865,67866,67867,67872,67873,67874,67875,67876,67877,67878,67879,67880,67881,67882,67883,67884,67885,67886,67887,67888,67889,67890,67891,67892,67893,67894,67895,67896,67897,67903,67968,67969,67970,67971,67972,67973,67974,67975,67976,67977,67978,67979,67980,67981,67982,67983,67984,67985,67986,67987,67988,67989,67990,67991,67992,67993,67994,67995,67996,67997,67998,67999,68e3,68001,68002,68003,68004,68005,68006,68007,68008,68009,68010,68011,68012,68013,68014,68015,68016,68017,68018,68019,68020,68021,68022,68023,68030,68031,68096,68112,68113,68114,68115,68117,68118,68119,68121,68122,68123,68124,68125,68126,68127,68128,68129,68130,68131,68132,68133,68134,68135,68136,68137,68138,68139,68140,68141,68142,68143,68144,68145,68146,68147,68160,68161,68162,68163,68164,68165,68166,68167,68176,68177,68178,68179,68180,68181,68182,68183,68184,68192,68193,68194,68195,68196,68197,68198,68199,68200,68201,68202,68203,68204,68205,68206,68207,68208,68209,68210,68211,68212,68213,68214,68215,68216,68217,68218,68219,68220,68221,68222,68223,68352,68353,68354,68355,68356,68357,68358,68359,68360,68361,68362,68363,68364,68365,68366,68367,68368,68369,68370,68371,68372,68373,68374,68375,68376,68377,68378,68379,68380,68381,68382,68383,68384,68385,68386,68387,68388,68389,68390,68391,68392,68393,68394,68395,68396,68397,68398,68399,68400,68401,68402,68403,68404,68405,68416,68417,68418,68419,68420,68421,68422,68423,68424,68425,68426,68427,68428,68429,68430,68431,68432,68433,68434,68435,68436,68437,68440,68441,68442,68443,68444,68445,68446,68447,68448,68449,68450,68451,68452,68453,68454,68455,68456,68457,68458,68459,68460,68461,68462,68463,68464,68465,68466,68472,68473,68474,68475,68476,68477,68478,68479,68608,68609,68610,68611,68612,68613,68614,68615,68616,68617,68618,68619,68620,68621,68622,68623,68624,68625,68626,68627,68628,68629,68630,68631,68632,68633,68634,68635,68636,68637,68638,68639,68640,68641,68642,68643,68644,68645,68646,68647,68648,68649,68650,68651,68652,68653,68654,68655,68656,68657,68658,68659,68660,68661,68662,68663,68664,68665,68666,68667,68668,68669,68670,68671,68672,68673,68674,68675,68676,68677,68678,68679,68680,126464,126465,126466,126467,126469,126470,126471,126472,126473,126474,126475,126476,126477,126478,126479,126480,126481,126482,126483,126484,126485,126486,126487,126488,126489,126490,126491,126492,126493,126494,126495,126497,126498,126500,126503,126505,126506,126507,126508,126509,126510,126511,126512,126513,126514,126516,126517,126518,126519,126521,126523,126530,126535,126537,126539,126541,126542,126543,126545,126546,126548,126551,126553,126555,126557,126559,126561,126562,126564,126567,126568,126569,126570,126572,126573,126574,126575,126576,126577,126578,126580,126581,126582,126583,126585,126586,126587,126588,126590,126592,126593,126594,126595,126596,126597,126598,126599,126600,126601,126603,126604,126605,126606,126607,126608,126609,126610,126611,126612,126613,126614,126615,126616,126617,126618,126619,126625,126626,126627,126629,126630,126631,126632,126633,126635,126636,126637,126638,126639,126640,126641,126642,126643,126644,126645,126646,126647,126648,126649,126650,126651,1114109];j.prototype.applyStyles=function(a,b){b=b||this.div;for(var c in a)a.hasOwnProperty(c)&&(b.style[c]=a[c])},j.prototype.formatStyle=function(a,b){return 0===a?0:a+b},k.prototype=o(j.prototype),k.prototype.constructor=k,l.prototype.move=function(a,b){switch(b=void 0!==b?b:this.lineHeight,a){case"+x":this.left+=b,this.right+=b;break;case"-x":this.left-=b,this.right-=b;break;case"+y":this.top+=b,this.bottom+=b;break;case"-y":this.top-=b,this.bottom-=b}},l.prototype.overlaps=function(a){return this.left<a.right&&this.right>a.left&&this.top<a.bottom&&this.bottom>a.top},l.prototype.overlapsAny=function(a){for(var b=0;b<a.length;b++)if(this.overlaps(a[b]))return!0;return!1},l.prototype.within=function(a){return this.top>=a.top&&this.bottom<=a.bottom&&this.left>=a.left&&this.right<=a.right},l.prototype.overlapsOppositeAxis=function(a,b){switch(b){case"+x":return this.left<a.left;case"-x":return this.right>a.right;case"+y":return this.top<a.top;case"-y":return this.bottom>a.bottom}},l.prototype.intersectPercentage=function(a){var b=Math.max(0,Math.min(this.right,a.right)-Math.max(this.left,a.left)),c=Math.max(0,Math.min(this.bottom,a.bottom)-Math.max(this.top,a.top)),d=b*c;return d/(this.height*this.width)},l.prototype.toCSSCompatValues=function(a){return{top:this.top-a.top,bottom:a.bottom-this.bottom,left:this.left-a.left,right:a.right-this.right,height:this.height,width:this.width}},l.getSimpleBoxPosition=function(a){var b=a.div?a.div.offsetHeight:a.tagName?a.offsetHeight:0,c=a.div?a.div.offsetWidth:a.tagName?a.offsetWidth:0,d=a.div?a.div.offsetTop:a.tagName?a.offsetTop:0;a=a.div?a.div.getBoundingClientRect():a.tagName?a.getBoundingClientRect():a;var e={left:a.left,right:a.right,top:a.top||d,height:a.height||b,bottom:a.bottom||d+(a.height||b),width:a.width||c};return e},n.StringDecoder=function(){return{decode:function(a){if(!a)return"";if("string"!=typeof a)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(a))}}},n.convertCueToDOMTree=function(a,b){return a&&b?g(a,b):null};var u=.05,v="sans-serif",w="1.5%";n.processCues=function(a,b,c){function d(a){for(var b=0;b<a.length;b++)if(a[b].hasBeenReset||!a[b].displayState)return!0;return!1}if(!a||!b||!c)return null;for(;c.firstChild;)c.removeChild(c.firstChild);var e=a.document.createElement("div");if(e.style.position="absolute",e.style.left="0",e.style.right="0",e.style.top="0",e.style.bottom="0",e.style.margin=w,c.appendChild(e),d(b)){var f=[],g=l.getSimpleBoxPosition(e),h=Math.round(g.height*u*100)/100,i={font:h+"px "+v};!function(){for(var c,d,h=0;h<b.length;h++)d=b[h],c=new k(a,d,i),e.appendChild(c.div),m(a,c,g,f),d.displayState=c.div,f.push(l.getSimpleBoxPosition(c))}()}else for(var j=0;j<b.length;j++)e.appendChild(b[j].displayState)},n.Parser=function(a,b,c){c||(c=b,b={}),b||(b={}),this.window=a,this.vttjs=b,this.state="INITIAL",this.buffer="",this.decoder=c||new TextDecoder("utf8"),this.regionList=[]},n.Parser.prototype={reportOrThrowError:function(a){if(!(a instanceof b))throw a;this.onparsingerror&&this.onparsingerror(a)},parse:function(a){function c(){for(var a=i.buffer,b=0;b<a.length&&"\r"!==a[b]&&"\n"!==a[b];)++b;var c=a.substr(0,b);return"\r"===a[b]&&++b,"\n"===a[b]&&++b,i.buffer=a.substr(b),c}function g(a){var b=new d;if(e(a,function(a,c){switch(a){case"id":b.set(a,c);break;case"width":b.percent(a,c);break;case"lines":b.integer(a,c);break;case"regionanchor":case"viewportanchor":var e=c.split(",");if(2!==e.length)break;var f=new d;if(f.percent("x",e[0]),
+f.percent("y",e[1]),!f.has("x")||!f.has("y"))break;b.set(a+"X",f.get("x")),b.set(a+"Y",f.get("y"));break;case"scroll":b.alt(a,c,["up"])}},/=/,/\s/),b.has("id")){var c=new(i.vttjs.VTTRegion||i.window.VTTRegion);c.width=b.get("width",100),c.lines=b.get("lines",3),c.regionAnchorX=b.get("regionanchorX",0),c.regionAnchorY=b.get("regionanchorY",100),c.viewportAnchorX=b.get("viewportanchorX",0),c.viewportAnchorY=b.get("viewportanchorY",100),c.scroll=b.get("scroll",""),i.onregion&&i.onregion(c),i.regionList.push({id:b.get("id"),region:c})}}function h(a){e(a,function(a,b){switch(a){case"Region":g(b)}},/:/)}var i=this;a&&(i.buffer+=i.decoder.decode(a,{stream:!0}));try{var j;if("INITIAL"===i.state){if(!/\r\n|\n/.test(i.buffer))return this;j=c();var k=j.match(/^WEBVTT([ \t].*)?$/);if(!k||!k[0])throw new b(b.Errors.BadSignature);i.state="HEADER"}for(var l=!1;i.buffer;){if(!/\r\n|\n/.test(i.buffer))return this;switch(l?l=!1:j=c(),i.state){case"HEADER":/:/.test(j)?h(j):j||(i.state="ID");continue;case"NOTE":j||(i.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(j)){i.state="NOTE";break}if(!j)continue;if(i.cue=new(i.vttjs.VTTCue||i.window.VTTCue)(0,0,""),i.state="CUE",-1===j.indexOf("-->")){i.cue.id=j;continue}case"CUE":try{f(j,i.cue,i.regionList)}catch(m){i.reportOrThrowError(m),i.cue=null,i.state="BADCUE";continue}i.state="CUETEXT";continue;case"CUETEXT":var n=-1!==j.indexOf("-->");if(!j||n&&(l=!0)){i.oncue&&i.oncue(i.cue),i.cue=null,i.state="ID";continue}i.cue.text&&(i.cue.text+="\n"),i.cue.text+=j;continue;case"BADCUE":j||(i.state="ID");continue}}}catch(m){i.reportOrThrowError(m),"CUETEXT"===i.state&&i.cue&&i.oncue&&i.oncue(i.cue),i.cue=null,i.state="INITIAL"===i.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var a=this;try{if(a.buffer+=a.decoder.decode(),(a.cue||"HEADER"===a.state)&&(a.buffer+="\n\n",a.parse()),"INITIAL"===a.state)throw new b(b.Errors.BadSignature)}catch(c){a.reportOrThrowError(c)}return a.onflush&&a.onflush(),this}},a.WebVTT=n}(this,this.vttjs||{});
\ No newline at end of file
diff --git a/static/videojs/videojs-resolution-switcher.css b/static/videojs/videojs-resolution-switcher.css
new file mode 100644
index 0000000..3c7ef67
--- /dev/null
+++ b/static/videojs/videojs-resolution-switcher.css
@@ -0,0 +1,31 @@
+.vjs-resolution-button .vjs-menu-icon:before {
+  content: '\f110';
+  font-family: VideoJS;
+  font-weight: normal;
+  font-style: normal;
+  font-size: 1.8em;
+  line-height: 1.67em;
+}
+
+.vjs-resolution-button .vjs-resolution-button-label {
+  font-size: 1em;
+  line-height: 3em;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  text-align: center;
+  box-sizing: inherit;
+}
+
+.vjs-resolution-button .vjs-menu .vjs-menu-content {
+  width: 4em;
+  left: 50%; /* Center the menu, in it's parent */
+  margin-left: -2em; /* half of width, to center */
+}
+
+.vjs-resolution-button .vjs-menu li {
+  text-transform: none;
+  font-size: 1em;
+}
diff --git a/static/videojs/videojs-resolution-switcher.js b/static/videojs/videojs-resolution-switcher.js
new file mode 100644
index 0000000..eae1c38
--- /dev/null
+++ b/static/videojs/videojs-resolution-switcher.js
@@ -0,0 +1,367 @@
+/*! videojs-resolution-switcher - 2015-7-26
+ * Copyright (c) 2016 Kasper Moskwiak
+ * Modified by Pierre Kraft and Derk-Jan Hartman
+ * Licensed under the Apache-2.0 license. */
+
+(function() {
+  /* jshint eqnull: true*/
+  /* global require */
+  'use strict';
+  var videojs = null;
+  if(typeof window.videojs === 'undefined' && typeof require === 'function') {
+    videojs = require('video.js');
+  } else {
+    videojs = window.videojs;
+  }
+
+  (function(window, videojs) {
+    var videoJsResolutionSwitcher,
+      defaults = {
+        ui: true
+      };
+
+    /*
+     * Resolution menu item
+     */
+    var MenuItem = videojs.getComponent('MenuItem');
+    var ResolutionMenuItem = videojs.extend(MenuItem, {
+      constructor: function(player, options){
+        options.selectable = true;
+        // Sets this.player_, this.options_ and initializes the component
+        MenuItem.call(this, player, options);
+        this.src = options.src;
+
+        player.on('resolutionchange', videojs.bind(this, this.update));
+      }
+    } );
+    ResolutionMenuItem.prototype.handleClick = function(event){
+      MenuItem.prototype.handleClick.call(this,event);
+      this.player_.currentResolution(this.options_.label);
+    };
+    ResolutionMenuItem.prototype.update = function(){
+      var selection = this.player_.currentResolution();
+      this.selected(this.options_.label === selection.label);
+    };
+    MenuItem.registerComponent('ResolutionMenuItem', ResolutionMenuItem);
+
+    /*
+     * Resolution menu button
+     */
+    var MenuButton = videojs.getComponent('MenuButton');
+    var ResolutionMenuButton = videojs.extend(MenuButton, {
+      constructor: function(player, options){
+        this.label = document.createElement('span');
+        options.label = 'Quality';
+        // Sets this.player_, this.options_ and initializes the component
+        MenuButton.call(this, player, options);
+        this.el().setAttribute('aria-label','Quality');
+        this.controlText('Quality');
+
+        if(options.dynamicLabel){
+          videojs.addClass(this.label, 'vjs-resolution-button-label');
+          this.el().appendChild(this.label);
+        }else{
+          var staticLabel = document.createElement('span');
+          videojs.addClass(staticLabel, 'vjs-menu-icon');
+          this.el().appendChild(staticLabel);
+        }
+        player.on('updateSources', videojs.bind( this, this.update ) );
+      }
+    } );
+    ResolutionMenuButton.prototype.createItems = function(){
+      var menuItems = [];
+      var labels = (this.sources && this.sources.label) || {};
+
+      // FIXME order is not guaranteed here.
+      for (var key in labels) {
+        if (labels.hasOwnProperty(key)) {
+          menuItems.push(new ResolutionMenuItem(
+            this.player_,
+            {
+              label: key,
+              src: labels[key],
+              selected: key === (this.currentSelection ? this.currentSelection.label : false)
+            })
+          );
+        }
+      }
+      return menuItems;
+    };
+    ResolutionMenuButton.prototype.update = function(){
+      this.sources = this.player_.getGroupedSrc();
+      this.currentSelection = this.player_.currentResolution();
+      this.label.innerHTML = this.currentSelection ? this.currentSelection.label : '';
+      return MenuButton.prototype.update.call(this);
+    };
+    ResolutionMenuButton.prototype.buildCSSClass = function(){
+      return MenuButton.prototype.buildCSSClass.call( this ) + ' vjs-resolution-button';
+    };
+    MenuButton.registerComponent('ResolutionMenuButton', ResolutionMenuButton);
+
+    /**
+     * Initialize the plugin.
+     * @param {object} [options] configuration for the plugin
+     */
+    videoJsResolutionSwitcher = function(options) {
+      var settings = videojs.mergeOptions(defaults, options),
+          player = this,
+          groupedSrc = {},
+          currentSources = {},
+          currentResolutionState = {};
+
+      /**
+       * Updates player sources or returns current source URL
+       * @param   {Array}  [src] array of sources [{src: '', type: '', label: '', res: ''}]
+       * @returns {Object|String|Array} videojs player object if used as setter or current source URL, object, or array of sources
+       */
+      player.updateSrc = function(src){
+        //Return current src if src is not given
+        if(!src){ return player.src(); }
+
+        // Only add those sources which we can (maybe) play
+        src = src.filter( function(source) {
+          try {
+            return ( player.canPlayType( source.type ) !== '' );
+          } catch (e) {
+            // If a Tech doesn't yet have canPlayType just add it
+            return true;
+          }
+        });
+        //Sort sources
+        this.currentSources = src.sort(compareResolutions);
+        this.groupedSrc = bucketSources(this.currentSources);
+        // Pick one by default
+        var chosen = chooseSrc(this.groupedSrc, this.currentSources);
+        this.currentResolutionState = {
+          label: chosen.label,
+          sources: chosen.sources
+        };
+
+        player.trigger('updateSources');
+        player.setSourcesSanitized(chosen.sources, chosen.label);
+        player.trigger('resolutionchange');
+        return player;
+      };
+
+      /**
+       * Returns current resolution or sets one when label is specified
+       * @param {String}   [label]         label name
+       * @param {Function} [customSourcePicker] custom function to choose source. Takes 2 arguments: sources, label. Must return player object.
+       * @returns {Object}   current resolution object {label: '', sources: []} if used as getter or player object if used as setter
+       */
+      player.currentResolution = function(label, customSourcePicker){
+        if(label == null) { return this.currentResolutionState; }
+
+        // Lookup sources for label
+        if(!this.groupedSrc || !this.groupedSrc.label || !this.groupedSrc.label[label]){
+          return;
+        }
+        var sources = this.groupedSrc.label[label];
+        // Remember player state
+        var currentTime = player.currentTime();
+        var isPaused = player.paused();
+
+        // Hide bigPlayButton
+        if(!isPaused && this.player_.options_.bigPlayButton){
+          this.player_.bigPlayButton.hide();
+        }
+
+        // Change player source and wait for loadeddata event, then play video
+        // loadedmetadata doesn't work right now for flash.
+        // Probably because of https://github.com/videojs/video-js-swf/issues/124
+        // If player preload is 'none' and then loadeddata not fired. So, we need timeupdate event for seek handle (timeupdate doesn't work properly with flash)
+        var handleSeekEvent = 'loadeddata';
+        if(this.player_.techName_ !== 'Youtube' && this.player_.preload() === 'none' && this.player_.techName_ !== 'Flash') {
+          handleSeekEvent = 'timeupdate';
+        }
+        player
+          .setSourcesSanitized(sources, label, customSourcePicker || settings.customSourcePicker)
+          .one(handleSeekEvent, function() {
+            player.currentTime(currentTime);
+            player.handleTechSeeked_();
+            if(!isPaused){
+              // Start playing and hide loadingSpinner (flash issue ?)
+              player.play().handleTechSeeked_();
+            }
+            player.trigger('resolutionchange');
+          });
+        return player;
+      };
+
+      /**
+       * Returns grouped sources by label, resolution and type
+       * @returns {Object} grouped sources: { label: { key: [] }, res: { key: [] }, type: { key: [] } }
+       */
+      player.getGroupedSrc = function(){
+        return this.groupedSrc;
+      };
+
+      player.setSourcesSanitized = function(sources, label, customSourcePicker) {
+        this.currentResolutionState = {
+          label: label,
+          sources: sources
+        };
+        if(typeof customSourcePicker === 'function'){
+          return customSourcePicker(player, sources, label);
+        }
+        player.src(sources.map(function(src) {
+          return {src: src.src, type: src.type, res: src.res};
+        }));
+        return player;
+      };
+
+      /**
+       * Method used for sorting list of sources
+       * @param   {Object} a - source object with res property
+       * @param   {Object} b - source object with res property
+       * @returns {Number} result of comparation
+       */
+      function compareResolutions(a, b){
+        if(!a.res || !b.res){ return 0; }
+        return (+b.res)-(+a.res);
+      }
+
+      /**
+       * Group sources by label, resolution and type
+       * @param   {Array}  src Array of sources
+       * @returns {Object} grouped sources: { label: { key: [] }, res: { key: [] }, type: { key: [] } }
+       */
+      function bucketSources(src){
+        var resolutions = {
+          label: {},
+          res: {},
+          type: {}
+        };
+        src.map(function(source) {
+          initResolutionKey(resolutions, 'label', source);
+          initResolutionKey(resolutions, 'res', source);
+          initResolutionKey(resolutions, 'type', source);
+
+          appendSourceToKey(resolutions, 'label', source);
+          appendSourceToKey(resolutions, 'res', source);
+          appendSourceToKey(resolutions, 'type', source);
+        });
+        return resolutions;
+      }
+
+      function initResolutionKey(resolutions, key, source) {
+        if(resolutions[key][source[key]] == null) {
+          resolutions[key][source[key]] = [];
+        }
+      }
+
+      function appendSourceToKey(resolutions, key, source) {
+        resolutions[key][source[key]].push(source);
+      }
+
+      /**
+       * Choose src if option.default is specified
+       * @param   {Object} groupedSrc {res: { key: [] }}
+       * @param   {Array}  src Array of sources sorted by resolution used to find high and low res
+       * @returns {Object} {res: string, sources: []}
+       */
+      function chooseSrc(groupedSrc, src){
+        var selectedRes = settings['default']; // use array access as default is a reserved keyword
+        var selectedLabel = '';
+        if (selectedRes === 'high') {
+          selectedRes = src[0].res;
+          selectedLabel = src[0].label;
+        } else if (selectedRes === 'low' || selectedRes == null || !groupedSrc.res[selectedRes]) {
+          // Select low-res if default is low or not set
+          selectedRes = src[src.length - 1].res;
+          selectedLabel = src[src.length -1].label;
+        } else if (groupedSrc.res[selectedRes]) {
+          selectedLabel = groupedSrc.res[selectedRes][0].label;
+        }
+
+        return {res: selectedRes, label: selectedLabel, sources: groupedSrc.res[selectedRes]};
+      }
+
+      function initResolutionForYt(player){
+        // Map youtube qualities names
+        var _yts = {
+          highres: {res: 1080, label: '1080', yt: 'highres'},
+          hd1080: {res: 1080, label: '1080', yt: 'hd1080'},
+          hd720: {res: 720, label: '720', yt: 'hd720'},
+          large: {res: 480, label: '480', yt: 'large'},
+          medium: {res: 360, label: '360', yt: 'medium'},
+          small: {res: 240, label: '240', yt: 'small'},
+          tiny: {res: 144, label: '144', yt: 'tiny'},
+          auto: {res: 0, label: 'auto', yt: 'auto'}
+        };
+        // Overwrite default sourcePicker function
+        var _customSourcePicker = function(_player, _sources, _label){
+          // Note that setPlayebackQuality is a suggestion. YT does not always obey it.
+          player.tech_.ytPlayer.setPlaybackQuality(_sources[0]._yt);
+          player.trigger('updateSources');
+          return player;
+        };
+        settings.customSourcePicker = _customSourcePicker;
+
+        // Init resolution
+        player.tech_.ytPlayer.setPlaybackQuality('auto');
+
+        // This is triggered when the resolution actually changes
+        player.tech_.ytPlayer.addEventListener('onPlaybackQualityChange', function(event){
+          for(var res in _yts) {
+            if(res.yt === event.data) {
+              player.currentResolution(res.label, _customSourcePicker);
+              return;
+            }
+          }
+        });
+
+        // We must wait for play event
+        player.one('play', function(){
+          var qualities = player.tech_.ytPlayer.getAvailableQualityLevels();
+          var _sources = [];
+
+          qualities.map(function(q){
+            _sources.push({
+              src: player.src().src,
+              type: player.src().type,
+              label: _yts[q].label,
+              res: _yts[q].res,
+              _yt: _yts[q].yt
+            });
+          });
+
+          player.groupedSrc = bucketSources(_sources);
+          var chosen = {label: 'auto', res: 0, sources: player.groupedSrc.label.auto};
+
+          this.currentResolutionState = {
+            label: chosen.label,
+            sources: chosen.sources
+          };
+
+          player.trigger('updateSources');
+          player.setSourcesSanitized(chosen.sources, chosen.label, _customSourcePicker);
+        });
+      }
+
+      player.ready(function(){
+        if( settings.ui ) {
+          var menuButton = new ResolutionMenuButton(player, settings);
+          player.controlBar.resolutionSwitcher = player.controlBar.el_.insertBefore(menuButton.el_, player.controlBar.getChild('fullscreenToggle').el_);
+          player.controlBar.resolutionSwitcher.dispose = function(){
+            this.parentNode.removeChild(this);
+          };
+        }
+        if(player.options_.sources.length > 1){
+          // tech: Html5 and Flash
+          // Create resolution switcher for videos form <source> tag inside <video>
+          player.updateSrc(player.options_.sources);
+        }
+
+        if(player.techName_ === 'Youtube'){
+         // tech: YouTube
+         initResolutionForYt(player);
+        }
+      });
+
+    };
+
+    // register the plugin
+    videojs.plugin('videoJsResolutionSwitcher', videoJsResolutionSwitcher);
+  })(window, videojs);
+})();
diff --git a/templates/base.html b/templates/base.html
index 4ebeea7..7499723 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -17,11 +17,16 @@
 		<link href="{{url_for('static', filename='bootstrap/bootstrap.css')}}" rel="stylesheet">
 		<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}">
 		<link rel="stylesheet" href="{{url_for('static', filename='font-awesome/css/font-awesome.min.css')}}">
+		<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='videojs/video-js.css')}}">
+		<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='videojs/videojs-resolution-switcher.css')}}">
 
 		<script src="{{url_for('static', filename='jquery.js')}}"></script>
 		<script src="{{url_for('static', filename='bootstrap/bootstrap.js')}}"></script>
 		<script src="{{url_for('static', filename='js.cookie.js')}}"></script>
 		{%if ismod() %}<script src="{{url_for('static', filename='moderator.js')}}"></script>{% endif %}
+		<script src="{{url_for('static', filename='videojs/video.js')}}"></script>
+		<script src="{{url_for('static', filename='videojs/ie8/videojs-ie8.js')}}"></script>
+		<script src="{{url_for('static', filename='videojs/videojs-resolution-switcher.js')}}"></script>
 	</head>
 	<body>
 	{% block navbar %}
diff --git a/templates/chapters.srt b/templates/chapters.srt
index cf76270..3269d65 100644
--- a/templates/chapters.srt
+++ b/templates/chapters.srt
@@ -10,6 +10,6 @@ WEBVTT
 
 {% else %}
 00:00:00.000 --> 23:59:59.999
-Video
+none
 
 {% endfor %}
diff --git a/templates/lecture.html b/templates/lecture.html
index f135ca5..d745d61 100644
--- a/templates/lecture.html
+++ b/templates/lecture.html
@@ -41,7 +41,7 @@
 					<th></th>
 				</tr>
 				{% for c in chapters|sort(attribute='time') %}
-				<tr onclick=" $('.player video')[0].setCurrentTime({{c['time']}})">
+				<tr onclick="videojs('videoplayer').currentTime({{c['time']}})">
 					<td>{{ loop.index }}</td>
 					<td>{{ vtttime(c['time']) }}</td>
 					<td>{{ valueeditor(['chapters',c.id,'text'],c['text']) }}</td>
@@ -65,7 +65,7 @@ $(function() {
 						  var zero = places - num.toString().length + 1;
 						    return Array(+(zero > 0 && zero)).join("0") + num;
 					};
-					var timestamp = $('.player video')[0].currentTime
+					var timestamp = videojs('videoplayer').currentTime()
 					var h = zeropad( Math.trunc(timestamp/3600),2);
 					var m = zeropad( Math.trunc((timestamp%3600)/60),2);
 					var s = zeropad( Math.trunc(timestamp%60),2);
diff --git a/templates/macros.html b/templates/macros.html
index 23b57e0..b6ad23d 100644
--- a/templates/macros.html
+++ b/templates/macros.html
@@ -42,25 +42,12 @@
 {% endmacro %}
 
 {% macro player(lecture, videos) %}
-<script src="{{url_for('static', filename='mediaelementjs/mediaelement-and-player.js')}}"></script>
-<script src="{{url_for('static', filename='mediaelementjs/mep-feature-sourcechooser.js')}}"></script>
-<link rel="stylesheet" href="{{url_for('static', filename='mediaelementjs/mediaelementplayer.css')}}"/>
-<video class="player" width="640" height="360" style="width: 100%; height: 100%;" controls="controls">
+<video id="videoplayer" class="video-js vjs-default-skin vjs-16-9 vjs-big-play-centered" width="640" height="320" controls  data-setup='{ "plugins" : {"videoJsResolutionSwitcher": { "ui": true, "default": "720p", "dynamicLabel": true } }, "customControlsOnMobile": true, "playbackRates": [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4] }'>
 	{% for v in videos|sort(attribute='player_prio', reverse=True) %}
-		<source type="video/mp4" src="{{ config.VIDEOPREFIX }}/{{ v.path }}" title="{{ v.format_description }}"/>
+		<source type="video/mp4" src="{{ config.VIDEOPREFIX }}/{{ v.path }}" label="{{ v.format_description }}"/>
 	{% endfor %}
 	<track srclang="en" kind="chapters" src="{{ url_for('chapters',lectureid=lecture.id) }}" />
 </video>
-<script>
-		$(function($)
-		{
-			var player = new MediaElementPlayer('.player', {
-				features: [
-					'playpause', 'current', 'progress', 'duration', 'volume', 'tracks', 'sourcechooser', 'speed', 'fullscreen',
-				],
-			});
-		});
-</script>
 {% endmacro %}
 
 {% macro course_list_item(course,show_semester=False) %}
-- 
GitLab